novel-downloader:支持 288 条站点规则的通用小说下载器
【免费下载链接】novel-downloader一个可扩展的通用型小说下载器。项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader
novel-downloader 是一个以油猴脚本(用户脚本,即通过浏览器脚本管理器向网页注入功能的扩展脚本)形式存在的开源小说下载器,面向想在本地保留已读网文、轻小说的读者。它在浏览器内直接运行,识别小说目录页结构、逐章抓取正文与插图,最后生成 TXT 纯文本和 EPUB 电子书(带目录的通用电子书格式)两个文件,供离线阅读。
novel-downloader 安装步骤:从装脚本到下载第一本书
前置条件是在浏览器里装好一个脚本管理器(Tampermonkey、Violentmonkey 或 Greasemonkey 均可)。脚本可以装现成的,也可以自己从源码构建,自构建只需四步:
git clone https://gitcode.com/gh_mirrors/no/novel-downloader cd novel-downloader yarn install yarn build产物是 dist/bundle.user.js,把它导入脚本管理器就算装好了。
之后打开任意受支持网站的书籍目录页(列有全部章节的那一页),页面右上角会出现一个下载图标,点击后脚本开始解析目录并逐章抓取。进度可以看右下角的进度条,也可以按 F12 打开开发者工具的控制台查看每一章的状态。全部完成后,浏览器会自动保存 TXT 和 EPUB 两个文件。
有两点值得提前知道。第一,下载过程中脚本会播放一段无声音频,目的是防止浏览器把后台页面休眠掉,属于正常现象。第二,如果目标网站需要登录才能看正文,你需要先在自己的浏览器里登录该站,脚本会复用当前登录状态。
novel-downloader 实现原理:每个站点一套解析规则
项目的核心是一套"每站一规则"的模块化设计。src/rules/ 目录按页面结构把站点规则分为四类:单页式(一个页面装下全部章节)、两页式(目录页与正文页分离)、多索引式(目录本身还要翻页)、特殊站点(接口复杂或有反爬逻辑的平台,如起点、晋江)。新增一个网站时,只需要写一个规则文件,描述章节链接和正文节点分别藏在哪里,主流程不用动。
章节抓回来之后不会直接落地,先经过一遍 DOM 清理,去掉广告、导航和无关链接。对把正文渲染成图片来防抓取的站点,src/lib/decoders/ 模块提供三级解码路径:先拿图片文件名查对照表(最快),查不到就计算图片哈希值再查,仍查不到才回退到 OCR(光学字符识别,项目内嵌 PaddleOCR 模型)逐字识别。三级由快到慢逐级兜底,兼顾速度和命中率。
最后由 src/save/ 模块把清洗后的章节数据转换成 TXT、EPUB 以及一个可预览的 HTML 包,三种格式共用同一份解析结果。
小说下载工具对比:脚本方案和别的做法差在哪
- 手动另存网页或打印成 PDF:只能存当前打开的一页,几百章要手动翻几百次,也不会生成目录。这个脚本一次跑完整本书,EPUB 自带可点击目录。
- 在线下载网站:要把网址贴给第三方站点,且无法带登录态,付费章节基本无解。浏览器脚本跑在你自己的登录状态里,已购章节同样能存下来。
- 桌面端下载软件:要额外装程序、单独维护一套账号环境。油猴脚本零安装成本,更新直接换文件,抓取日志随时能在控制台里看。
适合谁用
收藏了随时可能消失的作品的人:网络小说被删的情况并不罕见,已购买、已入 V 的作品也有消失的先例。趁站点页面还在,跑一遍脚本存一份本地文件,是成本最低的保险。
通勤和差旅中阅读的人:地铁、高铁、飞机上信号时好时坏,提前在 WiFi 环境下载好章节,EPUB 扔进任何主流阅读器就能读,不依赖网络。
做文本分析的人:研究文风、做语料样本需要大批量干净文本。脚本输出的 TXT 自带章节结构,比手工抓网页更容易对齐;配合下面的筛选函数,还能只抓指定卷或指定范围的章节。
novel-downloader 常见问题:用之前先看这三点
付费章节下不了怎么办?脚本基于你的账号状态工作,未购买的章节会被直接跳过而不是报错。下载前确认已在目标网站登录、且对应章节已购买。
抓出来的正文有乱码或奇怪的字符怎么办?多半是网站用了自定义字体反爬(把字形编码进私有字体文件),晋江文学城和番茄小说比较常见。在设置里开启调试模式,日志中会给出字体匹配的提示,按项目 README 的说明把字体信息提交给维护者,等字体对照表更新后即可修复。
下载卡住或速度太慢怎么办?先排除自身网络问题,再确认该站是否有限速。项目已为每个站点预设了合理的并发数和下载间隔,不建议盲目调高速度,降低频率通常比提高更快跑完;确需调整时,可在设置里修改并行下载线程数和间隔时间。
章节筛选配置:不必每次下载整本书
在浏览器控制台定义一个筛选函数再触发下载,就只会抓取符合条件的章节,例如只下前 50 章:
function chapterFilter(chapter) { return chapter.chapterNumber <= 50; }章节命名格式、段落缩进、EPUB 样式等也有对应的保存参数可以自定义,字段说明见仓库 README 的"高阶使用技巧"一节。
小结
novel-downloader 是一个在浏览器里运行、把网页小说一次性变成本地 TXT 与 EPUB 的下载脚本,AGPL-3.0 许可开源,社区可以持续提交新站点规则。源码地址见上文 clone 命令,完整的站点支持列表、字体匹配说明和排障指南都在仓库 README 中。
【免费下载链接】novel-downloader一个可扩展的通用型小说下载器。项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考