一. 唐诗项目介绍
1.1项目背景
爬虫技术一直处于风口浪尖,爬了不该爬的会引来一身官司,爬想爬取的数据又不会轻而易举获得,但是又想来玩玩爬虫技术,怎么办呢?首选古诗文网,因为据了解它是没有设置任何反爬虫机制的,数据都是公开合法的,这里我就选择了唐诗三百首来进行爬虫,你们不好奇哪位唐代诗人写的诗最多吗?你们不好奇诗人们最喜欢用什么词去作诗吗?如果你对唐诗也感兴趣,那就跟我一起开启这个奇妙的诗词探险吧。
1.2项目需求
一.用柱状图来展示诗人们的姓名和诗词数量,并按诗词数量降序排序。
二.用词云来展示词的使用频度,使用最频繁的词应该一眼看出。
1.3项目设计
一.通过爬虫机制把唐诗的数据爬取出来,对它进行解析,将每首诗的数据写入到数据库中。
二.通过发起请求来对数据进行分析筛选,最后渲染成可视化效果。
1.4项目工具选择
这是一个Web项目,Java选择用IDEA这个编译器,选择用maven来引进一些需要用到的第三方库,通过tomcat这个Web应用服务器来执行。
二.唐诗数据爬取模块
2.1技术选型环节
2.1.1爬虫技术
我了解到的爬虫技术栈有 HtmlUnit,HttpClient,这里我选择了HtmlUnit这个框架。
- 原因:HttpClient是用来模拟HTTP请求的,用的是socket通信,通过get方法来提交请求,只能获取html静态页面的源码,如果页面中有js部分,则不能获取到js执行后的源码。
HtmlUnit是一款无界面的浏览器程序库,它模拟用户去操作浏览器,允许调用页面,填写表单,点击链接等,还可以执行js,有很多的API用起来也非常方便。
2.1.2分词技术
使用ansj_seg库对古诗的标题和正文进行分词,为词云做准备。这个中文分词器正确率高,不容易出做,分词速度也快,效果也比较高。
2.2项目依赖环节
解析请求html页面
<dependency>
<groupId>net.sourceforge.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
<version>2.36.0</version>
</dependency>
分词
<dependency>
<groupId>org.ansj</groupId>
<artifactId>ansj_seg</artifactId>
<version>5.1.6</version>
</dependency>
2.3预研环节
通过编写一些Demo来熟悉这些技术的使用,看看它展示的效果是否满意。
2.3.1解析列表页Demo
WebClient client = new WebClient(BrowserVersion.CHROME);
client.getOptions().setJavaScriptEnabled(false);
client.getOptions().setCssEnabled(false);
String baseurl = "https://so.gushiwen.org";
String pathurl = "/gushi/tangshi.aspx";
List<String> detailUrlList = new ArrayList<>();//所有古诗的详情页的url
//列表页的解析
{
String url = baseurl + pathurl;
HtmlPage page = client.getPage(url);//获取诗词页面
List<HtmlElement> divs &