我用 Cursor 写了个 Web 小说下载器📘

875 阅读5分钟

我用 Cursor 写了个 Web 小说下载器📘

最近我花了几天时间,用Cursor写了一个小工具 —— Web 小说下载器
简单来说,它能帮你从各大小说网站上批量下载网络小说,并保存为干净的文本文件,让你可以离线阅读,不受广告打扰,也不用担心章节缺失。

项目已经开源在 GitHub:
👉 github.com/zzusp/Web-N…


💡 为什么要做这个工具

很多人(包括我自己)都有这样的经历:
想在网上看一本小说,结果满屏弹窗广告、强制登录、章节乱跳、还要看几页才能到正文。更烦的是,有些站点甚至需要会员才能下载离线版本。

我希望能有一个简单、纯净、可离线的方式阅读网络小说。
于是就动手做了这个小工具 —— Web 小说下载器

它的目标只有一个:

“帮用户从网页上把小说干净地下载下来,不带广告,不带干扰。”


🚀 它能做什么

目前 Web 小说下载器支持以下功能:

  • 🔍 输入小说目录页 URL,一键下载整本小说
  • 📚 根据XPATH识别章节标题与内容
  • 🧹 去除广告、脚注、无关文字
  • 📘 支持单章节内分页的章节内容爬取
  • 🧾 自动生成 txt 文件保存
  • 🧠 支持断点续传,意外中断可继续下载
  • ⚙️ 支持自定义保存路径和文件命名
  • 🛡️ 支持 Cloudflare 保护的网站
    很多小说网站启用了 Cloudflare 防护机制,普通爬虫会被拦截。
    Web 小说下载器支持自动识别并绕过 Cloudflare 验证,能够正常抓取内容,这也是它相较于同类工具的一个主要优势。

image.png

在使用之前,有两点前提要求需要注意:

  • 🧩 需要本地安装 Google Chrome 浏览器(程序通过浏览器来模拟访问网页);
  • 🧠 需要具备一定的前端基础知识,能够编写 XPath 表达式,用于匹配网页中小说章节与正文的元素。

📘 使用说明

整个使用流程非常简单,只需三步即可完成小说下载:

① 创建配置文件
{
  "version": "1.0",                         // 配置文件版本号(用于向后兼容配置格式)
  "task_name": "我的小说下载任务",           // 任务名称,便于区分多个配置文件
  "description": "从example.com下载小说的配置", // 可读描述,说明这个配置的用途或目标网站

  "browser": {
    "chrome_path": "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe", // Chrome 可执行文件路径(必需)
    "headless": true,                    // 是否以无头模式运行浏览器(true:不显示界面,false:显示界面,便于调试)
    "proxy": null                        // 可选代理地址(如 "127.0.0.1:10808"),若不需要填 null
  },

  "novel": {
    "menu_url": "https://www.example.com/book/123456", // 小说目录页 URL(必填)
    "title": "我的最爱小说",                        // 小说标题(用于输出文件的元数据/封面)
    "author": "作者名称",                           // 作者名(EPUB 输出时会用到)
    "output_filename": "my_favorite_novel"          // 输出文件名(不含扩展名)
  },

  "parsing": {
    "hash": "my_novel_123",                   // 元数据哈希,用于生成 chapters_<hash>/ 目录,便于断点续传与组织
    "chapter_xpath": "(//div[@class='bd'])[2]//ul[@class='list']//li/a", // 提取章节链接的 XPath(必填)
    "content_xpath": "//div[@class='page-content']", // 提取章节正文的 XPath(必填)
    "chapter_pagination_xpath": null,         // 单章节内多页时用于翻页的 XPath(如有则填写,否则为 null)
    "chapter_list_pagination_xpath": "//a[contains(text(),'下一页')]", // 章节列表分页的 XPath(支持翻页抓取全部章节)
    "content_regex": null                     // 可选的正文过滤正则(用于提取/清理正文中的特定区域)
  },

  "downloading": {
    "concurrency": 3,                         // 并发下载章节数(推荐 2~8,根据网络与机器资源调整)
    "content_regex": null                     // 下载阶段可覆盖的内容过滤正则(若在 parsing 中已设置可留空)
  },

  "processing": {
    "string_replacements": [                  // 字符串替换规则(依次替换 old -> new)
      ["<p>", ""],                            // 示例:移除 <p> 标签
      ["</p>", ""],
      ["<div>", ""],
      ["</div>", ""]
    ],
    "regex_replacements": [                   // 正则替换规则(依次替换 regex -> replacement)
      ["<img[^>]*>", "[图片]"],               // 将图片标签替换为占位文本
      ["\\s+", " "]                           // 压缩多余空白为单个空格
    ],
    "case_sensitive": false,                  // 替换是否区分大小写(true/false)
    "backup_enabled": false,                  // 是否为被替换的文件创建备份(true/false)
    "file_pattern": "*.html"                  // 要处理的文件匹配模式(默认 *.html)
  },

  "merging": {
    "format": "epub",                         // 最终合并输出格式(支持 "txt" / "epub")
    "reverse_order": false,                   // 是否以反序合并章节(true:从最新章到最旧章)
    "output_directory": "~/Downloads/Novels"  // 最终输出存放目录(可使用绝对或相对路径)
  }
}

在项目根目录下新建 configs 文件夹,将上面的 JSON 示例保存为
configs/my_novel.json
配置中的字段根据目标网站和个人需求修改即可,XPath 可通过浏览器开发者工具选取。

  • 📁 目录
    • 📄 web-novel-downloader.exe
    • 📁 configs
      • 📄 my_novel.json
② 验证配置是否正确

执行以下命令,检测配置文件是否有效:

web-novel-downloader-0.0.3.exe config validate configs/my_novel.json

如果终端显示以下内容,说明文件格式与字段内容无误。 image.png

③ 启动下载任务

运行:

web-novel-downloader-0.0.3.exe task --config configs/my_novel.json

程序会自动:

  1. 启动 Chrome(可隐藏窗口)
  2. 加载小说目录页并解析所有章节链接
  3. 抓取章节正文并清理无关标签
  4. 将结果保存为 .txt.epub 文件

image.png

完成后,你会在配置中指定的输出目录(如 ~/Downloads/Novels)看到成品文件。


💡 额外提示

  • 若遇到 Cloudflare 验证页面,可将 browser.headless 设置为 false,程序会自动打开浏览器窗口以供用户手动完成验证。
  • 支持断点续传:中途关闭程序,再次运行同一配置文件时,会从中断章节继续下载。
  • 建议先在小规模章节上测试 XPath 表达式,确认匹配正确后再执行整本下载。

📦 获取方式

项目已经完全开源,感兴趣的朋友可以到 GitHub 下载:

👉 github.com/zzusp/Web-N…

image.png

另外还提供了打包好的可执行文件版本,Windows 用户可以直接使用,无需安装任何依赖。


❤️ 写在最后

其实,这个小项目只是我平时写代码时的一个放松尝试。
我希望它能帮更多人重新找回纯粹阅读的乐趣
没有广告,没有充值提示,也没有被切割成几十页的章节。
只是一本干净的小说文本,让你安静地读下去。

“阅读本该简单。”


📎 项目地址:github.com/zzusp/Web-N…

如果你觉得好用,也欢迎点个 ⭐️ 支持一下。