一.项目简介
本项目分为两个模块,分别是:诗词爬取模块和数据可视化模块。主要是通过对 古诗文网 的唐诗三百首的内容进行爬取,并将爬取到的内容存储到 MySQL 数据库当中,并将相关的数据内容进行统计,最终将其以图表等形式展示出来的一个 JavaWeb 项目。(其中对诗人以及他们分别创作的著作数量使用柱状图来进行展示,对所有诗词的所有分词以及它们的使用频率使用词云来进行展示)
核心技术:
- Servlet 的使用
- Java 操作 MySQL 数据库
- 数据库设计
- 响应风格
- gson 的使用
- HTTP 协议的理解
- Servlet 的使用
- HtmlUtil 第三方库的使用
- ansj_seg 第三方库的使用
- sha-256 算法
- 多线程技术
- 软件测试的基本策略和方法
二.技术选型
1.前端页面展示渲染工具( echarts )
做一个可视化项目:调研有哪些成熟的可视化第三库类库可以使用,最后选择echarts。
echarts官网
echarts 它是一个开源免费的 javascript 可视化库,本项目中前端页面展示中用到的柱状图和云图皆来源于它。
选择第三方库 echarts 的原因:
- 开源免费
- 使用方便:可以直接在其网站上进行调试,得到自己想要的效果,然后进行下载
- 功能丰富
- 社区活跃,使用人多,方便询问
2.前后端交互技术( jQuery)
利用 $.ajax() 发起一个 HTTP 请求,进行前后端数据的交互。
3.列表页和详情页的请求和解析 ( HtmlUtil )
HtmlUtil 是一款开源的 java 页面分析工具,读取页面后,可以有效的使用HtmlUtil 分析页面上的内容,项目可以模拟浏览器运行(一个没有界面的浏览器),被誉为 java 浏览器的开源实现,同时它的运行速度迅速。
一般来说,在小型爬虫项目中,这种框架十分常用,它可以有效的分析出 dom 的标签,并且有效的运行页面上的 js 以便得到一些需要执行 js 才能得到的值。
在这里,我们利用 HtmlUtil 第三方库中的相应方法,来进行一个 Html 页面的请求和解析工作。
在 pom.xml 中加入相应依赖:
<dependency>
<groupId>net.sourceforge.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
<version>2.36.0</version>
</dependency>
通过 HtmlUnit 库,我们可以很轻易的模拟一个浏览器,发起对一个网页的请求,并获得相应的页面元素 HtmlPage .
总结:HtmlUnit 说白了就是一个浏览器,这个浏览器是用 Java 写的无界面的浏览器,正因为其没有界面,因此它执行的速度很快,HtmlUnit 还提供了一系列的 API,这些 API 可以提供的功能比较多,如表单的填充,表单的提交,模仿点击链接等等,由于它还内置了 Rhinojs 引擎,因此可以执行Javascript 代码。
4. Java 语言操作数据库( JDBC )
在 pom.xml 中加入相应依赖:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
5.响应字符串( fastjson )
控制自己编写的每一个 Servlet 类实现的方法中的每一个返回值(响应数据)都是 JSON 格式的字符串。
使用 fastjson 第三方类库的原因:
- 使用方便
- 支持国产
在 pom.xml 中加入相应依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
6.分词功能( ansj_seg )
展示页面涉及到了根据每一个词的出现频率来进行词图的展示。这里根据每一首诗的标题和内容来进行分词。我们采用第三方类库 ansj_seg 来完成分词功能。
在 pom.xml 中加入相应依赖:
<dependency>
<groupId>org.ansj</groupId>
<artifactId>ansj_seg</artifactId>
<version>5.1.6</version>
</dependency>
7.Maven 来进行项目管理
使用原因:帮助我们完成项目构建解决一切繁琐事宜
Maven 的好处:
- 提供一个标准的项目工程目录
- 提供项目描述
- 提供强大的版本管理工具
- 可以分阶段的进行构建过程
- 提供了丰富的插件库使用
- 帮助我们进行依赖管理
三.选型技术的简单使用Demo
1.使用 HtmlUtil
package lab;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlBody;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import java.io.File;
import java.io.IOException;
import java.util.List;
public class HtmlUtilDemo {
public static void main(String[] args) throws IOException {
//无界面的浏览器(HTTP客户端)
WebClient webClient=new WebClient(BrowserVersion.CHROME);
//关闭了浏览器的js执行引擎,不再执行网页中的js脚本
webClient.getOptions().setJavaScriptEnabled(false);
//关闭了浏览器的css执行引擎,不再执行网页中的css布局
webClient.getOptions()