唐诗数据分析

该项目旨在分析唐诗数据,通过柱状图展示诗人作诗量,以词云形式展示词语频率。采用JavaWeb技术,利用MySQL数据库、HtmlUnit爬虫、FastJSON、ansj_seg分词库。前端使用Echarts实现可视化,涉及多线程处理和软件测试。
摘要由CSDN通过智能技术生成

一、项目背景

1. 项目意图

通过分析唐诗数据,让数据以图的形式展示出来。

2. 项目描述

对唐诗的内容进行数据统计并将其以图表等形式可视化出来的一个JavaWeb项目。其中对诗人的作诗量使用柱状图进行展示,对词语的使用频率通过词云进行展示。

2.1 核心功能

  • 诗人及其作诗量以柱状图的形式在页面展示;
  • 作诗用词按使用频率以云图的形式在页面展示。

2.2 核心技术

  1. 使用数据库(MySQL),通过JDBC操作MySQL;
  2. 数据库设计(根据实际场景设计数据库表结构);
  3. 使用Java中的FastJSON这个库操作JSON数据;
  4. Servlet的使用;
  5. 使用HtmlUnit库爬取网页数据;
  6. 使用ansj_seg库对诗内容进行分词;
  7. 多线程后台处理;
  8. 软件测试的基本思想和方法。

二、项目设计

在这里插入图片描述

1. 爬取数据

1.1 数据库中表的设计

要存的是唐诗,并且可以按频率展示作诗所用词。至少该包含以下属性:
诗名、作者、朝代、正文、词语。
为了保证插入的不重复我们设置一个SHA-256属性(共64位)。最后再加上主键自增长的id。

CREATE DATABASE tangshi;
USE tangshi;

-- 最终表
CREATE TABLE t_tangshi(
id INT AUTO_INCREMENT PRIMARY KEY,
sha256 CHAR(64) NOT NULL UNIQUE,
dynasty VARCHAR(20) NOT NULL,
title VARCHAR(30) NOT NULL,
author VARCHAR(20) NOT NULL,
content TEXT NOT NULL,
words TEXT NOT NULL
);

1.2 数据采集

  • HtmlUnit库对网页进行抓取和解析
    使用HtmlUnit库,可以加载一个完整的Html页面爬取数据,这些数据包括HtmlPage,网页的URL,子页面的集合,数据对象等。
  1. HtmlPage是HtmlUnit库中的一个类,表示一个网页的page对象,可以获取网页的文档信息,比如该页面的内容,标题等;
  2. 网页的URL,可以发现所有子页面的路径中,前半部分都是一样的,所以我们可以将这个URL分成两部分,前半部分是网站的根地址,后半部分是具体的网页路径。
    在这里插入图片描述
  3. getElementsByAttribute()方法
body.getElementsByAttribute(“div”,class,“typecont”);

获取div标签中class属性为typecont的html元素。由html的语法可以知道Dom树中可能不只这一个该元素,所以返回值为一个集合类型。

  1. getAttribute()方法
aElements.get(0).getAttribute(“href”);

可以利用该方法同样获得a标签元素,然后利用该方法获得属性href的值,这个值就是需要的详情页的相对应的访问链接。

  1. XPath路径
    在这里插入图片描述
    在这里插入图片描述
    a[1]或a[2]表示该路径下有多个a标签,下标的值从1开始。

1.3 数据解析

采用多线程进行数据解析处理。
抓取首页网站(列表页)由主线程负责,具体每个详情页(每一首的单独页面)由单个子线程进行解析并存入数据库。

注意:
1)无界面的浏览器(HTTP 客户端) WebClient 不是线程安全:每个线程创建自己的client对象;
2)生成SHA-256的MessageDigest不是线程安全:每个线程创建自己的messageDigest对象;
3)连接数据库的Connection不是线程安全:每个线程创建自己的connection对象;

// 
public class MultipleThread {
   
    private static class Job implements Runnable{
   
        private String url;
        private MessageDigest messageDigest;
        private Connection connection;

        public Job(String url, MessageDigest messageDigest, Connection connection) {
   
            this.url = url;
            this.messageDigest = messageDigest;
            this.connection = connection;
        }

        @Override
        public void run() {
   
            WebClient client = new WebClient(BrowserVersion.CHROME);
            client.getOptions().setCssEnabled(false)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值