小说爬虫学习经历
我有充分的证据表明,培训与作业不是一个网址是故意的
一 关于URL
培训时作为演示的笔趣阁网站 和 作业要求的爱下书小说网的URL设置不同,
如果要获取每一章的URL,则需要用爱下书总站的URL加上爬取的信息(反正爬取的就是这个网站上的小说,定义一个总站的网址也无所谓吧)
String menu1 = "https://www.aixiaxsw.com";
String subLink = a.attr("href");
fileOut.write(("\n" + "[" + chapterName + "]" + "(" + menu1 + subLink + ")").getBytes());
二 关于目录与作者
打开网页源代码,发现作者名是用\
包裹的
直接使用jsoup爬取
String writer = document.selectFirst("p").text();
目录在之前已经爬取过,我选择将其加上换行符在正文之前先输出一遍
int count = 1;
for (Element a : as) {
count++;
if (count > 10) {
String chapterName = a.text();
String subLink = a.attr("href");
fileOut.write(("\n" + "[" + chapterName + "]" + "(" + menu1 + subLink + ")").getBytes());
三 关于最新章节
爱下书小说网有九章最新章节,放在正文的最前面,我们可以用一个if判断来跳过它们。(感谢许子璇学长提供的思路)
int i = 1;
for (Element a : as) {
i++;
if (i > 10) {
执行后面的语句爬取小说内容
四 关于换行
通过搜索引擎,我得知whitelist类可以用于换行,但在导入时一直爆红。在咨询朱哲甬学长后(赞美总监),改用safelist实现(这两个类在使用方法上似乎没有任何不同,whitelist改名好像与西方zzzq有关)
String baseContent = Jsoup.clean(chapterContent.toString(), "", Safelist.none(), new Document.OutputSettings().prettyPrint(false));
String newText = baseContent.replaceAll("\\s{2,}", "\n");
String trueContent = newText.replaceFirst("\n", "").trim();
代码太长,一行放不开,将就看吧
五 关于Markdown超链接
按照Markdown语法在输出语句中添加符号实现标题与超链接
我为小说名添加了一级标题,为章节名添加了三级标题,为目录添加了超链接。(发给zxgg的版本忘记给标题加#号了,在这里说明一下)
fileOut.write(("\n" + "[" + chapterName + "]" + "(" + menu1 + subLink + ")").getBytes());
fileOut.write(("# "+title + " " + "\n\n").getBytes());
fileOut.write(("\n" + "[" + chapterName + "]" + "(" + menu1 + subLink + ")").getBytes());
六 关于jar包
按照教程操作即可