唐诗分析器

数据可视化— — 唐诗分析

一、抓取模块

1.步骤
1)抓取详情页(html格式)
2)从html中提取1)详情页信息 2)总共抓多少诗
3)分别抓取详情页(html格式)
4)从详情页html中提取诗词信息(标题、朝代、作者、正文)
5)计算sha256(标题+正文)求一个hash值,保证数据不重复
6)调用一个分词第三方库,对内容进行分词
7)把数据保存到数据库的表中

2.数据抓取阶段需要的第三方依赖
1)数据库操作
2)HTML页面请求+解析:htmlunit
3)分词:ansj_seg

项目编写
1.预研阶段
1)技术选型:网页抓取的第三方库很多,为什么选择了htmlunit
大家都在用,出现问题可以请教,htmlunit比较成熟
2)用法调研:可以通过实现简单的demo,熟悉库的使用
3)实验评估:效率是否满足需求,内存使用是否满足需求,使用过程中是否遇到的复杂问题

通过域名得到ip地址
ping so.gushiwen.org(其中一个ip)
nslookup so.gushiwen.org(所有ip)

wireshark过滤条件
1)ip.addr219.144.99.106
2)http.host
so.gushiwen.org

3.建表

create database db_tangshi charset utf8;
use db_tangshi;

唐诗表:
1)自增主键
2)朝代
3)标题
4)作者
5)正文
6)分词信息(用逗号分割的词)
7)唯一键hash(标题+正文) SHA-256

create table tangshi(
	id int primary key auto_increment,
	sha256 char(64) not null unique,
	dynasty varchar(10) not null,
	title varchar(100) not null,
	author varchar(10) not null,
	content text not null,
	words text not null
	);

4.多线程版本
1)提高效率
将请求详情页,提取诗词信息,计算sha256,计算分词,存数据库
2)问题
WebClient不是线程安全的:每个线程创建自己的client对象
Connection不是线程安全的:每个线程创建自己的connection
MessageDigest不是线程安全的:每个有自己的对象
3)重复插入错误
如果是重复插入,忽略错误

catch (SQLException e) {
     if(!e.getMessage().contains("Duplicate entry")){
           e.printStackTrace();
     }
}

4)进程不会结束
原因:JVM结束的条件:所有非后台线程结束才会结束
线程池中的线程是不会结束的
改进方法:
1》等所有的诗都下载结束,调用pool.shutdown()才能结束
2》CountDownLutch
等的线程await()
完成线程countDown()

5.代码部分
1)下载详情页
2)解析详情页
3)计算SHA-256
4)计算分词
5)保存数据库

二、可视化
1.开发步骤
1)只用echarts,数据是写死的,开发想要的效果出来
2)预研下ajax技术,选择使用jquery来进行ajax请求,理由使用jquery相对比较简单,文档比较成熟,只用jquery,完成了一个最简单的ajax情况(数据是静态数据)
3)集合echarts和jquery,完成了一个针对静态数据的ajax请求+可视化效果
4)把静态资源替换成动态资源,把写死的这个rank.json中的数据改成Servlet处理,从DB中读取
5)预研返回JSON的第三方库(Gson)
2.词频统计
1.通过select words from tangshi:拿到所有的词
2.通过Map,统计每个词出现的次数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值