news 2026/8/19 1:48:47

小说会悄悄消失:这款开源小说下载器,能把100多个网站的书装进TXT和EPUB

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
小说会悄悄消失:这款开源小说下载器,能把100多个网站的书装进TXT和EPUB

小说会悄悄消失:这款开源小说下载器,能把100多个网站的书装进TXT和EPUB

【免费下载链接】novel-downloader一个可扩展的通用型小说下载器。项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader

书架上那本书还在,点进去却已是 404——追更的人都懂这种后背发凉的感觉。为了不再让喜欢的作品随网站一起蒸发,我养成了一个新习惯:用开源小说下载器 novel-downloader 把连载中的书提前备份成 TXT 和 EPUB。这是一款可扩展的通用型小说下载器,覆盖国内外 100 多个小说网站。这篇文章,就是昨晚我"抢救"一本书的完整复盘:从为什么备份、怎么装、点了下载后发生了什么,到碰到加密正文怎么解、想自定义怎么改,一条线讲完。

为什么书架上的书会凭空消失:先搞清你要备份什么

不是错觉,小说真的会"消失"。很多作品即使已经入 V、即使你已经订阅,网站一改版或合同一到期,页面说没就没。更极端的情况是轻文轻小说这类整个网站直接关停。热门的书被笔趣阁等转载站接住,后来者还能看到;而那些质量不错但不够火、没有任何转载站收录的作品,就会彻底从互联网上蒸发。

novel-downloader 正是"404 小说文库"项目的组成部分,它的目标很朴素:在书还在的时候,把它稳稳地存到你自己的硬盘上。如果某天你常看的网站连不上了,至少你手里还有一份完整的离线拷贝。

下载完成后,脚本会自动产出几样东西,各有各的用处:

下载产物适合场景特点
TXT 文档手机阅读器、老设备纯文本、体积最小,几乎任何设备都能打开
EPUB 文件电纸书、平板自带目录、封面、插图与排版,阅读体验最好
原样 HTML 打包开发者排查、保留网站原貌连同原始页面与调试日志一起归档,方便核对

小贴士:脚本执行下载任务时会播放一段无声音频,这是为了防止浏览器把后台标签页休眠、中断下载,属于正常现象,不是 bug,也不必关掉它。

装好它只需三步:装管理器、跑一次构建、点一下图标

第一步,先给浏览器装一个脚本管理器(Tampermonkey、Violentmonkey 或 Greasemonkey 任选其一)。novel-downloader 本质是油猴脚本,需要这个"容器"来运行。

第二步,拿到脚本本体。想直接开箱即用,可以装已打包发布的版本;想改代码、跟新版本,也可以自己构建。构建只要四条命令:

git clone https://gitcode.com/gh_mirrors/no/novel-downloader cd novel-downloader yarn install yarn build

第一行把源码克隆到本地,第二行进入项目目录,第三行用 yarn 安装全部依赖,第四行用 webpack 打包。构建完成后,把生成的bundle.user.js文件拖进脚本管理器界面即可完成安装。想改代码的话,改完再跑一次yarn build就能拿到新脚本。

第三步,打开任意一个受支持的小说网站。当页面右上角出现下载图标时,点击它,下载就开始了,右下角会有进度条。

点击下载后的半小时,脚本替你在后台做了四件事

昨晚那本三百多章的书,从点击图标到拿到文件大约花了半小时。这半小时里,脚本其实在后台干了四件活:

  1. 收集书籍信息:书名、作者、简介、封面、分卷和章节列表,一次性抓齐;
  2. 逐章抓取正文:按章节链接依次请求,跳过已购买检查,识别 VIP 章节;
  3. 清洗正文:用内置的 DOM 清洗逻辑(底层用了 Readability 算法)把广告、导航、脚本噪音全部剥掉,只留干净的段落和图片;
  4. 打包导出:把正文边下边写,用流式压缩生成 TXT 与 EPUB,所以几千章的大长篇也不会把浏览器内存撑爆。

下载过程中想看得更细,可以按下 F12 打开控制台,每一步状态都打印在那里;如果下载异常卡住,控制台日志也是排查的第一手资料。

正文被加密成天书?三种解码器这样把它翻译回来

