a group of crawlers for private tracker website
Project description
PT-Crawler
写这个项目, 一是自己有需求, 二是好久没写代码了, 巩固一下. 如果这个项目对你有帮助, 可以 star + fork 二连, 如果你发现一些问题或者有一些其他想法, 也欢迎提 issue.
现在完成了岛/馒头/拉面等站点的 API, 以后会加入其他的功能, 以及兼容更多的站点.
该项目的初衷是为了刷流, 因此只开发了刷流相关的 API, 如果需要其他的 API, 也可以提 issue 给我.
目前 pt-crawler 支持的站点有:
| 别称 | 类 |
|---|---|
| 岛 | crawlers.CHDBits |
| 馒头 | crawlers.MTeam |
| 拉面 | crawlers.FSM |
| 套套 | crawlers.TTG |
| 猫站 | crawlers.PTerClub |
| 红叶 | crawlers.RedLeaves |
| 皇后 | crawlers.OpenCD |
| 我堡 | crawlers.OurBits |
| 你堡 | crawlers.UBits |
| 幼儿园 | crawlers.U2 |
| 柠檬 | crawlers.LemonHD |
安装
pip3 install pt-crawler
或者
python3 -m pip install pt-crawler
使用
这里以岛为例, 来说明如何使用 pt-crawler. 其他的类 API 接口与 CHDBits 一致.
-
导入
CHDBits类, 并进行实例化.>>> from crawlers import CHDBits >>> headers = {'Cookie': 'your cookie, you can get it from browser'} >>> chdbits = CHDBits(headers=headers)
注意, 不同的站点, 要求的
headers是不同的. -
调用
get_user, 验证权限是否正常.>>> chdbits.get_user() User(user_id='your_id', user_name='your_name', upload_bytes=123456789, download_bytes=123456789, email='email@qq.com', bonus=233.33, passkey='****')
如果网络和权限都没问题,
get_user函数会返回User对象,User对象包含登录用户的基本信息:user_id代表用户的 UID.user_name表示用户的用户名.email表示用户注册邮箱地址.upload_bytes表示用户上传量, 单位 Byte.download_bytes表示用户下载量, 单位 Byte.bonus表示用户的魔力值.passkey表示你自己的 passkey, 这个字段是可能是None, 比如馒头, 网站上不直接提供 passkey, 只能通过邮件告知 passkey, 难以通过爬虫获取.
-
调用
get_torrents获取种子列表.>>> torrents = chdbits.get_torrents() >>> len(torrents) 100 >>> torrents[0] Torrent(torrent_id='393088', torrent_name='Le Theoreme de Marguerite 2023 1080p Bluray REMUX AVC DTS-HDMA5.1-CHD', size=31643171553, seeders=107, leechers=6, hit_and_run=259200, promotion=Promotion(upload_ratio=1.0, download_ratio=0.0), crawler=<crawlers.chdbits.CHDBits object at 0x1074bf520>)
函数
get_torrents会返回一个List, 其中元素类型为Torrent,Torrent对象包含种子的基本信息:torrent_id表示种子 ID.torrent_name表示种子的英文名称.size表示种子大小, 单位 Byte.seeders表示种子做种人数.leechers表示种子下载人数.hit_and_run表示种子 H&R 需要保种的时间, 单位秒, 如果这个字段为0表示该种子为非 H&R 种子.promotion表示种子的促销策略, 它包含两个字段:upload_ratio表示上传促销, 比如一个种子是 2xfree, 该字段的值为2.download_ratio表示下载促销, 比如一个种子是 50%, 该字段为0.5, 如果是 free 的种子, 该字段为0.
值得一提的是
get_torrents函数有一个参数pages, 表示返回几页的种子, 默认值是1.>>> torrents = chdbits.get_torrents(pages=3) >>> len(torrents) 300
-
如果你知道种子 ID, 可以调用
get_torrent函数获取某一个种子详情.>>> chdbits.get_torrent('393088') Torrent(torrent_id='393088', torrent_name='Le Theoreme de Marguerite 2023 1080p Bluray REMUX AVC DTS-HDMA5.1-CHD', size=31643171553, seeders=106, leechers=7, hit_and_run=259200, promotion=Promotion(upload_ratio=1.0, download_ratio=0.0), crawler=<crawlers.chdbits.CHDBits object at 0x1074bf520>)
-
下载种子有两种方式, 第一种方式是调用
CHDBits类的download_torrent方法.>>> chdbits.download_torrent(torrent_id='393088', file_path='demo.torrent') True
第二种方法是调用
Torrent对象的save方法.>>> torrent = chdbits.get_torrent(torrent_id='393088') >>> torrent.save('demo.torrent') True
CHDBits对象的download_torrent函数和Torrent对象的save方法在执行成功后会返回True, 如果失败, 会返回False. -
查询自己活动中的任务, 可以调用
get_tasks函数.>>> tasks = chdbits.get_tasks() >>> tasks[0] Task(torrent_id='393202', torrent_name='The Yangtze River 2024 2160p HQ WEB-DL H265 60fps DDP5.1-CHDWEB', status=<Status.LEECHING: 'leeching'>)
函数
get_tasks返回一个List, 其中元素类型为Task,Task对象包含任务的基本信息:torrent_id表示种子的 ID.torrent_name表示种子的英文名称.status表示任务状态,leeching表示正在下载,seeding表示正在做种.
-
如果要使用代理访问某个站点, 可以使用
proxy参数来配置代理.>>> chdbits = CHDBits(headers=headers, proxy='http://localhost:1926')
-
如果要限制访问某个站点的频率, 可以设置
qps参数.>>> chdbits = CHDBits(headers=headers, qps=3)
qps = 3表示一秒钟最多访问 3 次, 如果你没设置qps参数, 那么则不会限制频率, 会短时间激增网站负载, 容易被封. -
如果一个站有多个域名, 你可以通过
base_url参数来修改默认值.>>> chdbits = CHDBits(headers=headers, base_url='https://hello.world')
注意:
base_url不要以/结尾. -
你可以为
CHDBits指定一个日志对象, 这样CHDBits在运行的过程中, 会把异常信息输出到日志中.>>> from loguru import logger >>> chdbits = CHDBits(headers=headers, logger=logger)
开发
添加新的爬虫类
在 crawlers 文件夹中新建一个爬虫类文件. 在该文件中实现爬虫类, 该爬虫类必须继承 crawlers.base.Crawler 类, 并实现其所有抽象方法.
在 crawlers/__init__.py 文件中引入你新建的爬虫类, 方便其他人导入.
编写测试用例
本工程使用的自动化测试框架为 pytest.
在 testcases 文件夹中新建对应的爬虫类的单元测试, 并实现所有抽象方法的测试用例.
执行测试用例
首先运行 pip3 install -r testcases/requirements.txt 来安装运行测试必要的库, 然后执行以下命令来执行用例.
$ pytest [--proxy <proxy>] --cov crawlers testcases
其中 --proxy 为可选参数, 如果需要通过代理访问站点, 请添加代理. 目前代理只支持 HTTP 和 HTTPS 两种类型.
静态检查
提交前请使用 mypy 和 pylint 对工程进行静态检查, 如果有任何静态问题, 请在提交前修复, 本项目对静态缺陷零容忍.
$ mypy crawlers
Success: no issues found in 7 source files
$ pylint crawlers
Your code has been rated at 10.00/10 (previous run: 10.00/10, +0.00)
该项目也配置了 CI/CD, 每次提交都会自动执行所有测试用例以及静态检查.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pt-crawler-1.0.19.tar.gz.
File metadata
- Download URL: pt-crawler-1.0.19.tar.gz
- Upload date:
- Size: 19.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.25.1 requests-toolbelt/0.10.1 urllib3/1.26.15 tqdm/4.66.1 importlib-metadata/5.0.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
be97518d82cebeafd001461fa50946f542f8614704d4a2e1e411a1c7de38f0e4
|
|
| MD5 |
71d153408c6cfcf7b9b9bceb2d688bba
|
|
| BLAKE2b-256 |
3ea03c542846deacd1096f19c349848b039e38b2233f08882718249fd133334a
|
File details
Details for the file pt_crawler-1.0.19-py3-none-any.whl.
File metadata
- Download URL: pt_crawler-1.0.19-py3-none-any.whl
- Upload date:
- Size: 35.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.25.1 requests-toolbelt/0.10.1 urllib3/1.26.15 tqdm/4.66.1 importlib-metadata/5.0.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1004c722ab0db85985c3e95a0c877e0eb1da8e06384fa34d795688bf524f9c18
|
|
| MD5 |
f7f78da15501cb0363193e728fd82f61
|
|
| BLAKE2b-256 |
87ba4b79ecd0a4eb1510998529a540f59ac4cd7a9ee9abec754fdd473cd60710
|