JMComic-Crawler-Python

hect0x7MIT活跃维护

提供 Python API 访问禁漫天堂,支持网页端和移动端,可配合 GitHub Actions 自动下载漫画。

Python API for JMComic | 提供Python API访问禁漫天堂,同时支持网页端和移动端 | 禁漫天堂GitHub Actions下载器🚀

v2.7.11发布于 2026-11-03 16:25 UTC7,974star +21 / 7 天12,320fork同步于 2026-11-10 05:31 UTC

怎么上手

从 README 代码块原样提取,可能是其中一种安装方式
pip install jmcomic -U
pip install git+https://github.com/hect0x7/JMComic-Crawler-Python
硬件要求

README 没有说明硬件要求。

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

这个项目的说明还在生成中,先参考下面「最近发版」和 README。

最近发版

5 个版本v2.7.11
  1. v2.7.11最新正式版2026-11-03 · 2026-11-03 16:25 UTC

    Summary

    本次更新新增异步网页端客户端 AsyncJmHtmlClient、顶层 auth 登录配置与插件异步执行接口,移除外部 commonX 依赖,并修复 SessionPostman 会话状态与网页端搜索总数解析问题。

    Added

    • 新增异步网页端客户端 AsyncJmHtmlClient(async_html),支持本子/章节详情、搜索、分类排行、收藏夹、评论、每日签到及可用网页域名自动获取。
    • 新增顶层 auth 登录配置(支持 username、password、cookies 及 ${ENV} 环境变量占位符)与 option.login_with_option_auth() / login_with_option_auth_async() 登录接口,配套新增 登录指南。
    • AsyncJmcomicClient 新增 download_album_cover 异步封面下载;JmOptionPlugin 新增 async_invoke(配合 JmOption.call_all_plugin_async),支持插件异步执行与同步插件自动线程卸载。

    Changed

    • 移除外部 commonX 包依赖,核心工具与 Postman 实现内聚至 jmcomic.common。
    • 未显式配置 client.async_impl 时,异步客户端默认跟随 client.impl(html 对应 async_html,其余对应 async_api)。
    • 顶层下载、favorite_folder_export 插件及 GitHub Actions 配置统一改用 auth 自动登录;直接调用 client.login() 仅作用于当前客户端实例,不再修改全局 option。

    Fixed

    • 修复 SessionPostman(curl_cffi_session、requests-session)更新 cookies 时覆盖已有会话 Cookie、copy() 报错及 requests-session 未自动注入默认请求头的问题。
    • 修复网页端搜索结果总数显示 1000+ 时正则解析失败的问题。
  2. v2.7.102026-10-22 · 2026-10-22 12:29 UTC
    查看更新说明

    Summary

    本次更新支持 API 客户端在 get_album_detail 传入章节 ID 时自动重定向至父本子,新增收藏状态不匹配时的自动回滚保护,提取每日签到判重关键字为可配置类字段并补齐简体文案,优化免分割图片下载判断,并同步禁漫 APP 2.1.12 版本号与内置 API 域名。

    Added

    • JmAlbumDetail 新增 series_id 字段;同步与异步 API 客户端的 get_album_detail 新增 allow_redirect: bool = True 参数,当传入多章本子的子章节 ID 时默认打印 api.album_redirect 提示日志并自动重定向获取所属父本子详情。
    • JmUserClient 与 AsyncJmcomicClient 新增 DAILY_ALREADY_CHECKED_IN_KEYWORDS 类字段,统一管理每日签到重复打卡匹配关键字,方便外部自定义扩展。
    • 同步与异步 API 客户端的 toggle_favorite_album、add_favorite_album、delete_favorite_album 新增 rollback_when_mismatch: bool = True 参数,在底层 Toggle 接口返回类型与预期不符时默认自动再次请求回滚服务端状态后再抛出异常。

    Changed

    • 更新禁漫移动端版本号 JmMagicConstants.APP_VERSION 至 2.1.12,并同步更新内置 API 域名列表 JmModuleConfig.DOMAIN_API_LIST。
    • 优化 JmOption.need_to_decode_image 判断逻辑:当图片分割数计算结果为 0(无需拼接还原)时直接返回 False,避免无效解码开销。

    Fixed

    • 修复移动端 daily_checkin 在服务端返回简体中文 "今天已经签到过了" 以及网页端返回 {"error": "finished"} 时未能识别为重复签到(CODE_ALREADY_CHECKED_IN)而误抛异常的问题。
    • 修复移动端对已收藏本子调用 add_favorite_album(或对未收藏本子调用 delete_favorite_album)时,底层 Toggle 接口直接翻转服务端收藏状态且未回滚的问题。
  3. v2.7.92026-10-13 · 2026-10-13 17:01 UTC
    查看更新说明

    Summary

    本次更新支持基于 DownloadControl 的协作式取消下载与多层级共享 Runtime 调度,重构批量下载结果为保序检索集合,降低默认图片并发配置,并优化多任务进度界面。

    Added

    • 新增 JmTempRuntime、JmSyncRuntime 与 JmAsyncRuntime;裸同步 Downloader 的局部调度使用临时单池 Runtime,顶层同步 API 或自定义同步调度可复用 album/photo/image 三层线程池,异步下载可复用 decode 线程池。
    • 新增 DownloadControl 和 DownloadCancelledException,支持通过任务上下文协作式取消同步与异步下载;DownloadCancelledException 支持通过 completed_results 与 unfinished_ids 读取批量取消时的已完成成果与未完成 ID。
    • BatchResult 重构为独立类,保持输入 FIFO 原序并支持车号检索与下标访问,不再继承 set。
    • DownloadResult 新增 album 和 photo 快捷实体访问属性。
    • 新增 JTC (Jm Task Context) 门面类,统一提供上下文、Runtime、Option 及取消控制器的快捷读取方法。
    • jmcomic --dry-run 使用随机模拟任务预览多任务进度和重试日志,不请求网络、不下载图片、不写日志文件,也不加载 --option 配置;不能与 --no-progress 同用。

    Changed

    • 默认图片层下载并发配置 download.threading.image 从 30 调整为 20。
    • 下载调度统一使用标准库 Executor;顶层 API 和裸同步 Downloader 的临时调度显式关闭自己创建的 Runtime,jm_task_context 只传播字段;外部 Runtime 和 Executor 仍由调用方关闭。
    • 顶层下载会把 Runtime 和 Option 作为公开字段直接放入任务上下文;Runtime 不依赖 Context 或 Option,未配置的层级由实际调用点传入默认 worker 数。

    Fixed

    • 同步和异步下载器共用一个动态进度界面与日志区,已结束任务保留到最后一个活动下载器退出,再统一关闭界面。
    • 界面启动或渲染失败时清理注册状态;界面退出失败时仍执行下载器资源释放,避免影响后续下载。
  4. v2.7.82026-10-07 · 2026-10-07 10:32 UTC
    查看更新说明

    Summary

    本次更新修复禁漫 API 响应携带 UTF-8 BOM 导致 JSON 解析与校验失败的问题(#585),并兼容空下载场景下的 GitHub Actions 工作流。

    Fixed

    • API 响应 UTF-8 BOM 兼容与校验统一:在 JmcomicText.try_parse_json_object 中增加对 UTF-8 BOM 字符(\ufeff)的过滤剥离,并在同步/异步客户端中统一使用该方法进行 API 响应合法性校验,彻底解决因 BOM 导致客户端误判为非 JSON 响应并反复重试耗尽的问题(#585)。
    • 下载 Actions 工作流空目录保护:在 download.yml 与 download_dispatch.yml 中增加对 $JM_DOWNLOAD_DIR 是否存在及是否非空的判断;在无本子下载时跳过压缩和构件上传,避免目录不存在导致工作流异常中断。
  5. v2.7.72026-09-13 · 2026-09-13 15:47 UTC
    查看更新说明

    Summary

    本次更新新增签到及打卡日历接口,为本子详情增加收藏与点赞状态,修复 HTML 登录结果校验。引入插件依赖声明、依赖策略,并完善收藏夹导出插件的失败重试与汇总提示,新增 Calibre metadata 插件。

    Added

    每日签到
    功能说明
    get_daily / daily_checkinHTML/API 客户端支持获取每日签到信息与打卡日历、执行每日签到,未提供 daily_id 时自动获取。
    JmDailyCheckinResp双端统一返回标准打卡状态(code=0 签到成功,code=1 今日重复打卡,透传服务端 msg),其余失败直接抛异常。
    实体字段
    字段说明
    JmAlbumDetail.is_favoritebool,HTML 网页端与 API 移动端双端识别本子收藏状态。
    JmAlbumDetail.likedbool,HTML 网页端与 API 移动端双端识别本子点赞/喜欢状态。
    插件系统
    功能说明
    plugin_dependencies 声明插件基类新增 plugin_dependencies 类属性声明运行时依赖,并提供 required_dependencies_for(kwargs) 钩子按配置动态扩展(如 zip 按加密方式追加 pyzipper/py7zr,img2pdf 启用加密时追加 pikepdf)。
    dependencies_strategy 配置新增 plugins.dependencies_strategy,支持三种策略:failed-fast(默认,缺失即报错并给出安装指引)、auto-install(自动 pip 安装)、ignore-only-log(仅警告不阻断)。
    [plugins] extraspyproject.toml 新增 extras,pip install jmcomic[plugins] 一次性安装全部插件可选依赖(img2pdf、pikepdf、psutil、py7zr、pyzipper、rich、browser_cookie3)。
    已有插件依赖补齐为 usage_log、download_progress、auto_set_browser_cookies 等已有插件补齐 plugin_dependencies 声明。
    calibre_metadata 插件在 after_album 阶段生成 Calibre 可识别的 metadata.opf,支持 include_cover 下载封面、fields 自定义元数据;OPF 生成由 jmcomic-calibre 提供。impl by @yifenliwu。

    Changed

    变更点说明
    zip 插件 encrypt 校验新增参数类型校验,非法标量(如 encrypt: enabled)在初始化阶段即拦截并给出清晰报错,不再等到运行时抛出 AttributeError。
    HTML 登录接口返回值更新POST /login 密码错误时 HTTP 200 误判为成功,增加 status == 1 严格校验并提取错误信息。
    API page_count / pub_date 字段适配最新返回值page_count 正确映射为全本总图片数(total_photos),pub_date 格式化为发布日期。
    PhotoConcurrentFetcherProxy 代理委托补齐 __getattr__ 委托,修复底层客户端方法丢失的问题。

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    GitHub Stars Forks GitHub latest releases PyPI - Downloads Licence Used by

    本项目封装了一套可用于爬取JM的Python API.

    你可以通过简单的几行Python代码,实现下载JM上的本子到本地,并且是处理好的图片。

    🧭 快速指路

    友情提示:珍爱JM,为了减轻JM的服务器压力,请不要一次性爬取太多本子,西门🙏🙏🙏.

    https://github.com/user-attachments/assets/63ba2016-ee93-4133-a3e1-31ea6783c400

    introduction.jpg

    项目介绍

    本项目的核心功能是下载本子。

    基于此,设计了一套方便使用、便于扩展,能满足一些特殊下载需求的框架。

    目前核心功能实现较为稳定,项目也处于维护阶段。

    除了下载功能以外,也实现了其他的一些禁漫接口,按需实现。目前已有功能:

    • 登录
    • 搜索本子(支持所有搜索项)
    • 获取本子评论(包括回评、剧透标识)
    • 分类/排行榜
    • 获取本子/章节详情
    • 图片下载解码
    • 个人收藏夹
    • 接口加解密(APP的接口)

    安装教程

    ⚠如果你没有安装过 Python,需要先前往 Python 官网下载 再执行以下步骤。 推荐使用 Python 3.14

    • 通过pip官方源安装(推荐,并且更新也是这个命令)

      pip install jmcomic -U
      
    • 通过源代码安装

      pip install git+https://github.com/hect0x7/JMComic-Crawler-Python
      

    快速上手

    1. 下载本子方法

    只需要使用如下代码,就可以下载本子JM123的所有章节的图片:

    import jmcomic  # 导入此模块,需要先安装.
    
    jmcomic.download_album('123')  # 传入要下载的album的id,即可下载整个album到本地.
    
    # 也可以使用 Async API (详见教程: https://jmcomic.readthedocs.io/zh-cn/latest/tutorial/14_async_usage/)
    import asyncio
    
    asyncio.run(jmcomic.download_album_async('123'))
    

    上面的 download_album方法还有一个参数option,可用于控制下载配置,配置包括禁漫域名、网络代理、图片格式转换、插件等等。

    你可能需要这些配置项。推荐使用配置文件创建option,用option下载本子,见下章:

    2. 使用option配置来下载本子

    1. 首先,创建一个配置文件,假设文件名为 option.yml

      该文件有特定的写法,你需要参考这个文档 → 配置文件指南

      下面做一个演示,假设你需要把下载的图片转为png格式,你应该把以下内容写进option.yml

    download:
      image:
        suffix: .png # 该配置用于把下载的图片转为png格式
    
    1. 第二步,运行下面的python代码
    import jmcomic
    
    # 创建配置对象
    option = jmcomic.create_option_by_file('你的配置文件路径,例如 D:/option.yml')
    # 使用option对象来下载本子
    jmcomic.download_album(123, option)
    # 等价写法: option.download_album(123)
    

    3. 使用命令行

    [!TIP] 如果只想下载本子,使用命令行会比上述方式更加简单直接

    例如,在windows上,直接按下 win+R 键,输入jmcomic xxx就可以下载本子。

    示例:下载本子123的命令

    jmcomic 123
    

    同时下载本子123, 章节456的命令

    jmcomic 123 p456
    

    命令行模式也支持自定义option,你可以使用环境变量或者命令行参数:

    a. 通过命令行 --option 参数指定option文件路径

    jmcomic 123 --option="D:/a.yml"
    

    b. 命令行不改,而是配置环境变量 JM_OPTION_PATH 为option文件路径(推荐)

    [!TIP] 请自行google配置环境变量的方式,或使用powershell命令: setx JM_OPTION_PATH "D:/a.yml" 重启后生效

    另外,jmcomic 还提供了一个美观的进度条能力,默认是开启的,但是需要你手动安装一个额外依赖 pip install rich。效果如下:

    jmcomic 命令行下载进度

    详细开启方法参考文档:启用美观的下载进度条

    4. 查看本子详情(jmv 命令)

    [!NOTE] jmv 命令用于快速查看本子详情,不做下载。

    适用场景:在某些网站上看到一串神秘车号,想快速看看具体是啥本子。此时只需copy原文本,按下 win+R,输入jmv [粘贴内容]即可

    支持从任意文本中提取数字作为车号,方便直接粘贴各种格式的车号。

    示例:

    # 直接输入车号
    jmv 350234
    
    # 从混合文本中提取数字(提取出 350234)
    jmv 350谁还没看过234
    
    # 指定option文件(也支持环境变量,用法同上)
    jmv 350234 --option="D:/a.yml"
    
    # -y 参数:执行完毕后直接退出,无需按回车确认
    jmv 350234 -y
    

    输出效果:

    🔍 正在查询 禁漫车号 - [350234] 的详情...
    
    ──────────────────────────────────────────────────
      📖 标题:  xxx
      🆔 ID:    JM350234
      🔗 链接:  https://18comic.vip/album/350234/
      ✍️ 作者:  Author1, Author2
    ──────────────────────────────────────────────────
      📅 发布日期:  2022-06-15
      📅 更新日期:  2023-01-01
      📄 总页数:    50
      👀 观看:      2M
      ❤️ 点赞:     77K
      💬 评论:      9801
    ──────────────────────────────────────────────────
      🏷️ 标签:  标签1, 标签2, ...
      🎭 人物:  角色A, 角色B, ...
      📚 作品:  作品1, 作品2, ...
    ──────────────────────────────────────────────────
      📑 章节 (2):
         第1話  上  (id: 350234)
         第2話  下  (id: 350235)
    ──────────────────────────────────────────────────
    
    [运行结束] 请按回车键关闭窗口... (下次运行可附加 -y 参数跳过确认)
    

    进阶使用

    请查阅文档首页 → jmcomic.readthedocs.io

    或者查看github仓库的文档 → github-repo-docs

    (提示:jmcomic提供了很多下载配置项,大部分的下载需求你都可以尝试寻找相关配置项或插件来实现。)

    项目特点

    • 绕过Cloudflare的反爬虫

    • 实现禁漫APP接口最新的加解密算法 (1.6.3)

    • 支持Async和Sync两套 API

    • 用法多样:

    • 支持网页端和移动端两种客户端实现,可通过配置切换(移动端不限ip兼容性好,网页端限制ip地区但效率高)

    • 支持自动重试和域名切换机制

    • 支持按下载任务维度结构化收集日志

    • 可配置性强

      • 不配置也能使用,十分方便
      • 配置可以从配置文件生成,支持多种文件格式
      • 配置点有:请求域名 客户端实现 是否使用磁盘缓存 同时下载的章节/图片数量 图片格式转换 下载路径规则 请求元信息(headers,cookies,proxies) 中文繁/简转换等
    • 可扩展性强

      • 支持自定义本子/章节/图片下载前后事件的回调函数
      • 支持自定义类:Downloader(负责调度) Option(负责配置) Client(负责请求) 实体类等
      • 支持自定义日志、异常监听器
      • 支持 Plugin 扩展,目前内置 21 个实用插件,包括:美观下载进度条、图片合并 PDF、一图流长图拼接、生成zip/7z压缩包、浏览器 Cookie 获取、订阅更新、收藏夹导出、封面下载等。

    使用小说明

    • 推荐使用 Python 3.14,目前 CI 只覆盖 Python 3.10 及以上版本。

      [!NOTE] Python 3.9 及更早版本均已结束官方支持 (EOL),使用3.9及以下随时有可能遇到第三方库不兼容的问题。Python 3.9 仍保留安装兼容,但不再纳入 CI。

    • 个人项目,文档和示例会有不及时之处,可以Issue提问。

    项目文件夹介绍

    • .github:GitHub Actions配置文件

    • assets:存放一些非代码的资源文件

      • docs:项目文档
      • option:存放配置文件
    • src:存放源代码

      • jmcomic:jmcomic模块
    • tests:测试目录,存放测试代码,使用unittest

    • usage:用法目录,存放示例/使用代码

    感谢以下项目

    图片分割算法代码+禁漫移动端API

    used by 项目

    配套项目

    我基于 jmcomic 构建的三个配套项目:本地阅读、AI 交互、安卓APK归档

    项目定位
    📖 本地看本神器用浏览器看本支持下拉 / 单页 / 无缝双页阅读与局域网手机躺床看。🚀 pip install jm-view-server && jms
    🤖 Skills & MCP 集成提供 Skills + CLI 与 MCP 双路线接入 Claude Code / Codex 等,无需记车号写配置,自然语言搜本、查评论排雷、下载转 PDF。🚀 pip install jmcomic-ai · 查看接入指南
    📱 禁漫官方移动端安装包自动追踪基于 jmcomic 由 GitHub Actions 定时检测禁漫 Android 客户端,自动归档最新官方 APK 至 Releases(附 iOS 安装指引)。🚀 前往 Releases 下载最新 APK

    Star History