番茄小说下载器实战指南:三分钟上手到多平台部署全解
【免费下载链接】fanqienovel-downloader下载番茄小说项目地址: https://gitcode.com/gh_mirrors/fa/fanqienovel-downloader
断网追更白忙一场?fanqienovel-downloader(番茄小说下载器)就是干这个的:输入一个小说 id 或链接,整本书被抓到本地,还能转成 TXT、EPUB(一种通用电子书格式)等多种格式,离线随便读。
🚀 三分钟跑起来
想最快看到结果,直接跑 Web 版。三条命令的事:
# 克隆项目 git clone https://gitcode.com/gh_mirrors/fa/fanqienovel-downloader cd fanqienovel-downloader# 安装全部 Python 依赖 pip install -r requirements.txt# 启动 Web 服务,浏览器打开 http://localhost:12930 cd src python server.py打开网页后,粘贴小说 id 或目录链接就能下载,带进度条、支持排队批量下载,下完还能直接在网页里在线阅读。注意一点:v1.1.6 之前的版本因为接口失效已经用不了了,装最新版即可。
⚙️ 它是怎么干活的
整个项目就三块,分工很清晰:
- 下载引擎(
src/main.py里的NovelDownloader类):管所有网络请求、HTML 解析、内容清洗 - Web 服务(
src/server.py,Flask 框架):提供网页界面和 REST API,用 SocketIO 把下载进度实时推送到浏览器 - 配置中心(
Config数据类):所有可调参数都收口在data/config.json,改文件不用改代码
下载一本完整书的主流程,大致是这五步:
- 拿章节列表:用小说 id 请求接口,得到书名和全部章节 id
- 并发抓正文:起线程池(默认 16 个线程)并行下载,每个请求之间加随机延迟、随机换 User-Agent(浏览器身份标识),降低被风控的概率
- 解析清洗:用 BeautifulSoup(一个 HTML 解析库)提取正文,再按
src/charset.json里的映射表处理特殊字符 - 断点保护:每下完几章就写一次 JSON 中间文件到
data/bookstore/,中断重跑时已下载的章节自动跳过 - 按模式出文件:根据
save_mode生成整本 TXT、分章 TXT、EPUB、HTML 或 LaTeX,其中 EPUB 会带上封面、作者和目录
Cookie(网站登录凭证)失效时引擎会自动重新生成,不用手动干预。
🖥️ 多环境安装实战
三种常见环境各给一套命令,直接复制就能验证。
本地 Python 环境
前面"三分钟跑起来"已经覆盖。建议先建虚拟环境再装依赖:
# 创建并激活虚拟环境,再装依赖 python -m venv venv source venv/bin/activate # Windows 用 venv\Scripts\activate pip install -r requirements.txtDocker 容器
适合放在 NAS、云服务器上长期挂着用。项目自带 Dockerfile 和docker-compose.yml:
# 构建镜像并在后台启动 docker compose up -d启动后同样访问http://localhost:12930。配置和数据分别存进fanqie_data、fanqie_downloads两个数据卷里,升级镜像不丢书。想换保存目录,改docker-compose.yml的 volumes 部分即可。
手机 Termux 环境
Android 手机上装 Termux(一个 Linux 终端环境),跑精简版src/ref_main.py就行。国内网络建议先换源:
# 更新并安装 Python 环境 pkg update && pkg install python pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple pip install requests ebooklib tqdm beautifulsoup4lxml 在手机上编译经常报错,按下面顺序处理:
# 解决 lxml 编译失败 apt install clang libxml2 libxslt CFLAGS="-O0" pip install lxml然后python ref_main.py开跑。
🎛️ 关键参数与调优
所有参数集中在data/config.json(定义在src/main.py的Config类里),核心就这几个:
| 参数 | 含义 | 默认值 |
|---|---|---|
save_mode | 保存模式:1 整本 TXT、2 分章 TXT、3 EPUB、4 HTML、5 LaTeX | 1 |
xc | 并发下载线程数 | 16 |
delay | 每次请求的随机延迟范围,单位毫秒 | [50, 150] |
kg/kgf | 段落首行缩进的字符数 / 用什么字符缩进 | 0 / 全角空格 |
space_mode | 空格处理:halfwidth 半角 / fullwidth 全角 | halfwidth |
save_path | 下载文件的保存目录 | 项目内 novel_downloads |
调优的本质是在"速度"和"稳定性"之间找平衡,按你的网络环境取个值:
| 网络环境 | xc建议 | delay建议 |
|---|---|---|
| 家庭宽带 | 8~12 | [50, 150] |
| 企业/机房网络 | 16~24 | [30, 100] |
| 手机热点 | 4~8 | [100, 300] |
被限流了就往大调delay、往小调xc,别硬刚。另外注意:改配置里的任何选项都会覆盖原值,改砸了直接把config.json删掉重建默认配置。
🛠️ 常见坑与自救
坑一:报ProxyError: Unable to connect to proxy
- 现象:下载一开始就抛代理连接异常
- 原因:系统环境变量里残留了失效的代理地址
- 解决:清掉代理再跑
# 清除代理环境变量后重试 unset http_proxy https_proxy python src/server.py坑二:pip install lxml编译失败
- 现象:一堆 C 编译器报错
- 原因:lxml 含 C 扩展,部分系统缺编译工具
- 解决:本地用
CFLAGS="-O0" pip install lxml;Termux 上按前面"手机环境"一节装 clang 和 libxml2
坑三:章节反复下载失败、内容返回空
- 现象:进度条走完但文件里缺章
- 原因:cookie 失效或平台接口变更
- 解决:先删
data/cookie.json让程序重新生成;还不行就升级到 v1.1.6 以上版本(旧版接口已死)
坑四:下载下来的中文乱码
- 现象:用某些工具打开 TXT 出现方块字
- 原因:文件本身是 UTF-8,读它的工具选错了编码
- 解决:用支持 UTF-8 的编辑器打开,或在代码里显式指定
encoding='utf-8'
🔧 进阶玩法与二次集成
Web 版暴露了一组 REST 接口,脚本化批量操作很方便,常用的几个在src/server.py里能直接查到:
# 用一行代码把某本书塞进下载队列 import requests requests.post("http://localhost:12930/api/queue/add/7143038691944959011")/api/search可以按关键词搜书,/api/queue/status查队列进度,串起来就是一个自己的"追更机器人"。
想加新格式?扩展点也很直白:src/main.py顶部的SaveMode枚举加一个成员,照着_save_single_txt的写法实现一个保存函数,再在保存分支里接上它就行。整条链路(下章 → 清洗 → 落盘)都是现成的,你只需要管最后一步。
⚖️ 使用红线与社区
说几句不好听但重要的:
- 这东西定位是学习和研究工具,下载内容仅限个人阅读,别商用、别二次传播
- 控制频率和并发,别把人家服务器打挂,且用且珍惜
- 项目是 AGPL-3.0 协议,改代码分发时请遵守协议要求
遇到问题先翻一遍 Issue 区,很多坑前人都踩过。有想法就提 Issue 或直接提 PR,作者对能复现的问题回复挺快的。
最后
- 新手:装好依赖跑起 Web 版,粘贴 id 下载,格式选 EPUB 就够用了
- 技术向:从
NovelDownloader读起,把delay和xc当实验变量玩,顺手用 API 写个自动追更脚本 - 团队用户:Docker 部署到一台常开的机器上,数据卷挂好,当个私人的书库存档站
现在就去把书架上最想带走的那本书,下载下来吧。
【免费下载链接】fanqienovel-downloader下载番茄小说项目地址: https://gitcode.com/gh_mirrors/fa/fanqienovel-downloader
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考