能直接抓到纯文字是最好的,但很多网站不会让你这么舒服:晋江文学城用自定义字体加密正文,字符看着是正常汉字,复制出来却是乱码;海棠、书耽的 VIP 章节干脆只给图片版;还有些网站把文字伪装成图片。针对这些反爬手段,脚本准备了三层解码方案,逐级兜底:

解码方案处理方式适用场景速度
文件名映射解码根据图片文件名直接匹配对应文字文件名里藏着字符信息的简单替换最快
哈希值匹配解码下载图片、计算哈希值后匹配已知字符文件名会变、但图片内容不变的情况中等
OCR 光学字符识别浏览器内跑 PaddleOCR 中文模型识别复杂图片正文,无从映射只能硬识别最慢但最准

遇到晋江这类字体加密,脚本会自动把网站的字体文件下载下来,逐一建立"字形 → 汉字"的映射关系,再反过来还原正文;图片版章节则走文件名映射或哈希匹配,实在匹配不上的复杂图片才动用 OCR。你甚至可以在设置里打开调试模式,查看字体匹配的详细过程。

别把整本书都搬走:三个高频自定义需求,一条代码搞定

不是每次都想把整本下载下来。脚本在设置里预留了几个自定义入口,最常见的是这三种:

只下载前 50 章,或只要番外,在自定义章节过滤里写:

// 只下载前 50 章 function chapterFilter(chapter) { return chapter.chapterNumber <= 50; } // 或:只要番外 function chapterFilter(chapter) { return chapter.chapterName && chapter.chapterName.includes("番外"); }

chapterFilter对每一章返回 true 或 false,返回 true 的才会被下载,改判断条件就能精准圈定下载范围。

想要"第X章 标题"这样的章节命名、或自定义正文字号缩进,在自定义保存选项里写:

const saveOptions = { getchapterName(chapter) { return chapter.chapterName ? `第${chapter.chapterNumber}章 ${chapter.chapterName}` : `第${chapter.chapterNumber}章`; }, mainStyleText: `p { text-indent: 2em; line-height: 1.6; }` };

getchapterName决定章节标题长什么样,mainStyleText直接决定正文 CSS,段落缩进、行距、字号都在这里调。

下载太快被反爬,想放慢,就去设置里调三个参数:concurrencyLimit(并发数)、sleepTime(基础间隔)、maxSleepTime(最大间隔)。默认分别是 1、500ms、2000ms,节奏已经比较克制。

小贴士:间隔不要一味往小了调——长佩文学这类反爬严格的站,每分钟约只能下 6 章,开太多并行反而容易触发风控,耐心等是最优解。

让脚本认识新网站:继承一个模板类,实现两个方法

所有网站支持都收敛在src/rules/目录里,按站点形态分类存放:

规则类型适配的站点形态代表网站
onePage单页式目录各类笔趣阁、UU看书
twoPage分页式目录轻之文库、18看书
special需要特殊处理的平台晋江、起点、pixiv、番茄
biquge / mbtxt同源网站批量适配笔趣阁变体、全书斋

给新网站写支持,核心就是继承BaseRuleClass,实现bookParse(解析书籍信息和目录)和chapterParse(解析章节正文)两个方法。大部分单页站点甚至不用从零写,直接套用src/rules/onePage/template.tsmkRuleClass模板,把书名的选择器、章节列表的选择器、正文的清洗函数填进去就行,写完后在src/router/download.ts里注册一条匹配规则,再yarn build一次即可。这也是项目"可扩展"三个字的由来——加站成本被压到了最低。

六个真实踩过的坑,附排查步骤

  1. 付费章节下不下来:先确认已登录网站账号、且已购买对应章节。未登录或未购买时,付费章节会被直接忽略,这是设计如此,不是 bug。
  2. 长佩下载特别慢:正常,反爬限速每分钟约 6 章。不要多开页面同时下载多本长佩小说,否则更容易被限。
  3. 详情页没有下载图标:长佩、pixiv 这类单页应用网站,直接按下 F5 重新加载页面即可,无需反复刷新标签。
  4. 下载卡住、没有任何文件生成:在设置里开启调试模式,日志会写进下载产物里的debug.log;也可以启用测试视图,把日志选项卡内容复制出来保存成 txt,提交问题时会用到。
  5. 遇到问题去哪反馈:请到项目支持页面按模板提交 issue,并附上上述日志。发在评论区、交流群组的反馈不会被处理。
  6. 存档到互联网档案馆的授权弹窗:首次使用会询问是否将当前书页存档至 archive.org 以备日后查看。同意与否都不影响下载功能,但注意该功能会搜集并上报 IP、User-Agent、当前 URL 等少量信息,介意的话拒绝即可。

