疫情那一年,老爸被风控措施困在了家中,无所事事的他,在微信上的广告上,开始接触网络爽文小说,一部叫《女神的上门豪婿》,一部叫《都市极品神医》。
随着阅读的深入,老爸逐渐沉迷于追更。后来在他的微信上看到付款记录,半年时间前前后后差不多付款将近两千。虽说可以为知识付费,但是为这没营养的口水文付费这么多,确实有点冤大头的意思,然后我就在网上帮他下载免费的txt。差不多持续了两三年,然而最近发现免费的txt下载基本找不到了,无赖只能花点时间写个小程序,科学收录成txt。
此处以女神的上门豪婿-韦小鸨-采墨阁小说在线阅读,这篇小说为例,用Jsoup工具读取网页内容。
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.10.2</version>
</dependency>
package com.gm.springboot;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.net.URL;
/**
* 小说下载:http://www.caimoge8.net/
* 女神的上门豪婿
*/
public class JsoupDemo {
public static void main(String[] args) throws IOException {
String outFilePath = "/Users/longjun/Desktop/data/xiaoshuo.txt";
if (!new File(outFilePath).exists())
new File(outFilePath).createNewFile();
String href = "/read/54285/71401277.html";
writeAndGetHref(href, outFilePath);
}
public static void writeAndGetHref(String href, String outFilePath) throws IOException {//正则方法
//随便打开一个章节
URL url = new URL("http://www.caimoge8.net" + href);
//获取标题内容
String title = Jsoup.parse(url, 100000).select(".bookname").text();
//获取正文内容
String text = Jsoup.parse(url, 100000).select("#booktxt").text();
text = text.replace("本章未完,点击下一页继续阅读。", "");//去掉这一行文字
try (FileWriter fw = new FileWriter(outFilePath, true); // 第二个参数为true代表追加模式
BufferedWriter bw = new BufferedWriter(fw)) {
if (title.contains("(1/2)")) {//一个章节的第一段写入标题+正文
title = title.substring(0, title.indexOf("("));
bw.write(title);
bw.write("\n\n");
bw.write(text);
} else {//一个章节的第二段写入正文
bw.write(text);
bw.write("\n\n\n\n");
}
} catch (IOException e) {
e.printStackTrace();
}
//获取全部A标签元素
Elements a = Jsoup.parse(url, 100000).getElementsByTag("a");
for (Element element : a) {
if (element.text().contains("下一页")) {
//取得下一章的href
href = element.attr("href");
break;
}
if (element.text().contains("下一章")) {
//取得下一章的href
href = element.attr("href");
break;
}
//遇到“没有了”就排除异常退出递归
if (element.text().contains("没有了")) {
throw new RuntimeException("没有下一章了");
}
}
if (href != null) {
writeAndGetHref(href, outFilePath);
}
}
}
```
```