前两天我上三年级的大侄子问我:叔叔,斗罗大陆里小舞死后怎么样了?
我轻描淡写地回答:后来唐三把魂环给小舞,让小舞复活了。
原来是斗罗的动漫剧情更新到了小舞的死,这对一个幼小的心灵来说确实容易掀起那么一丝波澜。
其实我也不太记得斗罗大陆详细内容,毕竟是中学时期看过的书。
然后我就有了用爬虫把原小说爬下来的想法
单纯爬取文字内容并不难,也就是课后练习的程度吧,这对于我这种刚入门Python一个星期的初学者来说再合适不过了,所以,说干就干吧
网页分析
本来是想在起点中文网上爬正版,无奈人家后几百章都是收费的,只好作罢
然后找了另一个还算干净的网站,从章节目录来看和正版没什么区别 既然要爬取整部小说的内容,就要对每个章节都进行一次爬取,也就要对每个章节页面都访问一遍,首先打开前三章的网址进行对比: 发现不同章节的地址只有最后一个数字序列不同,然而这个序列并不是有序或者有规律的。像引子与第一节的序列差值为4,而第一节与第二节的差值为3,后面还有的相邻章节差值为2。而且如果这个序列是错的,就会跳转到其他页面 没有规律就代表不能预估某一个章节的地址,所以只能选择先爬取每一章节的标题和超链接,做成地址目录,然后依此访问每个章节。 那么就先对目录页分析,按F12进入工作台,即便前端知识匮乏如我,也能看出每一个名叫的标签就包含了一个标题的模块,中的标签就写明了标题和超链接 同样的,再对章节内的页面分析,发现小说的内容都被包含在一个
标签里,而且标签里有一个属性“ id=content ”,分析数据时只要找到这一个标签就能找到我们要的文字
核心代码 代码要实现的功能也很简单 # 地址访问与源码获取 # 分析章节和超链接生成列表 # 分析小说内容 # 对小说内容修正并写入文件 一天后...... 然而我写了八个函数…… 倒不是说逻辑有多难实现,而是这个网站真的很坑爹…… 本还觉得这个网站比较干净,没想到只是前几章干净而已。都了后面既有广告乱入,也有错位乱码,还有文字被替换,有拼音,有重复的章节名和空白章节,本来文字修正只用正则表达式写了五六行,后来越写越多,索性直接写了个修正列表,在函数里循环修正(就这还没改全呐): 但即便每一章的文字都要进行这么多次修正,程序进度也不会在写入文件时停留,而是地址访问占用的时间最长,不得不令人感叹正则表达式的强大
部分代码的截图展示: (访问,分析,保存章节列表的三个函数)
核心代码 代码要实现的功能也很简单 # 地址访问与源码获取 # 分析章节和超链接生成列表 # 分析小说内容 # 对小说内容修正并写入文件 一天后...... 然而我写了八个函数…… 倒不是说逻辑有多难实现,而是这个网站真的很坑爹…… 本还觉得这个网站比较干净,没想到只是前几章干净而已。都了后面既有广告乱入,也有错位乱码,还有文字被替换,有拼音,有重复的章节名和空白章节,本来文字修正只用正则表达式写了五六行,后来越写越多,索性直接写了个修正列表,在函数里循环修正(就这还没改全呐): 但即便每一章的文字都要进行这么多次修正,程序进度也不会在写入文件时停留,而是地址访问占用的时间最长,不得不令人感叹正则表达式的强大
还有的章节源码标签和前面的不一样,直接导致要新增一个匹配模板,第一种匹配不了要换第二种。除此之外还有各种问题,就不一一细说了……
我把原项目文件夹打包上传到了蓝奏云,就当留个纪念吧,有兴趣的小伙伴可以自行复制链接下载: novel_spider项目(Python3.9,编译软件PyCharm): https://wws.lanzous.com/iGRBgjuek3g 爬到的斗罗大陆小说全本: https://wws.lanzous.com/iWBL4jud87c部分代码的截图展示: (访问,分析,保存章节列表的三个函数)
再过两天就是元旦了,提前祝大家元旦快乐!
孟同学