小说爬虫维护麻烦?通用正则匹配实现提取正文与目录链接

一、初试爬虫,混乱不堪

谈及我的小说爬虫项目,实在令人困扰不堪!当初满怀激情撰写了该爬虫,期待能便捷地获取小说内容,然而结果如何?维护环节可谓如临深渊。程序代码混乱无章,每当网站布局升级,我便需耗费大量精力进行修正。犹如陷入泥沼,难以挣脱,愈挣扎愈疲惫。

更为棘手的问题在于,各大网站千变万化的架构使得我的程序在某些网站上如鱼得水,而在其他网站却难以施展,仿佛盲人在触摸大象。每逢此种困境,均需耗费时间与精力调整代码,无异于徒劳无益之举。那令人懊恼不已的挫折时刻,实在令人烦躁至极。

二、灵光一闪,正则救星

在我濒临绝望之时,思维豁然开朗,意识到可用正则表达式解决问题。的确,正则表达式具备匹配各类复杂模式的能力,若将其应用于提取小说正文,岂不是可事半功倍?于是,立即着手学习并实践如何运用正则捕捉小说的故事核心。

历经艰辛,我终完成了一条适用范围广泛的正则表达式。经多方验证,其对多数网站均有良好匹配效果。犹如黑夜中的明灯,让人重燃希望。正则表达式,实为我解决问题的利器。

三、正文提取,初战告捷

在引入正则表达式后,我的爬虫已能够稳健地获取小说内容,如同从困境中走出,重获新生。尽管仍存在细微不足,但总的来说,小说正文的抓取流程已初步实现。每当爬虫成功捕获小说信息,便会得到内心的自我嘉许。

然而,正文提取得手仅是初步成果,后续更为关键的任务——采集小说目录链接仍有待完成。相较于正文提取,这一步骤无疑更具难度,因其结构复杂且部分网站的目录链接藏匿颇深。面对此种困境,我再度体验到那份熟悉的挫败感。

//正则抓取内容
	@Test
	void test12() {
//		String pinyin="āáǎàēéěèīíǐìōóǒA8B0òūúǔùǖǘǚǜüê";
		String ch_punctuation="~。\u000A\u0009\u00A0\u0020\u3000";
//		String punctuation="[\-,\/,\|,\$,\+,\%,\&,\',\(,\),\*,\x20-\x2f,\x3a-\x40,\x5b-\x60,\x7b-\x7e,\x80-\xff,\u3000-\u3002,\u300a,\u300b,\u300e-\u3011,\u2014,\u2018,\u2019,\u201c,\u201d,\u2026,\u203b,\u25ce,\uff01-\uff5e,\uffe5]";
//		String eh_punctuation="\u003A\u0028\u201C\uFF0C\uFF1F\u3001\u201D\uFF01\uFF1A\u223C\u003D\u2026";
		String unicode_azAZ09="\uFF41-\uFF5a\uFF21-\uFF3a\uFF10-\uFF19";
		String chinese="\u4E00-\u9FFF";
		String html = "";
		try {
			html = SpiderUtils.getSource("https://www.88dush.com/xiaoshuo/37/37125/20723618.html");
//			System.out.println(html);
		} catch (Exception e) {
			e.printStackTrace();
		}
		Pattern compile = Pattern.compile("[pvr/"]>[^字\w<*][\pP\w\pN\pL\pM"
				    +unicode_azAZ09+chinese+ch_punctuation
				    + "]{3,}[^字\w>]{0,2}(<br|</p|</d|<p)");
		Matcher m=compile.matcher(html);
		while(m.find()) {	
			String reString=m.group(0).replace("rn", "").replace("<br", "n").replace("</p", "n")
					.replace("p>", "n").replaceAll("&[a-z]{3,6};", "").replace("n", "").replace("<p", "n")
					.replace("/>", "").replace("r>", "").replace(" ","").replace("</d","").replace("v>","")
					.replace("">", "").replace(" ", "").trim();
			if(reString.length()>0) {
				System.out.println(reString);
			}
		}
	}

四、目录链接,再战江湖

为获取小说目录链接,鄙人深入探究各大网站目录布局。有些站点的目录链接显而易见,易于提取;然而部分网站的目录链接则深藏于Javascript代码之中,需借助解析方能寻得。面对此种困境,鄙人心生困扰。

然而,凭借对正则表达式的熟练掌握,我再次决定利用其进行目录链接的匹配工作。经过耐心测试,我最终确立了一个能适应大部分网站的有效正则表达式。尽管该表达式不如正文提取精确,但无疑,这给了我前行的信心和动力。

图片[1]-小说爬虫维护麻烦?通用正则匹配实现提取正文与目录链接-东山笔记

五、整本小说,一网打尽

在正文及目录链接提取技术的基础之上,我研发的爬虫已逐渐具备更全面的能力——通过提供小说目录,便可自动获取整部小说内容!这种体验如同从小河跃入湖泊,视野瞬间拓宽。每当成功搜集完整本书籍信息时,内心不禁感叹:“任务终告完成!”

//抓Chapter
	@Test
	void TestEncode() {
		String html = "";
		String chinese="\u4E00-\u9FFF";
		String url="https://www.88dush.com/xiaoshuo/37/37125/";
		try {
			html = SpiderUtils.getSource(url);
//			System.out.println(html);
		} catch (Exception e) {
			e.printStackTrace();
		}
		Pattern compile = Pattern.compile("(["+chinese+" \d\pP]+?)</a");
		Matcher m=compile.matcher(html);
		while(m.find()) {	
//			String reString=m.group(0).trim();
			String re1=m.group(1).trim();
			String re2=m.group(2).trim();
			if(re1.length()>5&&re2.length()>5) {
				System.out.println(SpiderUtils.GetAbsUrl(url,re1)+"--------"+re2);
			}
		}
	}

然而,实践中我发现,爬虫技术的应用远非我所设想的那般简单。尽管已初步实现了基本功能,但仍有诸多细节待完善。例如,部分网站具备强大的反爬虫策略,易导致我方爬虫被封锁;另一方面,某些网站结构频繁变动,需持续对爬虫进行相应调整。

六、汉字匹配,思路独特

在钻研爬虫之途中,逐步建立起一种特殊思维模式:即依赖字词匹配进行内容筛选。此法简约而高效,因其忽略网站布局多变性,专注于汉字恒常不变的特性。借助字词匹配,可实现小说正文的稳定提取。

同样,运用a标签与标题的映射方式,我成功抽取出了网站目录的锚链。尽管这并非精准的正文提取,却足以助我稳步向前。每当爬虫成功捕获目录链接时,我不禁感慨:“此种策略实在巧妙至极!”

七、未来之路,任重道远

尽管已基本完成了小说爬虫系统建设,但深知未来之路仍漫长且充满挑战与未知。唯有持续探索、深化知识、改进技术,方能立足于这一领域并不断前行。每当念及此处,内心既激动又紧张。

然而,我深信只要坚持修造,总有那么一天,我的爬虫将变得更为强大和智能化。届时,浏览任何小说皆可轻易完成,维护也不再是个难题。那种舒适感,一定妙不可言。

文章结尾:

尊敬的读者,请您对本小说爬虫思路予以评价。若您有更优越的方法从中提取内容,欢迎踊跃交流,共同提高。敬请在评论区分享见解,别忘赐予点赞与分享。

© 版权声明
THE END
喜欢就支持一下吧
分享