小说下载器完整指南:4 步跑通批量下载,把整本网文打包成 TXT 与 EPUB
【免费下载链接】novel-downloader一个可扩展的通用型小说下载器。项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader
你花钱入 V 的书,网站说删就删,连个招呼都不打。小说下载器是一个跑在浏览器里的油猴脚本:打开受支持网站的目录页,点一下右上角的图标,整本书按分卷结构批量抓下来,打包成 TXT 和 EPUB 存进你的硬盘。书还在的时候,它就替你留住。
先说它能替你解决什么
一句话:把"手动复制粘贴几百章"压缩成一次点击。
- 批量抓全书:目录页点一下,几百章逐章自动抓取,右下角进度条实时可看;
- 双格式成品:TXT 任何设备直接打开,EPUB 带封面、目录、插图,扔进阅读器就能读;
- 反爬有对策:图片藏字、字体加密、单页应用,都有现成处理方案;
- 高度可定制:下哪些章节、标题长什么样、多快下完,全都能按你的习惯调。
上图是脚本输出的 EPUB 成品书页:书名、封面、简介、分卷章节一层不差,这就是"保存"的最终形态。
知道它给什么之后,花十秒钟判断它适不适合你。
定位与选型:一枚贴在浏览器上的"书签"
它不是要单独安装的应用,而是一枚贴在浏览器上的书签——书签背后站着完整的下载逻辑,借你现成的登录态和网络环境干活:你在网站上登录过、买过什么,下载时就默认拥有这些权限,不用二次配置账号。
| 对比维度 | 油猴脚本(本项目) | 独立抓取软件 |
|---|---|---|
| 安装 | 浏览器装脚本管理器,拖入脚本即可 | 下载安装包,长期维护独立进程 |
| 登录状态 | 直接沿用浏览器里的会话 | 常需单独导出、配置 Cookie |
| 运行环境 | 就在你正看着的页面上工作 | 脱离页面,另行模拟请求 |
| 单页应用 | 读页面实时 DOM,天然适配 | 需重新渲染,适配成本高 |
结论:要下需要登录才可见的付费章节,基本只有脚本方案顺手。判断标准也简单——目标网站在支持列表里、浏览器能正常登录,就可以往下走。
判断合适的话,下面四步跑通全流程。
⚡ 首次上手:4 步拿到你的第一个成品
- 装脚本管理器。Tampermonkey、Violentmonkey、Greasemonkey 三选一,装完浏览器工具栏会出现管理器图标。
- 构建脚本本体。克隆仓库并编译,产出成品脚本:
git clone https://gitcode.com/gh_mirrors/no/novel-downloader cd novel-downloader yarn install yarn build- 安装脚本。把
dist/bundle.user.js拖进脚本管理器,权限弹窗全部允许。预期结果:管理器列表里多了一条"小说下载器"。 - 下载一本书。打开任一受支持网站的目录页,点右上角的下载图标;右下角进度条走完后,浏览器自动落盘 TXT 与 EPUB,另附一个含 HTML 章节的 zip。
上图是一次真实下载的收尾画面:控制台逐章打印"下载完成",任务栏里 zip 与 txt 成品已经落袋,全程零人工干预。
小贴士:下载全程有一段"听不见"的音频在播,那是脚本用来阻止浏览器休眠后台标签页的,不是卡死。
跑通只是开始,接下来看它最硬核的一手。
硬核透视:正文被做成图片时,它怎么"读"回来
有些站(比如西瓜书屋)把正文整段替换成图片,普通抓取只能拿回一堆无意义图片。小说下载器为此设计了"先查单号、再比指纹、最后请人认字"的三层解码,按成本从低到高逐层兜底:
| 解码层 | 原理 | 成本 |
|---|---|---|
| 文件名映射 | 图片文件名本身编码了文字,查表即得 | 最低,命中零耗时 |
| 哈希匹配 | 下载图片计算哈希,与远程映射表比对 | 较低,内容相同即可命中 |
| OCR 识别 | PaddleOCR 中文模型逐字识别 | 最高,但准确度最好 |
匹配表会自动拉取并缓存在脚本管理器本地存储,OCR 模型仅首次使用时下载,之后全程本地复用(实现见 src/lib/decoders/)。三层都没命中的字会被略过,所以图文站建议再用 zip 里的 HTML 版核对一遍。
另一道常见的墙是字体加密:正文用自定义字体渲染,抓回来是乱码。脚本会自动下载字体并建立字符映射还原真字;晋江文学城、番茄小说偶尔需要手动配合一次字体匹配,留意控制台以[jjwxc-font]、[fanqie-font]开头的提示即可。
上图是保存后的章节页:段落干净、插图原位保留,阅读体验接近原站。
会读了,再让它听你的。
个性化配置:三种常见需求的改法
需求一:只下部分章节。点下载前按 F12,在 Console 挂一个chapterFilter,只有返回 true 的章节才进下载队列:
function chapterFilter(chapter) { return chapter.chapterNumber <= 50; // 只下前 50 章 }按分卷筛就改判sectionNumber,按关键词筛就查chapterName。
需求二:统一成品排版。挂一个saveOptions对象,改标题格式、注入 CSS 调缩进行距都行:
const saveOptions = { getchapterName: (c) => `第${c.chapterNumber}章 ${c.chapterName}` }; window.saveOptions = saveOptions;需求三:下完自动收尾。定义一个customFinishCallback函数,它会在 zip 生成后自动执行,比如顺手window.close()关掉标签页。
避坑:三个钩子都必须在点击右下角下载图标之前注入,之后再点下载才生效;顺序反了,配置会被直接忽略。
调得越狠,越要会排障。
🩹 排障速查:下载不顺先看这张表
| 现象 | 常见原因 | 怎么办 |
|---|---|---|
| 右上角没有下载图标 | 单页应用尚未初始化 | 按 F5 强制刷新当前页 |
| 付费章节全部跳过 | 未登录或未购买 | 先登录网站账号,确认已购买对应章节 |
| 速度明显变慢 | 网站限速反爬 | 设置里调高并行下载线程数 |
| 正文出现乱码字符 | 字体加密未完成匹配 | 按控制台[jjwxc-font]/[fanqie-font]提示提交匹配 |
| 图片处文字空白 | 三层解码均未命中 | 改用 zip 内 HTML 版章节核对 |
拿调试信息的路径:先在设置里开启调试模式,下载完成后 zip 内会多出一份debug.log;若卡到连文件都没生成,就在设置里打开测试视图,把日志选项卡内容整个复制存成 txt,连同环境信息按模板提交 issue。反馈请走项目 issue 区——评论区、交流群里的反馈不会被处理。
上图是 TXT 成品的最终形态:分卷、章节标记分层,离线打开无障碍。
自己搞不定的,交给社区。
生态与参与:新站点是怎么"长"出来的
项目覆盖国内外一百多个站点:起点、晋江等国内原创平台,Lofter、pixiv 等创作社区,小説家になろう等日本平台,再加一大批笔趣阁系转载站。规则按页面结构分类存放在 src/rules/(onePage、twoPage、special、biquge、mbtxt 等),每个网站像一张配方卡——新站接入大多只需照同类模板填两个空:章节链接怎么取、正文怎么取,其余能力全部复用。
想扩展或反馈的最短路径:先在 issue 区搜是否已有同类请求,有就补充,没有就按模板新开;想自己加站,继承BaseRuleClass实现bookParse与chapterParse,到 src/router/download.ts 登记域名,构建后提交即可。
下一步
下次再遇到想长期留下的作品,别再只点收藏:打开目录页,等右上角图标出现,点下去。十分钟后,你的硬盘里会多一本随时能打开的 EPUB——网站哪天关不关,都关不到它头上。
【免费下载链接】novel-downloader一个可扩展的通用型小说下载器。项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考