唐诗分析之数据爬取

该项目使用HtmlUnit库进行数据爬取,XPath进行元素定位,通过SHA-256实现去重,ansj_seg进行分词,数据存储于MySQL数据库。关键方法包括getElementsByAttribute、getAttribute和XPath定位。数据库表设计包含标题、作者、朝代、正文和分词信息等字段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目思路

步骤如下:

 先抓取唐诗数据的列表页(HTML格式)
 从HTML中提取   ①详情页信息  ②总共抓了多少首诗
 分别抓取每首诗的详情页(HTML格式)
 从详情页HTML中提取诗词信息(标题、朝代、作者、正文)
 计算 sha256(标题+正文)——求了一个hash值,保证数据不重复 
 调用一个分词第三方库,对内容进行分词,用于词云图展示
 将数据保存入库

技术选型

分析上述几个步骤,我们需要用到很多第三方库,有了技术的支持才能完成对应的功能。

1、HtmlUnit(用于数据爬取)

 通过HtmlUnit库,可以很方便的加载一个完整的Html页面而且可以很轻易的模拟各种浏览器。
 用其他工具来获取其中的元素了。当然也可以直接在HtmlUnit提供的对象中获取网页元素(比
 如诗词的文本内容或详情页的url)。

此处的列表页请求、解析我用的是HtmlUnit库提供的对象进行的数据获取。

2、XPath(元素定位)
通过XPath的基本定位用法,可以一次性的直接获取到每首诗的具体某个信息(如:标题、作者、朝代、正文)。

标题:”//div[@class=‘cont’]/h1/text()”
朝代:”//div[@class=‘cont’]/p[@class=‘source’]/[1]/a[1]/text()”
作者:”//div[@class=‘cont’]/p[@class=‘source’]/[1]/a[2]/text()”
正文:”//div[@class=‘cont’]/div[@class=‘contson’]”.getTextContent()

3、SHA-256(每首诗的唯一标识)
通过计算的每首诗的sha-256可以去重,保证数据唯一性。

4、ansj_seg(分词)
通过ansj_seg,可以对获取到的诗正文内容进行分词,用于将来的展示。

5、MySQL数据库(数据存储)
这是一个轻量级的数据库,操作方便。利用客户端我们可以方便的对数据进行存储与管理。

6、maven(项目管理工具)
在项目开发的过程中,我们会用到很多依赖包,所以此时maven管理是必不可少的,它可以极大提高开发效率。

熟悉以上工具使用

HtmlUnit的使用:通过编写一个Demo的方式去熟悉工具的简单使用。

//列表页下载提取Demo
public class 列表页下载提取Demo {
   
    public static void main(String[] args) throws IOException {
   
         //无界面的浏览器(HTTP 客户端)
        WebClient webClient = new WebClient(BrowserVersion.CHROME);
        //关闭了浏览器的js执行引擎和css执行引擎
        webClient.getOptions().setJavaScriptEnabled(false);
        webClient.getOptions().setCssEnabled(false);
        webClient.getOptions().setUseInsecureSSL(true);

        //请求列表页
        HtmlPage page = webClient.getPage("https://so.gushiwen.org/gushi/tangshi.aspx");
        System.out.println(page);

        //保存到指定路径
        File file = new File("唐诗三百首\\列表页.html");
        page.save(file);
        //获取html的body标签的内容
        HtmlElement body = page.getBody();
        //获取body中的有用的标签
        List<HtmlElement> elements = body.getElementsByAttribute(
                "div",
                "class",
                "typecont");
         /* for (HtmlElement e:elements){
            System.out.println(e);
        }*/

        //取出五言绝句
        HtmlElement divElement = elements.get(0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值