Name | jmcomic JSON |
Version |
2.6.4
JSON |
| download |
home_page | https://github.com/hect0x7/JMComic-Crawler-Python |
Summary | Python API For JMComic (禁漫天堂) |
upload_time | 2025-07-17 17:02:49 |
maintainer | None |
docs_url | None |
author | hect0x7 |
requires_python | >=3.7 |
license | MIT License
Copyright (c) 2023 hect0x7
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
|
keywords |
python
jmcomic
18comic
禁漫天堂
nsfw
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# Python API For JMComic (禁漫天堂)
本项目封装了一套可用于爬取JM的Python API.
你可以通过简单的几行Python代码,实现下载JM上的本子到本地,并且是处理好的图片。
[【指路】教程:使用GitHub Actions下载禁漫本子](./assets/docs/sources/tutorial/1_github_actions.md)
[【指路】教程:导出并下载你的禁漫收藏夹数据](./assets/docs/sources/tutorial/10_export_favorites.md)
**友情提示:珍爱JM,为了减轻JM的服务器压力,请不要一次性爬取太多本子,西门🙏🙏🙏**.
## 项目介绍
本项目的核心功能是下载本子。
基于此,设计了一套方便使用、便于扩展,能满足一些特殊下载需求的框架。
目前核心功能实现较为稳定,项目也处于维护阶段。
除了下载功能以外,也实现了其他的一些禁漫接口,按需实现。目前已有功能:
- 登录
- 搜索本子(支持所有搜索项)
- 图片下载解码
- 分类/排行榜
- 本子/章节详情
- 个人收藏夹
- 接口加解密(APP的接口)
## 安装教程
> ⚠如果你没有安装过Python,需要先安装Python再执行下面的步骤,且版本需要>=3.7([点我去python官网下载](https://www.python.org/downloads/))
* 通过pip官方源安装(推荐,并且更新也是这个命令)
```shell
pip install jmcomic -i https://pypi.org/project -U
```
* 通过源代码安装
```shell
pip install git+https://github.com/hect0x7/JMComic-Crawler-Python
```
## 快速上手
### 1. 下载本子方法
只需要使用如下代码,就可以下载本子`JM422866`的所有章节的图片:
```python
import jmcomic # 导入此模块,需要先安装.
jmcomic.download_album('422866') # 传入要下载的album的id,即可下载整个album到本地.
```
上面的 `download_album`方法还有一个参数`option`,可用于控制下载配置,配置包括禁漫域名、网络代理、图片格式转换、插件等等。
你可能需要这些配置项。推荐使用配置文件创建option,用option下载本子,见下章:
### 2. 使用option配置来下载本子
1. 首先,创建一个配置文件,假设文件名为 `option.yml`
该文件有特定的写法,你需要参考这个文档 → [配置文件指南](./assets/docs/sources/option_file_syntax.md)
下面做一个演示,假设你需要把下载的图片转为png格式,你应该把以下内容写进`option.yml`
```yml
download:
image:
suffix: .png # 该配置用于把下载的图片转为png格式
```
2. 第二步,运行下面的python代码
```python
import jmcomic
# 创建配置对象
option = jmcomic.create_option_by_file('你的配置文件路径,例如 D:/option.yml')
# 使用option对象来下载本子
jmcomic.download_album(422866, option)
# 等价写法: option.download_album(422866)
```
### 3. 使用命令行
> 如果只想下载本子,使用命令行会比上述方式更加简单直接
>
> 例如,在windows上,直接按下win+r键,输入jmcomic xxx就可以下载本子。
示例:
下载本子422866的命令
```sh
jmcomic 422866
```
同时下载本子123, 章节456的命令
```sh
jmcomic 123 p456
```
命令行模式也支持自定义option,你可以使用环境变量或者命令行参数:
a. 通过命令行--option参数指定option文件路径
```sh
jmcomic 123 --option="D:/a.yml"
```
b. 配置环境变量 `JM_OPTION_PATH` 为option文件路径(推荐)
> 请自行google配置环境变量的方式,或使用powershell命令: `setx JM_OPTION_PATH "D:/a.yml"` 重启后生效
```sh
jmcomic 123
```
## 进阶使用
请查阅文档首页→[jmcomic.readthedocs.io](https://jmcomic.readthedocs.io/zh-cn/latest)
(提示:jmcomic提供了很多下载配置项,大部分的下载需求你都可以尝试寻找相关配置项或插件来实现。)
## 项目特点
- **绕过Cloudflare的反爬虫**
- **实现禁漫APP接口最新的加解密算法 (1.6.3)**
- 用法多样:
- GitHub
Actions:网页上直接输入本子id就能下载([教程:使用GitHub Actions下载禁漫本子](./assets/docs/sources/tutorial/1_github_actions.md))
- 命令行:无需写Python代码,简单易用([教程:使用命令行下载禁漫本子](./assets/docs/sources/tutorial/2_command_line.md))
- Python代码:最本质、最强大的使用方式,需要你有一定的python编程基础
- 支持**网页端**和**移动端**两种客户端实现,可通过配置切换(**移动端不限ip兼容性好,网页端限制ip地区但效率高**)
- 支持**自动重试和域名切换**机制
- **多线程下载**(可细化到一图一线程,效率极高)
- **可配置性强**
- 不配置也能使用,十分方便
- 配置可以从配置文件生成,支持多种文件格式
- 配置点有:`请求域名` `客户端实现` `是否使用磁盘缓存` `同时下载的章节/图片数量` `图片格式转换` `下载路径规则` `请求元信息(headers,cookies,proxies)`
等
- **可扩展性强**
- 支持自定义本子/章节/图片下载前后的回调函数
- 支持自定义类:`Downloader(负责调度)` `Option(负责配置)` `Client(负责请求)` `实体类`等
- 支持自定义日志、异常监听器
- **支持Plugin插件,可以方便地扩展功能,以及使用别人的插件,目前内置插件有**:
- `登录插件`
- `硬件占用监控插件`
- `只下载新章插件`
- `压缩文件插件`
- `下载特定后缀图片插件`
- `发送QQ邮件插件`
- `自动使用浏览器cookies插件`
- `导出收藏夹为csv文件插件`
- `合并所有图片为pdf文件插件`
- `合并所有图片为长图png插件`
- `重复文件检测删除插件`
- `网页观看本地章节插件`
## 使用小说明
* Python >= 3.7,建议3.9以上,因为jmcomic的依赖库可能会不支持3.9以下的版本。
* 个人项目,文档和示例会有不及时之处,可以Issue提问
## 项目文件夹介绍
* .github:GitHub Actions配置文件
* assets:存放一些非代码的资源文件
* docs:项目文档
* option:存放配置文件
* src:存放源代码
* jmcomic:`jmcomic`模块
* tests:测试目录,存放测试代码,使用unittest
* usage:用法目录,存放示例/使用代码
## 感谢以下项目
### 图片分割算法代码+禁漫移动端API
<a href="https://github.com/tonquer/JMComic-qt">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://github-readme-stats.vercel.app/api/pin/?username=tonquer&repo=JMComic-qt&theme=radical" />
<source media="(prefers-color-scheme: light)" srcset="https://github-readme-stats.vercel.app/api/pin/?username=tonquer&repo=JMComic-qt" />
<img alt="Repo Card" src="https://github-readme-stats.vercel.app/api/pin/?username=tonquer&repo=JMComic-qt" />
</picture>
</a>
Raw data
{
"_id": null,
"home_page": "https://github.com/hect0x7/JMComic-Crawler-Python",
"name": "jmcomic",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "python, jmcomic, 18comic, \u7981\u6f2b\u5929\u5802, NSFW",
"author": "hect0x7",
"author_email": "hect0x7 <93357912+hect0x7@users.noreply.github.com>",
"download_url": "https://files.pythonhosted.org/packages/76/c1/e6e46b335ece6f70a04f5bbfafa13359604a3e89c658512782243268a140/jmcomic-2.6.4.tar.gz",
"platform": null,
"description": "# Python API For JMComic (\u7981\u6f2b\u5929\u5802)\n\n\u672c\u9879\u76ee\u5c01\u88c5\u4e86\u4e00\u5957\u53ef\u7528\u4e8e\u722c\u53d6JM\u7684Python API.\n\n\u4f60\u53ef\u4ee5\u901a\u8fc7\u7b80\u5355\u7684\u51e0\u884cPython\u4ee3\u7801\uff0c\u5b9e\u73b0\u4e0b\u8f7dJM\u4e0a\u7684\u672c\u5b50\u5230\u672c\u5730\uff0c\u5e76\u4e14\u662f\u5904\u7406\u597d\u7684\u56fe\u7247\u3002\n\n[\u3010\u6307\u8def\u3011\u6559\u7a0b\uff1a\u4f7f\u7528GitHub Actions\u4e0b\u8f7d\u7981\u6f2b\u672c\u5b50](./assets/docs/sources/tutorial/1_github_actions.md)\n\n[\u3010\u6307\u8def\u3011\u6559\u7a0b\uff1a\u5bfc\u51fa\u5e76\u4e0b\u8f7d\u4f60\u7684\u7981\u6f2b\u6536\u85cf\u5939\u6570\u636e](./assets/docs/sources/tutorial/10_export_favorites.md)\n\n**\u53cb\u60c5\u63d0\u793a\uff1a\u73cd\u7231JM\uff0c\u4e3a\u4e86\u51cf\u8f7bJM\u7684\u670d\u52a1\u5668\u538b\u529b\uff0c\u8bf7\u4e0d\u8981\u4e00\u6b21\u6027\u722c\u53d6\u592a\u591a\u672c\u5b50\uff0c\u897f\u95e8\ud83d\ude4f\ud83d\ude4f\ud83d\ude4f**.\n\n## \u9879\u76ee\u4ecb\u7ecd\n\n\u672c\u9879\u76ee\u7684\u6838\u5fc3\u529f\u80fd\u662f\u4e0b\u8f7d\u672c\u5b50\u3002\n\n\u57fa\u4e8e\u6b64\uff0c\u8bbe\u8ba1\u4e86\u4e00\u5957\u65b9\u4fbf\u4f7f\u7528\u3001\u4fbf\u4e8e\u6269\u5c55\uff0c\u80fd\u6ee1\u8db3\u4e00\u4e9b\u7279\u6b8a\u4e0b\u8f7d\u9700\u6c42\u7684\u6846\u67b6\u3002\n\n\u76ee\u524d\u6838\u5fc3\u529f\u80fd\u5b9e\u73b0\u8f83\u4e3a\u7a33\u5b9a\uff0c\u9879\u76ee\u4e5f\u5904\u4e8e\u7ef4\u62a4\u9636\u6bb5\u3002\n\n\u9664\u4e86\u4e0b\u8f7d\u529f\u80fd\u4ee5\u5916\uff0c\u4e5f\u5b9e\u73b0\u4e86\u5176\u4ed6\u7684\u4e00\u4e9b\u7981\u6f2b\u63a5\u53e3\uff0c\u6309\u9700\u5b9e\u73b0\u3002\u76ee\u524d\u5df2\u6709\u529f\u80fd\uff1a\n\n- \u767b\u5f55\n- \u641c\u7d22\u672c\u5b50\uff08\u652f\u6301\u6240\u6709\u641c\u7d22\u9879\uff09\n- \u56fe\u7247\u4e0b\u8f7d\u89e3\u7801\n- \u5206\u7c7b/\u6392\u884c\u699c\n- \u672c\u5b50/\u7ae0\u8282\u8be6\u60c5\n- \u4e2a\u4eba\u6536\u85cf\u5939\n- \u63a5\u53e3\u52a0\u89e3\u5bc6\uff08APP\u7684\u63a5\u53e3\uff09\n\n## \u5b89\u88c5\u6559\u7a0b\n\n> \u26a0\u5982\u679c\u4f60\u6ca1\u6709\u5b89\u88c5\u8fc7Python\uff0c\u9700\u8981\u5148\u5b89\u88c5Python\u518d\u6267\u884c\u4e0b\u9762\u7684\u6b65\u9aa4\uff0c\u4e14\u7248\u672c\u9700\u8981>=3.7\uff08[\u70b9\u6211\u53bbpython\u5b98\u7f51\u4e0b\u8f7d](https://www.python.org/downloads/)\uff09\n\n* \u901a\u8fc7pip\u5b98\u65b9\u6e90\u5b89\u88c5\uff08\u63a8\u8350\uff0c\u5e76\u4e14\u66f4\u65b0\u4e5f\u662f\u8fd9\u4e2a\u547d\u4ee4\uff09\n\n ```shell\n pip install jmcomic -i https://pypi.org/project -U\n ```\n* \u901a\u8fc7\u6e90\u4ee3\u7801\u5b89\u88c5\n\n ```shell\n pip install git+https://github.com/hect0x7/JMComic-Crawler-Python\n ```\n\n## \u5feb\u901f\u4e0a\u624b\n\n### 1. \u4e0b\u8f7d\u672c\u5b50\u65b9\u6cd5\n\n\u53ea\u9700\u8981\u4f7f\u7528\u5982\u4e0b\u4ee3\u7801\uff0c\u5c31\u53ef\u4ee5\u4e0b\u8f7d\u672c\u5b50`JM422866`\u7684\u6240\u6709\u7ae0\u8282\u7684\u56fe\u7247\uff1a\n\n```python\nimport jmcomic # \u5bfc\u5165\u6b64\u6a21\u5757\uff0c\u9700\u8981\u5148\u5b89\u88c5.\njmcomic.download_album('422866') # \u4f20\u5165\u8981\u4e0b\u8f7d\u7684album\u7684id\uff0c\u5373\u53ef\u4e0b\u8f7d\u6574\u4e2aalbum\u5230\u672c\u5730.\n```\n\n\u4e0a\u9762\u7684 `download_album`\u65b9\u6cd5\u8fd8\u6709\u4e00\u4e2a\u53c2\u6570`option`\uff0c\u53ef\u7528\u4e8e\u63a7\u5236\u4e0b\u8f7d\u914d\u7f6e\uff0c\u914d\u7f6e\u5305\u62ec\u7981\u6f2b\u57df\u540d\u3001\u7f51\u7edc\u4ee3\u7406\u3001\u56fe\u7247\u683c\u5f0f\u8f6c\u6362\u3001\u63d2\u4ef6\u7b49\u7b49\u3002\n\n\u4f60\u53ef\u80fd\u9700\u8981\u8fd9\u4e9b\u914d\u7f6e\u9879\u3002\u63a8\u8350\u4f7f\u7528\u914d\u7f6e\u6587\u4ef6\u521b\u5efaoption\uff0c\u7528option\u4e0b\u8f7d\u672c\u5b50\uff0c\u89c1\u4e0b\u7ae0\uff1a\n\n### 2. \u4f7f\u7528option\u914d\u7f6e\u6765\u4e0b\u8f7d\u672c\u5b50\n\n1. \u9996\u5148\uff0c\u521b\u5efa\u4e00\u4e2a\u914d\u7f6e\u6587\u4ef6\uff0c\u5047\u8bbe\u6587\u4ef6\u540d\u4e3a `option.yml`\n\n \u8be5\u6587\u4ef6\u6709\u7279\u5b9a\u7684\u5199\u6cd5\uff0c\u4f60\u9700\u8981\u53c2\u8003\u8fd9\u4e2a\u6587\u6863 \u2192 [\u914d\u7f6e\u6587\u4ef6\u6307\u5357](./assets/docs/sources/option_file_syntax.md)\n\n \u4e0b\u9762\u505a\u4e00\u4e2a\u6f14\u793a\uff0c\u5047\u8bbe\u4f60\u9700\u8981\u628a\u4e0b\u8f7d\u7684\u56fe\u7247\u8f6c\u4e3apng\u683c\u5f0f\uff0c\u4f60\u5e94\u8be5\u628a\u4ee5\u4e0b\u5185\u5bb9\u5199\u8fdb`option.yml`\n\n```yml\ndownload:\n image:\n suffix: .png # \u8be5\u914d\u7f6e\u7528\u4e8e\u628a\u4e0b\u8f7d\u7684\u56fe\u7247\u8f6c\u4e3apng\u683c\u5f0f\n```\n\n2. \u7b2c\u4e8c\u6b65\uff0c\u8fd0\u884c\u4e0b\u9762\u7684python\u4ee3\u7801\n\n```python\nimport jmcomic\n\n# \u521b\u5efa\u914d\u7f6e\u5bf9\u8c61\noption = jmcomic.create_option_by_file('\u4f60\u7684\u914d\u7f6e\u6587\u4ef6\u8def\u5f84\uff0c\u4f8b\u5982 D:/option.yml')\n# \u4f7f\u7528option\u5bf9\u8c61\u6765\u4e0b\u8f7d\u672c\u5b50\njmcomic.download_album(422866, option)\n# \u7b49\u4ef7\u5199\u6cd5: option.download_album(422866)\n```\n\n### 3. \u4f7f\u7528\u547d\u4ee4\u884c\n> \u5982\u679c\u53ea\u60f3\u4e0b\u8f7d\u672c\u5b50\uff0c\u4f7f\u7528\u547d\u4ee4\u884c\u4f1a\u6bd4\u4e0a\u8ff0\u65b9\u5f0f\u66f4\u52a0\u7b80\u5355\u76f4\u63a5\n> \n> \u4f8b\u5982\uff0c\u5728windows\u4e0a\uff0c\u76f4\u63a5\u6309\u4e0bwin+r\u952e\uff0c\u8f93\u5165jmcomic xxx\u5c31\u53ef\u4ee5\u4e0b\u8f7d\u672c\u5b50\u3002\n\n\u793a\u4f8b\uff1a\n\n\u4e0b\u8f7d\u672c\u5b50422866\u7684\u547d\u4ee4\n\n```sh\njmcomic 422866\n```\n\u540c\u65f6\u4e0b\u8f7d\u672c\u5b50123, \u7ae0\u8282456\u7684\u547d\u4ee4\n```sh\njmcomic 123 p456\n```\n\n\u547d\u4ee4\u884c\u6a21\u5f0f\u4e5f\u652f\u6301\u81ea\u5b9a\u4e49option\uff0c\u4f60\u53ef\u4ee5\u4f7f\u7528\u73af\u5883\u53d8\u91cf\u6216\u8005\u547d\u4ee4\u884c\u53c2\u6570\uff1a\n\na. \u901a\u8fc7\u547d\u4ee4\u884c--option\u53c2\u6570\u6307\u5b9aoption\u6587\u4ef6\u8def\u5f84\n\n```sh\njmcomic 123 --option=\"D:/a.yml\"\n```\n\nb. \u914d\u7f6e\u73af\u5883\u53d8\u91cf `JM_OPTION_PATH` \u4e3aoption\u6587\u4ef6\u8def\u5f84\uff08\u63a8\u8350\uff09\n\n> \u8bf7\u81ea\u884cgoogle\u914d\u7f6e\u73af\u5883\u53d8\u91cf\u7684\u65b9\u5f0f\uff0c\u6216\u4f7f\u7528powershell\u547d\u4ee4: `setx JM_OPTION_PATH \"D:/a.yml\"` \u91cd\u542f\u540e\u751f\u6548\n\n```sh\njmcomic 123\n```\n\n\n\n## \u8fdb\u9636\u4f7f\u7528\n\n\u8bf7\u67e5\u9605\u6587\u6863\u9996\u9875\u2192[jmcomic.readthedocs.io](https://jmcomic.readthedocs.io/zh-cn/latest)\n\n\uff08\u63d0\u793a\uff1ajmcomic\u63d0\u4f9b\u4e86\u5f88\u591a\u4e0b\u8f7d\u914d\u7f6e\u9879\uff0c\u5927\u90e8\u5206\u7684\u4e0b\u8f7d\u9700\u6c42\u4f60\u90fd\u53ef\u4ee5\u5c1d\u8bd5\u5bfb\u627e\u76f8\u5173\u914d\u7f6e\u9879\u6216\u63d2\u4ef6\u6765\u5b9e\u73b0\u3002\uff09\n\n## \u9879\u76ee\u7279\u70b9\n\n- **\u7ed5\u8fc7Cloudflare\u7684\u53cd\u722c\u866b**\n- **\u5b9e\u73b0\u7981\u6f2bAPP\u63a5\u53e3\u6700\u65b0\u7684\u52a0\u89e3\u5bc6\u7b97\u6cd5 (1.6.3)**\n- \u7528\u6cd5\u591a\u6837\uff1a\n\n - GitHub\n Actions\uff1a\u7f51\u9875\u4e0a\u76f4\u63a5\u8f93\u5165\u672c\u5b50id\u5c31\u80fd\u4e0b\u8f7d\uff08[\u6559\u7a0b\uff1a\u4f7f\u7528GitHub Actions\u4e0b\u8f7d\u7981\u6f2b\u672c\u5b50](./assets/docs/sources/tutorial/1_github_actions.md)\uff09\n - \u547d\u4ee4\u884c\uff1a\u65e0\u9700\u5199Python\u4ee3\u7801\uff0c\u7b80\u5355\u6613\u7528\uff08[\u6559\u7a0b\uff1a\u4f7f\u7528\u547d\u4ee4\u884c\u4e0b\u8f7d\u7981\u6f2b\u672c\u5b50](./assets/docs/sources/tutorial/2_command_line.md)\uff09\n - Python\u4ee3\u7801\uff1a\u6700\u672c\u8d28\u3001\u6700\u5f3a\u5927\u7684\u4f7f\u7528\u65b9\u5f0f\uff0c\u9700\u8981\u4f60\u6709\u4e00\u5b9a\u7684python\u7f16\u7a0b\u57fa\u7840\n- \u652f\u6301**\u7f51\u9875\u7aef**\u548c**\u79fb\u52a8\u7aef**\u4e24\u79cd\u5ba2\u6237\u7aef\u5b9e\u73b0\uff0c\u53ef\u901a\u8fc7\u914d\u7f6e\u5207\u6362\uff08**\u79fb\u52a8\u7aef\u4e0d\u9650ip\u517c\u5bb9\u6027\u597d\uff0c\u7f51\u9875\u7aef\u9650\u5236ip\u5730\u533a\u4f46\u6548\u7387\u9ad8**\uff09\n- \u652f\u6301**\u81ea\u52a8\u91cd\u8bd5\u548c\u57df\u540d\u5207\u6362**\u673a\u5236\n- **\u591a\u7ebf\u7a0b\u4e0b\u8f7d**\uff08\u53ef\u7ec6\u5316\u5230\u4e00\u56fe\u4e00\u7ebf\u7a0b\uff0c\u6548\u7387\u6781\u9ad8\uff09\n- **\u53ef\u914d\u7f6e\u6027\u5f3a**\n\n - \u4e0d\u914d\u7f6e\u4e5f\u80fd\u4f7f\u7528\uff0c\u5341\u5206\u65b9\u4fbf\n - \u914d\u7f6e\u53ef\u4ee5\u4ece\u914d\u7f6e\u6587\u4ef6\u751f\u6210\uff0c\u652f\u6301\u591a\u79cd\u6587\u4ef6\u683c\u5f0f\n - \u914d\u7f6e\u70b9\u6709\uff1a`\u8bf7\u6c42\u57df\u540d` `\u5ba2\u6237\u7aef\u5b9e\u73b0` `\u662f\u5426\u4f7f\u7528\u78c1\u76d8\u7f13\u5b58` `\u540c\u65f6\u4e0b\u8f7d\u7684\u7ae0\u8282/\u56fe\u7247\u6570\u91cf` `\u56fe\u7247\u683c\u5f0f\u8f6c\u6362` `\u4e0b\u8f7d\u8def\u5f84\u89c4\u5219` `\u8bf7\u6c42\u5143\u4fe1\u606f\uff08headers,cookies,proxies\uff09`\n \u7b49\n- **\u53ef\u6269\u5c55\u6027\u5f3a**\n\n - \u652f\u6301\u81ea\u5b9a\u4e49\u672c\u5b50/\u7ae0\u8282/\u56fe\u7247\u4e0b\u8f7d\u524d\u540e\u7684\u56de\u8c03\u51fd\u6570\n - \u652f\u6301\u81ea\u5b9a\u4e49\u7c7b\uff1a`Downloader\uff08\u8d1f\u8d23\u8c03\u5ea6\uff09` `Option\uff08\u8d1f\u8d23\u914d\u7f6e\uff09` `Client\uff08\u8d1f\u8d23\u8bf7\u6c42\uff09` `\u5b9e\u4f53\u7c7b`\u7b49\n - \u652f\u6301\u81ea\u5b9a\u4e49\u65e5\u5fd7\u3001\u5f02\u5e38\u76d1\u542c\u5668\n - **\u652f\u6301Plugin\u63d2\u4ef6\uff0c\u53ef\u4ee5\u65b9\u4fbf\u5730\u6269\u5c55\u529f\u80fd\uff0c\u4ee5\u53ca\u4f7f\u7528\u522b\u4eba\u7684\u63d2\u4ef6\uff0c\u76ee\u524d\u5185\u7f6e\u63d2\u4ef6\u6709**\uff1a\n - `\u767b\u5f55\u63d2\u4ef6`\n - `\u786c\u4ef6\u5360\u7528\u76d1\u63a7\u63d2\u4ef6`\n - `\u53ea\u4e0b\u8f7d\u65b0\u7ae0\u63d2\u4ef6`\n - `\u538b\u7f29\u6587\u4ef6\u63d2\u4ef6`\n - `\u4e0b\u8f7d\u7279\u5b9a\u540e\u7f00\u56fe\u7247\u63d2\u4ef6`\n - `\u53d1\u9001QQ\u90ae\u4ef6\u63d2\u4ef6`\n - `\u81ea\u52a8\u4f7f\u7528\u6d4f\u89c8\u5668cookies\u63d2\u4ef6`\n - `\u5bfc\u51fa\u6536\u85cf\u5939\u4e3acsv\u6587\u4ef6\u63d2\u4ef6`\n - `\u5408\u5e76\u6240\u6709\u56fe\u7247\u4e3apdf\u6587\u4ef6\u63d2\u4ef6`\n - `\u5408\u5e76\u6240\u6709\u56fe\u7247\u4e3a\u957f\u56fepng\u63d2\u4ef6`\n - `\u91cd\u590d\u6587\u4ef6\u68c0\u6d4b\u5220\u9664\u63d2\u4ef6`\n - `\u7f51\u9875\u89c2\u770b\u672c\u5730\u7ae0\u8282\u63d2\u4ef6`\n\n## \u4f7f\u7528\u5c0f\u8bf4\u660e\n\n* Python >= 3.7\uff0c\u5efa\u8bae3.9\u4ee5\u4e0a\uff0c\u56e0\u4e3ajmcomic\u7684\u4f9d\u8d56\u5e93\u53ef\u80fd\u4f1a\u4e0d\u652f\u63013.9\u4ee5\u4e0b\u7684\u7248\u672c\u3002\n* \u4e2a\u4eba\u9879\u76ee\uff0c\u6587\u6863\u548c\u793a\u4f8b\u4f1a\u6709\u4e0d\u53ca\u65f6\u4e4b\u5904\uff0c\u53ef\u4ee5Issue\u63d0\u95ee\n\n## \u9879\u76ee\u6587\u4ef6\u5939\u4ecb\u7ecd\n\n* .github\uff1aGitHub Actions\u914d\u7f6e\u6587\u4ef6\n* assets\uff1a\u5b58\u653e\u4e00\u4e9b\u975e\u4ee3\u7801\u7684\u8d44\u6e90\u6587\u4ef6\n\n * docs\uff1a\u9879\u76ee\u6587\u6863\n * option\uff1a\u5b58\u653e\u914d\u7f6e\u6587\u4ef6\n* src\uff1a\u5b58\u653e\u6e90\u4ee3\u7801\n\n * jmcomic\uff1a`jmcomic`\u6a21\u5757\n* tests\uff1a\u6d4b\u8bd5\u76ee\u5f55\uff0c\u5b58\u653e\u6d4b\u8bd5\u4ee3\u7801\uff0c\u4f7f\u7528unittest\n* usage\uff1a\u7528\u6cd5\u76ee\u5f55\uff0c\u5b58\u653e\u793a\u4f8b/\u4f7f\u7528\u4ee3\u7801\n\n## \u611f\u8c22\u4ee5\u4e0b\u9879\u76ee\n\n### \u56fe\u7247\u5206\u5272\u7b97\u6cd5\u4ee3\u7801+\u7981\u6f2b\u79fb\u52a8\u7aefAPI\n\n<a href=\"https://github.com/tonquer/JMComic-qt\">\n <picture>\n <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://github-readme-stats.vercel.app/api/pin/?username=tonquer&repo=JMComic-qt&theme=radical\" />\n <source media=\"(prefers-color-scheme: light)\" srcset=\"https://github-readme-stats.vercel.app/api/pin/?username=tonquer&repo=JMComic-qt\" />\n <img alt=\"Repo Card\" src=\"https://github-readme-stats.vercel.app/api/pin/?username=tonquer&repo=JMComic-qt\" />\n </picture>\n</a>\n",
"bugtrack_url": null,
"license": "MIT License\n \n Copyright (c) 2023 hect0x7\n \n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n \n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n \n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n ",
"summary": "Python API For JMComic (\u7981\u6f2b\u5929\u5802)",
"version": "2.6.4",
"project_urls": {
"Documentation": "https://jmcomic.readthedocs.io",
"Homepage": "https://github.com/hect0x7/JMComic-Crawler-Python"
},
"split_keywords": [
"python",
" jmcomic",
" 18comic",
" \u7981\u6f2b\u5929\u5802",
" nsfw"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "37d001cd2e002c94dd2055af83d134a633416229e1b06d0f173eb20cf02aa713",
"md5": "fe3ab9dd672b9369fd65ca9271922049",
"sha256": "60ce42f2c8ab046e2da9292e9cbd4927cc2e447c7b8b3f83036a556e79d69a12"
},
"downloads": -1,
"filename": "jmcomic-2.6.4-py3-none-any.whl",
"has_sig": false,
"md5_digest": "fe3ab9dd672b9369fd65ca9271922049",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 69984,
"upload_time": "2025-07-17T17:02:47",
"upload_time_iso_8601": "2025-07-17T17:02:47.892069Z",
"url": "https://files.pythonhosted.org/packages/37/d0/01cd2e002c94dd2055af83d134a633416229e1b06d0f173eb20cf02aa713/jmcomic-2.6.4-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "76c1e6e46b335ece6f70a04f5bbfafa13359604a3e89c658512782243268a140",
"md5": "4052ab708c81b9af939e4ed78d647043",
"sha256": "d319f69ee8b7d69db54c30f21c8256633a797ffa97a37efd15bc1bcd3f993fcb"
},
"downloads": -1,
"filename": "jmcomic-2.6.4.tar.gz",
"has_sig": false,
"md5_digest": "4052ab708c81b9af939e4ed78d647043",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 67203,
"upload_time": "2025-07-17T17:02:49",
"upload_time_iso_8601": "2025-07-17T17:02:49.179010Z",
"url": "https://files.pythonhosted.org/packages/76/c1/e6e46b335ece6f70a04f5bbfafa13359604a3e89c658512782243268a140/jmcomic-2.6.4.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-17 17:02:49",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "hect0x7",
"github_project": "JMComic-Crawler-Python",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "jmcomic"
}