疫情那一年,老爸被风控措施困在了家中,无所事事的他,在微信上的广告上,开始接触网络爽文小说,一部叫《女神的上门豪婿》,一部叫《都市极品神医》。
随着阅读的深入,老爸逐渐沉迷于追更。后来在他的微信上看到付款记录,半年时间前前后后差不多付款将近两千。虽说可以为知识付费,但是为这没营养的口水文付费这么多,确实有点冤大头的意思,然后我就在网上帮他下载免费的txt。差不多持续了两三年,然而最近发现免费的txt下载基本找不到了,无赖只能花点时间写个小程序,科学收录成txt。
此处以女神的上门豪婿-韦小鸨-采墨阁小说在线阅读,这篇小说为例,用Jsoup工具读取网页内容。
<dependency><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("下一页")) {//取得下一章的hrefhref = element.attr("href");break;}if (element.text().contains("下一章")) {//取得下一章的hrefhref = element.attr("href");break;}//遇到“没有了”就排除异常退出递归if (element.text().contains("没有了")) {throw new RuntimeException("没有下一章了");}}if (href != null) {writeAndGetHref(href, outFilePath);}}}