凌晨两点,网络我盯着屏幕上那个“正在解析目录”的小说下载进度条,它卡在47%已经十分钟了。工具这不是网络我第一次和网络小说下载工具较劲。上周想重温一本2012年的小说下载老书,起点早就下架了,工具贴吧里有人丢了个TXT附件,网络下载下来一看,小说下载前三十章全是工具乱码,后面直接跳到了大结局。网络那一刻我决定,小说下载与其到处求人,工具不如自己搞个工具。网络
市面上现成的小说下载下载器不少,但真正能用的工具没几个。我试过一个叫“小说下载阅读器”的绿色版,界面停留在Windows XP时代,输入网址后它确实能抓取,但只支持特定几个盗版站。更离谱的是,它会把每章标题自动加上“正文”两个字,导出后满屏都是“第一章 正文”“第二章 正文”,看着像机器人写的。另一个开源项目基于Python的Scrapy框架,配置起来得改代码里的CSS选择器,普通用户根本玩不转。
自己动手的话,核心逻辑其实不复杂。拿最常见的HTML结构举例,一本小说通常有个目录页,里面是<ul>或<table>包裹的章节链接。用requests库把目录页拉下来,BeautifulSoup解析出所有<a>标签的href,再逐个请求章节页面,提取正文所在的<div id="content">或<div class="read-content">。麻烦的是编码问题——有些站用GBK,有些用UTF-8,还有的混着来。我吃过亏,没加chardet检测,结果《赘婿》下到一半全是问号。
反爬是另一个坎。某次抓一个叫“笔趣阁”的镜像站,前五十章顺利,第六十章开始返回403。查了下请求头,发现对方检测Referer字段。补上目录页的URL后恢复正常。还有更狠的,章节内容用JavaScript动态加载,直接请求HTML只能拿到空壳。这时候要么上Selenium模拟浏览器,要么找它的API接口——很多小说站其实有隐藏的JSON接口,返回的数据比网页还干净。
速度控制也得注意。我最初用多线程猛冲,20个并发同时抓,结果IP被 ban 了半小时。后来改成单线程加0.5秒延迟,一本300章的小说大概跑4分钟。能接受。导出格式我选了EPUB,比TXT舒服,有目录跳转,还能内嵌封面。用ebooklib库生成,章节标题自动从<h1>里提取,不用手动整理。
最后说个真事。我用这套工具抓了一本冷门武侠,作者2008年发表在某个现已关闭的论坛。全网找不到完整版,只有那个论坛的Wayback Machine快照。快照里的章节链接全是死链,但网页源码里藏着章节文本——原来当年论坛把内容直接写在了<div>里,没走数据库。我写了个脚本遍历所有快照页面,硬是把78章拼齐了。导出EPUB那天,我发了条朋友圈:“有些书,你不救它,它就真没了。”
工具我打包成了exe,放在GitHub上。有人留言说能不能加个“自动换源”功能,我说你先学会改User-Agent吧。这行就是这样,没有一劳永逸的下载器,只有不断打补丁的耐心。
顶: 42642踩: 95691






评论专区