下一步:从顺手使用者变成共建者

如果你常看的网站刚好不在支持列表里,最有效的做法是提交 issue 描述清楚站点结构,或者直接参考src/rules/onePage/template.ts写一条规则提交上来——项目欢迎代码贡献,而不是只等别人实现。想深入了解内部设计的,可以读读仓库里的docs/目录和CLAUDE.md,里面有针对 Cloudflare 挑战页、closed shadow DOM 这类硬核场景的方案文档。

先做这三件事吧:今晚把正在追的书挨个备份一遍;把下载参数按自己的网速调一轮;如果顺手,再给这个项目提第一个 issue 或 PR。书会消失,但备份不会——这份安心,值得花一个晚上来换。📚

【免费下载链接】novel-downloader一个可扩展的通用型小说下载器。项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/19 1:48:05

从零自制电接触式探针:材料选型、结构设计与性能调校全指南

1. 项目概述&#xff1a;从零开始制作一个“探针”在电子制作、自动化控制乃至一些科研实验中&#xff0c;“探针”是一个看似简单却至关重要的组件。它可能是一根用于测量电路电压的万用表表笔&#xff0c;一个用于检测液体酸碱度的pH电极&#xff0c;也可能是一个用于触发信号…

作者头像 李华
网站建设 2026/8/19 1:46:49

MMAO代谢多智能体优化器:内生资源分配如何实现自适应探索与开发

1. 项目缘起&#xff1a;从“单打独斗”到“团队协作”的优化范式跃迁在算法优化的世界里&#xff0c;我们常常把求解器想象成一个孤独的探索者&#xff0c;在一片名为“解空间”的复杂地形中&#xff0c;依靠一套固定的规则&#xff08;如梯度下降、交叉变异&#xff09;去寻找…

作者头像 李华
网站建设 2026/8/19 1:46:26

如何用开源加密压缩包密码恢复工具3步找回遗忘的密码?

如何用开源加密压缩包密码恢复工具3步找回遗忘的密码&#xff1f; 【免费下载链接】ArchivePasswordTestTool 利用7zip测试压缩包的功能 对加密压缩包进行自动化测试密码 项目地址: https://gitcode.com/gh_mirrors/ar/ArchivePasswordTestTool 你可能遇到过这样的时刻&…

作者头像 李华
网站建设 2026/8/19 1:46:10

AI算力供应链波动下,开发者如何构建弹性架构与多云策略

最近科技圈有个消息让不少开发者心里咯噔了一下&#xff1a;英伟达&#xff08;NVIDIA&#xff09;据称大幅缩减了对 OpenAI 数据中心建设的融资担保&#xff0c;规模从传闻中的 2500 亿美元腰斩至不足 1200 亿美元。这听起来像是一个遥远的金融新闻&#xff0c;但如果你正在用…

作者头像 李华
网站建设 2026/8/19 1:45:18

192.ABAP EKKO EKPO 采购订单明细查询开发

摘要 本文面向具备编程基础、希望系统掌握SAP ABAP开发的技术人员。文章从SAP系统架构与ABAP语言特性出发,深入剖析ABAP程序的处理逻辑与数据持久化机制,并通过一个完整的采购订单创建程序,演示从数据库读取、数据校验、内存操作到输出反馈的全流程。文中所有代码均经过逻辑…

作者头像 李华
网站建设 2026/8/19 1:44:27

DeepSeek V4 Pro技术解析:1.6T MoE架构与1M上下文如何重塑AI应用开发

1. 从“又有人坐不住了”说起&#xff1a;大模型竞赛的新常态每次看到“又有人坐不住了”这样的标题&#xff0c;作为技术从业者&#xff0c;我第一反应不是看热闹&#xff0c;而是立刻去扒一扒这次到底是谁、因为什么“坐不住”了。这次的主角是DeepSeek V4 Pro&#xff0c;一…

作者头像 李华