1. 简介
该项目主要是通过爬取网络上的古诗,并对其进行数据的清洗,存储以及分析,根据所得的可视化结果获取一些有关古诗的小秘密。
2. 前言
我们从小就学习了许多的古诗,同时大数据也比较火热,我就将两者联系起来。这样,即初步了解了数据分析的基本流程,也锻炼了用所学技术解决问题的能力,同时还从中了解到一些古诗中的小秘密。将编程与生活联系起来,为编程增加了不少乐趣。
这个只是第一个版本,后续我还会把这个项目用Spring等框架优化一下。
3. 功能实现
- 数据的采集、解析与存储
- 数据的访问、分析与可视化展示
- 在该项目中数据的分析为两点
- 统计诗人与其创作诗歌数量之间的关系
- 统计古诗中的高频词
- 在该项目中数据的分析为两点
3. 模块划分
-
3.1 爬虫
- 采集
- 模拟浏览器发出请求,获取网页数据。
- html文档解析
- 将采集到的网页,通过对标签进行解析,获取到文档片段。
- 数据存储
- 将爬取的数据存入数据库。
- 采集
-
3.2 数据分析
- 数据访问
- 从数据库中获取数据。
- 数据分析
- 对数据进行简单的分析
- Web接口
- 构建Web应用
- 数据访问
4. 功能分析
利用Maven管理该项目。
-
4.1 前期分析
-
利用第三方工具 htmlunit 来实现对数据的采集和解析。以流的形式来处理,dom解析。该工具能够将dom中的节点(标签)取出。
-
查询到超链接,爬虫古诗的题目、作者以及诗文内容。为了方便统计,将数据格式化后放到数据库。
- 由于将采集、解析以及清洗同步进行,效率过低。利用多线程,进行异步处理。
- 分别使用线程进行采集解析以及传送数据的工作。
- 利用调度池进行任务的分配(生产者消费者模型),选择固定大小线程池 FixedThreadPool。
- 采集网页,采集完成后放入队列(生产者)。解析器从队列中获取网页进行解析(消费者),解析完成后放入队列(生产者)。传送管道从队列中获取解析后的数据,存入数据库。
- 数据的存取:项目中最好不要反复的创建数据库连接,于是使用连接池Druid
- 分析方式的选取
- 实时分析
- 流程:采集、解析、统计分析、存储统计结果
- 离线分析(本项目数据较小,采用该方式)
- 流程:采集、解析、存储原始数据、查询、统计分析
- 实时分析
- 利用第三方工具 Echarts 实现数据的可视化
-
-
4.2 具体实现
- 4.2.1 采集
- 将网页抽象成Java对象 Page,对链接页与详情页进行区分,以便后续的解析工作。
- 4.2.2 解析 Parse
- 详情页:对详情页中的文档片段进行更加细致的信息抽取。
- 链接页:没有古诗的正文,但有每首诗正文的超链接。通过超链接获取到详情页。
- 4.2.3 数据存储及访问 Pipeline、AnalyzeDao
- 利用JDBC,在数据库中进行数据的存取。
- 4.2.4 数据分析 AnalyzeService
- 利用sql语句来统计诗人的创作数量
- 利用ansj实现文本的分词
- 4.2.5 Web接口
- 利用 Sparkjava嵌入式Web容器,将可视化结果显示在页面中。
- 4.2.1 采集
5. 使用技术
- Stream和Lambda
- 文本分词和解析 ansj
- 多线程
- 网页解析工具 htmlunit
- 数据库和JDBC编程
- 数据可视化
- Sparkjava嵌入式Web容器构建web应用
- DIY构建对象管理工厂