novel-downloader:基于TypeScript的智能小说抓取与格式转换技术方案
【免费下载链接】novel-downloader一个可扩展的通用型小说下载器。项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader
novel-downloader是一个基于TypeScript开发的浏览器脚本工具,专为技术爱好者和开发者设计,能够从100多个小说网站智能抓取内容并转换为TXT和EPUB格式。该项目采用模块化架构,支持字体加密破解、图片文字识别、付费章节下载等高级功能,为数字内容保存提供了一套完整的技术解决方案。
项目定位与技术愿景
在数字阅读时代,网络内容随时面临404风险。novel-downloader旨在解决小说网站内容易失性的技术难题,通过自动化抓取和格式转换,帮助用户建立个人数字图书馆。项目支持起点中文网、晋江文学城、七猫中文网、カクヨム、pixiv小说等主流平台,覆盖中、日、英多语言内容。
核心功能包括:
- 智能网页解析与章节自动识别
- 字体加密自动破解机制
- 三级图片文字识别方案
- 多格式输出支持(TXT/EPUB/HTML)
- 并发下载与反爬虫策略优化
架构设计与实现原理
模块化规则引擎
项目采用高度模块化的规则系统,在src/rules/目录下按网站类型组织规则文件:
src/rules/ ├── onePage/ # 单页式小说网站规则 ├── twoPage/ # 双页式小说网站规则 ├── special/ # 特殊网站规则(需要登录或特殊处理) ├── mbtxt/ # 文本格式特殊处理规则 ├── lib/ # 共享库函数 └── biquge/ # 笔趣阁系列网站规则每个规则文件继承BaseRuleClass基类,实现bookParse和chapterParse抽象方法,确保对不同网站结构的灵活适配。
三级图片文字识别方案
针对图片文字加密网站,novel-downloader实现了独特的三级解码方案:
- 文件名快速匹配:通过图片文件名直接映射文字,实现毫秒级识别
- 哈希值中等精度识别:下载图片并计算哈希值进行匹配,平衡速度与准确性
- OCR光学字符识别:使用PaddleOCR模型确保最高识别精度
字体加密破解机制
对于晋江文学城等使用自定义字体保护内容的平台,项目自动下载字体文件并建立字符映射关系。字体解码模块位于src/rules/lib/目录,能够处理复杂的字体加密方案。
并发下载与资源管理
通过p-limit库实现并发控制,支持自定义线程数和下载间隔:
// 默认并发配置 public concurrencyLimit = 10; public sleepTime = 50; // 毫秒 public maxSleepTime = 500; // 毫秒快速上手与配置指南
环境准备与安装
- 安装脚本管理器:推荐Tampermonkey(支持Chrome、Firefox、Edge等浏览器)
- 获取脚本文件:
git clone https://gitcode.com/gh_mirrors/no/novel-downloader cd novel-downloader yarn install yarn build - 安装构建产物:在
dist/目录中找到bundle.user.js文件并安装
基本使用流程
访问支持的小说网站时,网页右上角会出现下载图标。点击即可开始下载,右下角会显示实时进度条。下载完成后自动生成TXT和EPUB文件。
核心配置参数
在设置面板中可以调整以下参数:
| 参数名称 | 默认值 | 说明 |
|---|---|---|
| 并行下载线程数 | 10 | 同时下载的章节数量 |
| 下载间隔时间 | 50ms | 单线程时章节下载间隔 |
| 最大下载间隔 | 500ms | 单线程时最大间隔时间 |
| 调试模式 | 关闭 | 启用详细日志输出 |
| 自动存档 | 开启 | 将页面存档至互联网档案馆 |
高级应用与扩展能力
自定义章节筛选
通过开发者工具注入chapterFilter函数,实现精确的章节筛选:
// 只下载前50章 function chapterFilter(chapter) { return chapter.chapterNumber <= 50; } // 只下载特定章节类型 function chapterFilter(chapter) { return chapter.chapterName.includes("番外") || chapter.chapterName.includes("后记"); }输出格式定制
通过saveOptions对象完全控制输出格式:
const saveOptions = { getchapterName: (chapter) => { return `第${chapter.chapterNumber}章 ${chapter.chapterName}`; }, mainStyleText: `p { text-indent: 2em; line-height: 1.8; margin-bottom: 1em; }`, chapterSort: (a, b) => { // 倒序排列章节 return b.chapterNumber - a.chapterNumber; } };Token认证配置
对于需要登录的网站,可以通过抓包工具获取token并注入:
const tokenOptions = { Jjwxc: "11111111_750afc84c839aaaaafccd841fffd11f1", Xrzww: { deviceIdentify: "webh517657567560", Authorization: "Bearer 453453453e03ee546456546754756756" } }; window.tokenOptions = tokenOptions;自定义完成回调
下载完成后自动执行特定操作:
function customFinishCallback(book) { window.close(); // 下载完成后自动关闭窗口 // 或执行其他自定义逻辑 } window.customFinishCallback = customFinishCallback;生态集成与社区贡献
技术栈与依赖关系
项目基于现代Web技术栈构建:
{ "dependencies": { "@mozilla/readability": "网页内容提取", "@oovz/esearch-ocr": "OCR文字识别", "onnxruntime-web": "AI模型推理", "vue": "用户界面框架", "streamsaver": "流式文件保存" }, "devDependencies": { "typescript": "类型安全", "webpack": "构建工具", "playwright": "端到端测试" } }扩展支持新网站
开发者可以通过以下步骤添加对新网站的支持:
- 在
src/rules/目录下创建新的规则文件 - 继承
BaseRuleClass并实现必要方法 - 在
router/download.ts中添加路由规则 - 在
header.json中配置匹配规则 - 运行测试确保功能正常
测试与质量保证
项目提供完整的测试工具链:
yarn lint # 代码规范检查 yarn build # 构建脚本文件 yarn test:e2e # 端到端功能测试社区参与方式
- 问题反馈:在项目issue页面提交问题报告,包含详细的重现步骤和日志信息
- 功能请求:提交新网站支持或功能改进建议
- 代码贡献:遵循AGPL-3.0协议,提交Pull Request
- 文档完善:帮助改进文档和用户指南
性能优化建议
针对不同网站特性,可调整以下参数优化下载体验:
| 网站类型 | 推荐配置 | 说明 |
|---|---|---|
| 反爬严格网站 | 并发数: 1-3 间隔: 200-500ms | 避免触发反爬机制 |
| 图片密集型网站 | 启用OCR缓存 限制内存使用 | 防止内存溢出 |
| 大型小说网站 | 分段下载 启用章节筛选 | 避免单次下载过多章节 |
内存管理策略
对于图片特别多的博客(如Lofter),脚本内置了内存保护机制:
- 默认内存限制:800MB
- 自动跳过视频内容
- 支持分批次下载
- 图片下载流式处理
novel-downloader不仅是一个技术工具,更是一个开源社区项目。通过模块化设计和清晰的API接口,开发者可以轻松扩展功能、优化性能,共同构建更完善的数字内容保存生态系统。无论是作为个人使用还是技术研究,该项目都为网络小说保存提供了可靠的技术基础。
【免费下载链接】novel-downloader一个可扩展的通用型小说下载器。项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考