我的项目_唐诗可视化项目

该项目旨在爬取古诗文网的唐诗三百首,通过JavaWeb实现数据存储和可视化展示。技术选型包括Maven、JDBC、HtmlUtil、ansj_seg、jQuery、echarts等。数据爬取模块采用单线程、多线程和线程池实现,数据可视化模块通过Servlet处理数据并使用echarts展示图表。项目测试成功,实现了诗人作诗量的柱状图和高频词汇的词云图。
摘要由CSDN通过智能技术生成

 

目录

一、项目:唐诗可视化

二、技术选型

三、数据库表的设计

四、选型技术的简单使用Demo(预研阶段)

五、实现思路

六、唐诗爬取模块实现

单线程版本:

多线程版本:

线程池:

改进线程池的版本:

七、数据可视化模块实现

RankServlet 处理作者作诗数:

WordServlet提供给前端处理用词统计:

八、实验结果

九、项目测试

十、回味无穷


一、项目:唐诗可视化

项目目的:爬取 古诗文网 唐诗三百首的内容,将爬取到的内容存储到数据库当中,并对数据进行处理分析等,最终将其以图表等形式展示出来的一个 JavaWeb 项目,目的是使用户能更直观快速的去了解古代唐诗。

项目分为两个模块:诗词爬取模块数据可视化模块

项目核心技术:

  • JDBC(数据库操作)
  1. 唐诗数据保存至数据库 。
  2. 页面展示时提取数据库信息。
  • 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 抓取网页

步骤:

  1. 定义一个 WebClient 客户端,就相当于定义了一个没有界面的浏览器;
  2. 使用 WebClient 客户端从指定 URL 获取 HtmlPage,HtmlPage 中包含目标 URL页面中的所有元素;
  3. 从 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值