JAVA使用jsoup爬取小说

前言

随着大数据产业的发展,越来越多的数据需要被采集与挖掘,对于非相关专业的人来说数据采集最多的途径就是下载,但是仍然有一些数据是隐藏在网页中的,只能观看不能下载,这时有人说可以通过复制粘贴的方法进行保存,其实这也是一个方法,但是在庞大的数据量面前,如果单靠手动是及其消耗时间的,所以通过程序来将数据提取出来就可以达到节省时间的目的,从而提高了效率。本文以小说为例,运用JAVA爬虫技术,将小说下载到本地磁盘中。本文基于JAVA讲述,运用工具为idea,如果没有idea的小伙伴可以先去其他文章学习一下如何下载安装。

1、JAVA爬虫是什么?

通俗一点的讲,JAVA爬虫就是运用特定的技术,将网页上的数据下载到硬盘中,和Python爬虫类似

2、页面分析

2.1、这里我们将要爬取小说的网页用来演示:https://www.qb5.ch/book_91025/

image-20231215192109045

2.2、按F12进入网页调试页面。

image-20231215192328681

2.3、将小鼠标放到要爬取的文字上点击,会出现如下图所示的界面

image-20231215192713390

image-20231215192943022

3、代码实现

3.1、pom.xml文件中引入Jsoup包
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.nacl</groupId>
    <artifactId>demo</artifactId>
    <version>1.0-SNAPSHOT</version>
<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.0</version>
</parent>
    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-mongodb -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
         <!-- 静态爬虫必备 -->
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.14.3</version>
        </dependency>
        <!--测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
</project>
3.2、创建NovelJsoup测试类
package com.nacl;

import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

/**
 * @author HAOYANG
 * @create 2023-12-15 14:37
 */
@SpringBootTest
public class NovelJsoup {

    @Test
    public void booktest() throws IOException, InterruptedException {
        //选择要下载小说的地址
        String url = "https://www.qb5.ch/book_91025/";
        //获取首页的html内容
        Connection connect= Jsoup.connect(url);
        //这里的header里的参数是为了伪装成浏览器,对于某些有防爬虫的网站必须伪装成浏览器才能进行爬取,这里的参数可以当做常量来使用
        Document document = connect.header("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36").get();
        //书名
        String FileName = document.selectXpath("//h1").text().replaceAll(" / 净无痕","");
        Elements dd = document.select("dd a");
        for (Element element : dd){
            //获取每章的超链接
            String url_block =url+ element.attr("href");
            //章节名
            String text = element.text().replaceAll("\\?","");
            //获取每章html内容
            Document document1 = Jsoup.connect(url_block).get();
            //获取每章文本内容,去除正文中 :全本小说网 www.qb5.ch,
            String content = document1.getElementById("content").text().replaceAll("全本小说网 www.qb5.ch,","").replaceAll("    ", "\n").replaceAll("。","。\n");
            //创建文件夹
            File folder = new File(FileName);
            //判断是否存在这个文件夹,没有就创建
            if (!folder.exists()) folder.mkdirs();
            //完整文件路径
            File file = new File(folder,text+".txt");
            // 创建一个File对象,表示要写入的txt文件
            BufferedWriter writer = new BufferedWriter(new FileWriter(file));
            writer.write(content);
            writer.flush();
            writer.close();
            //做个好人等5秒弄一次,
            Thread.sleep(5000);
        }

    }
}

视频教程

B站:https://www.bilibili.com/video/BV1SC4y1D74W

更多精彩内容,关注鹏摇星海公众号

这公众号浏览量,直接被干破防啊,救救孩子吧
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值