基于Jsoup的多线程java小说爬虫

本文介绍了一个基于Jsoup的Java小说爬虫程序,从单线程爬取一个小说开始,逐步演进到多线程爬取多个小说。通过分析小说网页结构,提取关键元素,实现了小说章节的抓取并存储为TXT文档。作者计划进一步扩展功能,包括全站爬取和利用百度搜索模糊爬取小说。

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

        有时想看一本小说结果找下载的地方浪费很多时间,就想自己写一个爬小说的程序出来,写前看了几个别人写的小说爬虫,给了很多启发,所以发在这里希望能帮到需要的人。

1、version 1.0(只能爬一个小说)

    1.1、小说网页
http://www.kanshuge.la/files/article/html/15/15876/2769913.html

   1.2、需要的几个元素\标签

通过这个获取下一页的地址和章节信息。因此得到第一个article类。

package com.domain;

public class Article {
	private String title;//章节名
	private String content;//内容
	private String nextUrl;//下一章url
	
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public String getNextUrl() {
		return nextUrl;
	}
	public void setNextUrl(String nextUrl) {
		this.nextUrl = nextUrl;
	}
	
}

获取文本text,类dom查找可以通过第一个和第三个div标签的任意一个,然后查找子元素查找

document.select("div[id="BookText"]")
docuemnt.select("div.ad250left")

1.3、获取html文档的根节点
package com.utli;

import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

/*
 *通过url获取html页面信息。
 */
public class GetDocument {
	public static Document getDocument(String nextUrl) throws IOException {
		Document doc=null;
		doc=Jsoup.connect(nextUrl).get();
		return doc;
	}
}
1.4、需要用的的utils
package com.utli;
import java.io.IOException;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;


public class GetNote {
	static String baseUrl="http://www.kanshuge.la/files/article/html/143/143969/";
	//获取nexturl
	public static String getNextUrl(Document document) throws IOException {
	org.jsoup.select.Elements elements=document.select("a[href]");
	String s,nextUrl = null;
	for(Element element:elements){
		if ("下一页".equals(element.text())) {//element.text()!=null&&
			s=element.attr("href");
			if (s.equals("index.html")) {
				return "0";
			}
			nextUrl=baseUrl+s;
		}
	}
	return nextUrl;
}
	
	//获取content
	public static String getContent(Document document) {
		String string=document.select("h1").text();
		return string.substring(string.indexOf("第"));
	}
	//获取文本内容
	public static String getText(Document document) throws IOException {
		String list="  ";
		Element element=document.getElementById("BookText");
		String[] s=element.text().split(" ");
		for(String l:s){
			list+=l+"\r\n  ";
		}
		return list;
	}
}
1.5、最后一个main
package com.main;
/*
 * 一个单线程简易的小说爬虫。
 * 
 */

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值