目录
一、项目:唐诗可视化
项目目的:爬取 古诗文网 唐诗三百首的内容,将爬取到的内容存储到数据库当中,并对数据进行处理分析等,最终将其以图表等形式展示出来的一个 JavaWeb 项目,目的是使用户能更直观快速的去了解古代唐诗。
项目分为两个模块:诗词爬取模块 和 数据可视化模块。
项目核心技术:
- JDBC(数据库操作)
- 唐诗数据保存至数据库 。
- 页面展示时提取数据库信息。
- Servlet 的使用
- HTTP 协议
- HtmlUtil、ansj_seg 第三方库的使用
- sha-256 算法
- 多线程技术
- jQuery 前后端交互(进行异步来提交更新数据)
- 软件测试的基本策略和方法
项目设计:
1、获取数据
- 访问列表页(唐诗三百首大全)来获取页面中唐诗数据;
- 编写程序模拟客户端向浏览器构建 Http 请求获取 Html 页面数据;
- 将获取到的列表页 html 数据,保存在 列表页.html 中。
2、分析数据和整理数据
- 观察 列表页.xml 中的表单,提取每首唐诗页面的子路径 ,保存至 LinkedList 中;
- 根据每首诗的 url ,获取每首的详情页(诗词页)页面数据,将页面中诗的作者、标题、朝代、诗词正文等提取出来;
- 计算 sha256(标题+正文),保证数据不重复;
- 调用分词的第三方库,对内容进行分词;
- 将数据保存至数据库中。
3、提取数据库中的信息选择合适的图形界面来展示。
- 唐朝的各个诗人的作诗量(柱状图);
- 诗人们使用最频繁的词语(词云)。
二、技术选型
1、Maven 来进行项目管理
Maven 就是专门为 Java 项目打造的管理和构建工具,它的主要功能有:
- 提供了一套标准化的项目结构;
- 提供了一套标准化的构建流程(编译,测试,打包,发布……);
- 提供了一套依赖管理机制。
一个使用Maven管理的普通的Java项目,它的目录结构默认如下:
项目的根目录
a-maven-project
是项目名,它有一个项目描述文件
pom.xml
,存放Java源码的目录是src/main/java
,存放资源文件的目录是src/main/resources
,存放测试源码的目录是src/test/java
,存放测试资源的目录是src/test/resources
,最后,所有编译、打包生成的文件都放在target
目录里。
2、Java 语言操作数据库(JDBC)
在 pom.xml 中加入相应依赖:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
3、列表页和详情页的请求解析(HtmlUtil)
HtmlUtil 是一款开源的 java 页面分析工具,读取页面后,可以有效的使用HtmlUtil 分析页面上的内容,项目可以模拟浏览器运行(一个没有界面的浏览器),被誉为 java 浏览器的开源实现,同时它的运行速度迅速。
在这里,我们利用 HtmlUtil 第三方库中的相应方法,来进行一个 Html 页面的请求和解析工作。
在 pom.xml 中加入相应依赖:
<dependency>
<groupId>net.sourceforge.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
<version>2.36.0</version>
</dependency>
通过 HtmlUnit 库,我们可以很方便的加载一个完整的 Html 页面而且可以很轻易的模拟各种浏览器,发起对一个网页的请求,并获得相应的页面元素 HtmlPage .
总结:HtmlUnit 说白了就是一个浏览器,这个浏览器是用 Java 写的无界面的浏览器,正因为其没有界面,因此它执行的速度很快,HtmlUnit 还提供了一系列的 API,这些 API 可以提供的功能比较多,如表单的填充,表单的提交,模仿点击链接等等,由于它还内置了 Rhinojs 引擎,因此可以执行Javascript 代码。
4、分词功能(ansj_seg)
展示页面涉及到了根据每一个词的出现频率来进行词图的展示。这里根据每一首诗的标题和内容来进行分词。我们采用第三方类库 ansj_seg 来完成分词功能。
在 pom.xml 中加入相应依赖:
<dependency>
<groupId>org.ansj</groupId>
<artifactId>ansj_seg</artifactId>
<version>5.1.6</version>
</dependency>
5、前端页面展示渲染工具(echarts:enterprise charts,商业级数据图表)
做一个可视化项目:调研有哪些成熟的可视化第三方类库可以使用 echarts
echarts 它是一个开源免费的 javascript 可视化库,本项目中前端页面展示中用到的柱状图和云图皆来源于它。
选择第三方库 echarts 的原因:
- 开源免费
- 使用简单,在官网为我们封装了js,只要会引用就会得到完美的展示效果(可以直接在其网站上进行调试,得到自己想要的效果,然后进行下载)
- 功能丰富,种类繁多
6、前后端交互技术(jQuery)
利用 $.ajax() 发起一个 HTTP 请求,进行前后端数据的交互。
7、响应字符串(fastjson)
控制自己编写的每一个 Servlet 类实现的方法中的每一个返回值(响应数据)都是 JSON 格式的字符串。
在 pom.xml 中加入相应依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
三、数据库表的设计
1、建表
CREATE DATABASE tangshi CHARSET utf8mb4;
use tangshi;
CREATE TABLE t_tangshi(
id INT PRIMARY KEY AUTO_INCREMENT,
sha256 CHAR(64) NOT NULL UNIQUE,
dynasty VARCHAR(20) NOT NULL,
title VARCHAR(30) NOT NULL,
author VARCHAR(10) NOT NULL,
content TEXT NOT NULL,
words TEXT NOT NULL
);
为什么要引入 sha-256 ?
使用 sha256 ,为每首诗生成一个唯一标识符,可以(标题 +正文)来计算 sha-256 的值,保证同一首诗不会被重复插入。
查看字符编码:
四、选型技术的简单使用Demo(预研阶段)
1、使用 HtmlUtil 抓取网页
步骤:
- 定义一个 WebClient 客户端,就相当于定义了一个没有界面的浏览器;
- 使用 WebClient 客户端从指定 URL 获取 HtmlPage,HtmlPage 中包含目标 URL页面中的所有元素;
- 从 Htmlpage 中获取我们需要的指定元素。
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import java.io.File;
import java.io.IOException;
import java.util.List;
publ