网页爬虫后端CLI【免费下载链接】fanqienovel-downloader下载番茄小说项目地址https://gitcode.com/gh_mirrors/fa/fanqienovel-downloader点击查看免费下载本篇技术指南围绕开源项目fanqienovel-downloader一个基于 Python 的番茄小说下载工具展开系统讲解本地命令行CLI程序、Web 版服务、Docker 部署与手机 Termux 使用四条使用路径并结合仓库源码剖析其核心实现章节下载、Cookie 机制、多格式保存、下载队列等。读完本文你将能够独立完成从环境搭建、按 ID/关键词下载小说、批量下载与更新到部署一个带进度条与在线阅读能力的远程 Web 下载服务的完整实战操作。提示本项目面向 Python 网络爬虫与网页处理技术的教育和研究用途请勿滥用使用前请遵守相关法律法规与网站使用政策。一、项目概览与版本前提fanqienovel-downloader 通过 Python 实现番茄小说fanqienovel.com的下载能力仓库核心代码集中在 src/main.py本地 CLI 与核心下载逻辑与 src/server.pyWeb 版服务。项目同时提供 src/ref_main.py 作为可运行于手机的参考实现。版本前提作者在 README 中明确指出v1.1.5及以下版本因 API 失效无法使用务必使用v1.1.6及以上版本当前仓库 README 对应的保存方式说明基于 v1.1.14 版本。这意味着从旧版本迁移时请直接拉取最新代码不要沿用旧版本的可执行文件。核心依赖项目依赖清单见 requirements.txtsrc目录下也有一份内容相同的 src/requirements.txt包括requests/urllib3网络请求与重试基础lxml章节页 HTML 的 XPath 解析ebooklibEPUB 电子书生成tqdm下载进度条Flask/Flask-SocketIO/gevent/gevent-websocketWeb 版服务与实时进度推送beautifulsoup4小说页面元数据作者、封面解析从 src/main.py 的导入可以看出核心模块全部围绕上述库展开而 src/ref_main.py 额外引入了tkinter、qrcode、http.server等依赖这是其面向手机场景的特殊设计。二、本地 CLI 程序使用详解2.1 运行方式与主菜单在src目录下执行python main.py即可启动本地 CLI入口见 src/main.py 的create_cli()。程序启动后直接输入小说 ID 即可下载输入菜单数字进入对应功能。主菜单如下源码实现见 src/main.py1. 更新小说 2. 搜索 3. 批量下载 4. 设置 5. 备份 6. 退出各功能与 README 的对应关系为菜单项功能说明源码位置直接输入 ID/链接立即下载该小说_parse_novel_id支持 URL 自动提取 IDsrc/main.py1更新小说读取record.json中的 ID 逐一更新src/main.py2搜索按关键词搜索并展示书名、作者、ID、字数src/main.py3批量下载编辑urls.txt一行一个链接src/main.py4设置调整段首占位符、延时、保存路径、保存模式、下载线程数src/main.py5备份备份已下载小说、下载格式与段首空格等配置src/main.py6退出程序src/main.py2.2 下载 ID 或链接的解析规则_parse_novel_idsrc/main.py的规则是若输入以http开头则先按?切分去除查询参数再取/分隔的最后一个片段作为小说 ID然后转为整数。因此以下输入均合法7143038691944959011https://fanqienovel.com/page/71430386919449590112.3 设置项详解v1.1.8 完整设置README 中提到的“设置”功能对应菜单 4 的子菜单src/main.py正文段首占位符、章节下载间隔延迟、小说保存路径、小说保存方式、下载线程数。结合 Config 数据类各设置的默认值与作用如下设置项默认值说明源码字段段首占位符内容全角空格正文段首插入的占位符字符kgf段首占位符数量0每个段首重复占位符的次数kg下载间隔延迟[50, 150]毫秒每章下载后的随机休眠区间用于降低请求频率delay保存路径空默认当前目录/程序目录输出小说文件的目录save_path保存模式整本保存SINGLE_TXT见下方五种模式save_mode下载线程数16并发下载章节的线程池大小xc重要提醒README 原话修改设置中的每一个选项都会覆盖原来的数据请仔细查看后再做出选择若想恢复默认选项直接删除config.json文件即可CLI 路径为src/data/config.json其生成逻辑见 src/main.py。2.4 五种保存模式v1.1.14保存方式由SaveMode枚举定义src/main.py共支持五种整本保存SINGLE_TXT全部章节写入一个.txt文件段首按kgf * kg规则处理换行实现见 _save_single_txt分章保存SPLIT_TXT每个章节单独一个.txt文件存放到以书名命名的目录实现见 _save_split_txtEPUB 电子书格式通过ebooklib生成带封面、作者、目录TOC与阅读顺序的.epub实现见 _download_epub封面与作者信息来自小说页面的application/ldjson结构化数据_get_author_info、_get_cover_urlHTML 格式生成带index.html目录页与“上一章/下一章”导航的章节网页并自动适配深色模式CSS 使用prefers-color-scheme实现见 _download_html 与 _create_html_indexLaTeX 格式生成.tex文档自动转义\ { } # $ ^ _ ~ %等 LaTeX 特殊字符并引入ctex、geometry、hyperref、bookmark宏包实现见 _download_latex 与 _format_latex_chapter。2.5 搜索与批量下载搜索调用search_novel(keyword)src/main.py其请求地址为api5-normal-lf.fqnovel.com/reading/bookapi/search/page/v/参数包含query关键词、aid、channel、iid等返回结果中取book_data[0]展示书名、作者、ID 与字数输入r可重新搜索。批量下载菜单 3 会检查/创建urls.txt首行写入# 输入小说链接一行一个并自动调用系统编辑器打开Windows 用notepad、macOS 用open -e、Linux 优先nano/vim。保存后程序逐行读取链接忽略空行与#注释行并依次下载实现见 src/main.py。2.6 备份功能菜单 5 调用backup_data()src/main.py将config.json、record.json以及书库中所有小说 JSON 复制到备份目录默认C:\Users\Administrator\fanqie_down_backup。重启程序时若检测到备份目录会提示是否恢复备份src/main.py。三、Web 版服务功能与三种运行方式3.1 Web 版实现的功能根据 README 与 src/server.py 源码Web 版提供以下能力网页服务器直接下载下载完成后在页面提供小说文件下载入口因此可以远程放在容器或虚拟机中运行实时进度条通过 Flask-SocketIO 推送progress、log、queue_update事件到前端见 src/server.py前端 src/static/js/main.js 对应渲染进度与日志ID 下载、关键词搜索、更新已下载小说分别对应/api/download/novel_id、/api/search、/api/update-all接口简洁 UI基于 Bootstrap 5 的单页应用导航包含“搜索 / 书库 / 阅读 / 设置 / 清理缓存”见 src/templates/index.html下载队列DownloadQueue类src/server.py使用deque 线程锁实现先进先出队列配合后台线程process_download_queue串行消费src/server.py并支持任务去重已在队列/下载中/已完成的任务不会重复加入在线阅读/api/read/novel_id/chapter_title接口从书库 JSON 中读取章节内容返回给阅读页src/server.py。此外 Web 版还实现了章节完整性校验与自动修复下载完成后verify_and_fix_chapterssrc/server.py会检查每个章节内容是否为空、长度是否过短少于 100 字符判定异常、是否包含“下载失败/访问太频繁”等错误标记对异常章节最多重试 3 轮修复下载接口本身也支持对失败章节循环重试最多 3 轮见 src/server.py。3.2 运行方式一直接执行 exe 文件适用于 Windows 用户。打包版程序sys.frozen分支会将数据目录定位到 exe 所在目录并在该目录下创建data、bookstore、novel_downloads等文件夹见 src/server.py。3.3 运行方式二Python 源码运行克隆仓库或下载项目 zip 并解压进入项目文件夹创建虚拟环境执行pip install -r requirements.txt安装依赖进入src目录运行python server.py浏览器访问http://localhost:12930。Python 3.8 及以下版本的特殊处理README 原文通过 zip 或 git 下载项目后在src目录中将原来的main.py删除再把main2.py改名为main.py。服务默认监听0.0.0.0:12930见 src/server.py因此除了本机访问外局域网内其他设备也可以使用http://本机IP:12930访问启动时控制台会打印访问提示见print_server_infosrc/server.py。Web 版的配置保存在src/data/web_config.jsonCONFIG_FILEsrc/server.pyload_config/save_configsrc/server.py负责读写kg、kgf、delay、save_path、save_mode、space_mode、xc等设置项书库 JSON 文件以{novel_id}_{safe_name}.json命名存放在bookstore目录文件名中的非法字符会被替换为全角字符_sanitize_filenamesrc/server.py。3.4 运行方式三Docker 部署仓库提供了 Dockerfile 与 docker-compose.ymlDockerfile基于python:3.13-slim安装gcc后复制项目并pip install -r requirements.txt暴露12930端口启动命令为python src/server.pydocker-compose.yml定义服务fanqie将宿主机端口12930映射到容器12930并声明两个命名卷fanqie_data→ 挂载到容器/app/src/data小说元数据/书库/配置fanqie_downloads→ 挂载到容器/app/src/novel_downloads下载输出。同时配置了资源限制内存上限 1G、预留 256M与restart: unless-stopped自动重启策略。操作步骤README 原文docker compose up # 前台运行 docker compose up -d # 后台运行启动后用浏览器访问http://localhost:12930。如需把数据存到指定目录可修改 docker-compose.yml 中“持久化用户数据”部分将命名卷替换为宿主机目录映射如./data:/app/src/data、./downloads:/app/src/novel_downloads。四、手机版Termux使用指南README 与 phone.md 提供了在手机上运行参考版ref_main.py非 Web 版的方式需要安装 Termux 终端模拟器1. 更换软件源可选加速 aptsed -i s^\(.*deb.*stable main\)$#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/apt/termux-main stable main $PREFIX/etc/apt/sources.list apt update apt upgrade2. 更换 pip 源可选加速安装pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple3. 安装 Python 依赖pip install requests ebooklib tqdm beautifulsoup4注意在ref_main.py中需要删掉tkinter的导入src/ref_main.py 导入了from tkinter import Tk, filedialogTermux 环境没有 tkinter。4. 运行python ref_main.py常见问题安装 lxml 库报错。README 给出的解决方法是CFLAGS-O0 pip install lxmlphone.md 提供了更完整的步骤先apt install clang libxml2 libxslt再pip install cython最后pip install lxml。注意README 特别提醒“运行环境配置正确不要对应错误”即手机版只对应ref_main.py不能与 Web 版server.py混用。五、常见问题QAQ1报错urllib3.exceptions.ProxyError: (Unable to connect to proxy, FileNotFoundError(2, No such file or directory))以及MaxRetryError: HTTPSConnectionPool(hostfanqienovel.com, port443): Max retries exceeded...A1README 官方解答这是网络错误请检查网络连接例如关闭代理、加速器后再重试。这类错误通常出现在系统代理设置异常或网络无法直连目标站点时从源码角度看下载请求均基于requests直接发往fanqienovel.com如 _get_chapter_list、_download_chapter_content因此系统级代理配置会影响请求结果。六、核心实现原理从源码看下载链路6.1 章节获取与内容解码下载链路的核心是三层调用_get_chapter_list(novel_id)请求https://fanqienovel.com/page/{novel_id}用 XPath//div[classchapter]/div/a提取章节链接并从中截取章节 ID同时读取//h1/text()获取书名、//span[classinfo-label-yellow]获取连载状态src/main.py_download_chapter_content(chapter_id)请求https://fanqienovel.com/reader/{chapter_id}用 XPath//div[classmuye-reader-content noselect]//p/text()提取段落文本失败时自动降级到https://fanqienovel.com/api/reader/full?itemId{chapter_id}接口src/main.py_decode_content(content)因为网页正文使用自定义字符集映射表在 src/charset.json码位区间CODE [[58344, 58715], [58345, 58716]]需要按字符映射表解码还原正文解码失败时还有一层 HTML 标签剥离的兜底逻辑src/main.py。6.2 Cookie 自动获取与失效刷新_init_cookiesrc/main.py在初始化时先取一个测试章节 ID若本地存在cookie.json则先_test_cookie验证无效则重新生成_get_new_cookiesrc/main.py通过随机生成novel_web_id并逐次试探直到能成功获取超过 200 字符的正文内容为止。下载过程中若连续 7 次失败tcs 7也会自动刷新 Cookiesrc/main.py。6.3 并发下载与断点续传章节下载使用ThreadPoolExecutor(max_workersconfig.xc)并发执行默认 16 线程见 src/main.py配合tqdm展示进度。每个章节的下载具备 3 次重试机制_download_chapter且下载过程会周期性每 5 章把已完成的章节写入书库 JSON_save_progress再次下载同一本书时已存在于 JSON 中的章节会直接复用_download_chapter实现近似断点续传的效果。下载完成后书库 JSON 中会写入_metadata含novel_id、name、status、last_updated见 src/main.pyget_downloaded_novelssrc/main.py据此枚举已下载书目并生成各格式文件的候选路径。七、目录结构与关键文件速查文件作用README.md项目使用说明本地/Web/Docker/手机版src/main.py本地 CLI 与核心下载实现Config、SaveMode、NovelDownloadersrc/server.pyWeb 版 Flask SocketIO 服务API、下载队列、章节校验src/ref_main.py手机 Termux 参考实现src/charset.json正文自定义字符集映射表src/requirements.txtPython 依赖清单Dockerfile / docker-compose.ymlDocker 镜像与编排配置phone.md手机版详细安装指引运行时生成的数据文件src/data/config.json本地 CLI 配置、src/data/record.json已下载 ID 记录、src/data/cookie.jsonCookie、src/data/bookstore/*.json书库、src/novel_downloads/Web 版下载输出、urls.txt批量下载链接列表。八、免责声明与开源协议本项目仅用于与 Python 网络爬虫和网页处理技术相关的教育和研究目的不应将其用于任何非法活动或侵犯他人权利的行为。用户对使用此程序引发的任何法律责任和风险负有责任作者和项目贡献者不对因使用程序而导致的任何损失或损害承担责任。使用前请确保遵守相关法律法规以及网站的使用政策如有疑问请咨询法律顾问。项目遵循 AGPL-3.0 开源协议使用本程序源码时请注明来源并同样使用此协议。赞分享网页爬虫后端CLI【免费下载链接】fanqienovel-downloader下载番茄小说项目地址https://gitcode.com/gh_mirrors/fa/fanqienovel-downloader点击查看免费下载相关推荐fanqienovel-downloader番茄小说下载神器的完整使用指南fanqienovel downloader番茄小说下载神器的完整使用指南 还在为网络不稳定无法阅读小说而烦恼吗fanqienovel downloader网页爬虫后端CLIfanqienovel-downloader番茄小说下载的完整解决方案还在为无法离线阅读番茄小说而烦恼吗fanqienovel downloader这款开源工具能够帮你轻松解决这个问题。无论你是想在通勤路上阅读还是担心网络信号网页爬虫后端CLIfanqienovel-downloader终极指南轻松下载管理番茄小说fanqienovel downloader终极指南轻松下载管理番茄小说 想要永久保存心仪的番茄小说fanqienovel downloader正是你需要的网页爬虫后端CLI上一篇免费网盘直链解析工具终极指南告别限速一键获取高速下载地址下一篇5分钟掌握D3KeyHelper暗黑破坏神3技能连点器完全指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?