Skip to content

saudadez21/novel-downloader

novel-downloader

PyPI Python CI Hits-of-Code

中文 | English

异步、可扩展的小说下载与处理工具包。

支持断点续爬、多格式导出、文本处理流水线, 并提供 CLI 与可选 Web 界面。

文档: 项目文档

运行要求: Python 3.11+ (开发环境: Python 3.13)


功能特性

  • 异步与高性能下载
  • 可恢复下载 (断点续爬)
  • 可插拔 HTTP 后端: aiohttp / httpx / curl_cffi
  • 多格式导出: TXT / EPUB / HTML
  • 文本处理流水线: 去广告、繁简转换、自动翻译等
  • 图片章节与混淆章节支持 (可选)
  • 插件系统: 可扩展站点解析器、导出器、Pipeline 等
  • CLI 与可选 Web GUI

完整功能列表见: 功能总览


安装与更新

使用 pip 安装最新稳定版本:

pip install -U novel-downloader

如需启用 Web GUI:

pip install novel-downloader[web-ui]

如需启用其它可选功能 (Web UI、图片转文字、额外后端等), 请参见: 安装指南


快速开始 (CLI)

# 下载一本小说
novel-cli download https://www.example.com/book/123/

# 使用站点 + 书籍 ID
novel-cli download --site n23qb 12282

更多示例见: CLI 使用示例

编程接口 (Programmatic API)

import asyncio
from novel_downloader.plugins import registrar
from novel_downloader.schemas import BookConfig, ClientConfig

async def main() -> None:
    site = "n23qb"

    # 指定书籍 ID
    book = BookConfig(book_id="12282")

    # 创建客户端
    cfg = ClientConfig(request_interval=0.5)
    client = registrar.get_client(site, cfg)

    # 在异步上下文中执行下载
    async with client:
        await client.download_book(book)

    # 下载完成后执行导出操作
    client.export_book(book, formats=["txt", "epub"])

if __name__ == "__main__":
    asyncio.run(main())

更多示例见: API 示例


贡献与开发

git clone https://github.com/saudadez21/novel-downloader.git
cd novel-downloader

# 可选: 为多语言支持编译翻译文件
# pip install babel
# pybabel compile -d src/novel_downloader/locales

pip install .
# 或安装带可选功能:
# pip install .[all]
# pip install -e .[dev,all]

欢迎提交 Issue / PR。


注意事项

  • 站点结构变更: 若目标站点页面结构更新或章节抓取异常, 欢迎提 Issue 或提交 PR
  • 登录支持范围: 登录功能受站点策略与接口限制, 部分场景需要手动配置 Cookie 或进行账号绑定
  • 请求频率: 请合理设置抓取间隔, 避免触发风控或导致 IP 限制

项目说明

  • 本项目仅供学习和研究使用, 不得用于任何商业或违法用途
  • 请遵守目标网站的 robots.txt 及相关法律法规
  • 使用本项目产生的任何法律责任由使用者自行承担, 作者不承担相关责任

About

小说下载工具, 支持 TXT/EPUB/HTML 导出 (笔趣阁 | 哔哩轻小说 | ESJ Zone | ...)

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Contributors