前言
随着大数据产业的发展,越来越多的数据需要被采集与挖掘,对于非相关专业的人来说数据采集最多的途径就是下载,但是仍然有一些数据是隐藏在网页中的,只能观看不能下载,这时有人说可以通过复制粘贴的方法进行保存,其实这也是一个方法,但是在庞大的数据量面前,如果单靠手动是及其消耗时间的,所以通过程序来将数据提取出来就可以达到节省时间的目的,从而提高了效率。本文以小说为例,运用JAVA爬虫技术,将小说下载到本地磁盘中。本文基于JAVA讲述,运用工具为idea,如果没有idea的小伙伴可以先去其他文章学习一下如何下载安装。
1、JAVA爬虫是什么?
通俗一点的讲,JAVA爬虫就是运用特定的技术,将网页上的数据下载到硬盘中,和Python爬虫类似
2、页面分析
2.1、这里我们将要爬取小说的网页用来演示:https://www.qb5.ch/book_91025/
2.2、按F12进入网页调试页面。
2.3、将小鼠标放到要爬取的文字上点击,会出现如下图所示的界面
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
更多精彩内容,关注鹏摇星海
公众号
这公众号浏览量,直接被干破防啊,救救孩子吧