首页 » 网站推广 » infohash转换磁力php技巧_运用Python爬取磁力种子链接一言不合就开车

infohash转换磁力php技巧_运用Python爬取磁力种子链接一言不合就开车

访客 2024-11-15 0

扫一扫用手机浏览

文章目录 [+]

现在我们利用迅雷等工具下载资源的时候,基本上都只须要一个叫做磁力链接的东西就可以了,非常方便。

有须要Python学习资料的小伙伴吗?

磁力链接是对等网络中进行信息检索和下载文档的电脑程序。
和基于“位置”连接的统一资源定位符不同,磁力链接是基于元数据文件内容,属于统一资源名称。
也便是说,磁力链接不基于文档的 IP 地址或定位符,而是在分布式数据库中,通过散列函数值来识别、搜索来下载文档。
由于不依赖一个处于启动状态的主机来下载文档,以是特殊适用没有中央做事器的对等网络。

磁力链接格式类似于 :

infohash转换磁力php技巧_运用Python爬取磁力种子链接一言不合就开车

magnet:?xt=urn:btih:E7FC73D9E20697C6C440203F5884EF52F9E4BD28

infohash转换磁力php技巧_运用Python爬取磁力种子链接一言不合就开车
(图片来自网络侵删)

分解一下这个链接

magnet:协议名。
xt:exact topic 的缩写,表示资源定位点。
BTIH(BitTorrent Info Hash)表示哈希方法名,这里还可以利用 SHA1 和 MD5。
这个值是文件的标识符,是不可短缺的。

一样平常来讲,一个磁力链接只须要上面两个参数即可找到唯一对应的资源。
也有其他的可选参数供应更加详细的信息。

dn:display name 的缩写,表示向用户显示的文件名。
tr:tracker 的缩写,表示 tracker 做事器的地址。
kt: 关键字,更笼统的搜索,指定搜索关键字而不是特定文件。
mt:文件列表,链接到一个包含磁力链接的元文件 (MAGMA - MAGnet MAnifest)。

种子/DHT

通过磁力就可以获取种子文件从而进行下载,这跟直策应用种子下载时一个道理的,只是少了从磁力到种子文件的一个过程而已。

BitTorrent 协议的种子文件可以保存一组文件的元数据。
这种格式的文件被 BitTorrent 协议所定义。
扩展名一样平常为“.torrent”。
BitTorrent 利用”分布式哈希表”(DHT)来为无 tracker 的种子(torrents)存储 peer 之间的联系信息。
这样每个 peer 都成了 tracker。
这个协议基于 Kademila 网络并且在 UDP 上实现。

DHT 由节点组成,它存储了 peer 的位置。
BitTorrent 客户端包含一个 DHT 节点,这个节点用来联系 DHT 中其他节点,从而得到 peer 的位置,进而通过 BitTorrent 协议下载。

peer: 一个 TCP 端口上监听的客户端/做事器,它实现了 BitTorrent 协议。
节点: 一个 UDP 端口上监听的客户端/做事器,它实现了 DHT(分布式哈希表) 协议。
如果对 DHT 协议感兴趣的话一定要看下 DHT 协议 的详细内容,这里有 中文翻译版本。
(想要彻底读懂项目的话一定要先理解该协议,代码都是基于该协议实现的)

务实的实践

项目来源

一样平常来讲到 Python 爬取,大家的第一印象可能便是 requests/aiohttp,或者是 scrapy/pyspider 等爬虫框架。
基本上都是从指定的 HTML 页面爬取信息。
我有一个项目 torrent-cli(github.com/chenjiandongx/torrent-cli) 便是一个从资源网站上爬取磁力信息的工具。

然而我想自给自足获取磁力种子,Google 了一番,创造大家基本上的代码都是从 simDHT(github.com/fanpei91/simDHT)这个项目来的,首先这个项目很棒,但是有个问题便是代码实现细节基本没有一行注释且不兼容 Python3。
而很多网上同类的代码基本上也是对这个照搬....

以是我知道我要开始干活了

经由一波 happy coding 之后

项目构造

核心代码

crawler.py

从 DHT 网络中获取磁力链接。
紧张是利用一些大型的做事器 tracker,伪装 DHT 节点,利用 UDP 协议加入到 DHT 网络中一波搜索以及和其他节点搞好关系,让他们也分享我点资源。
磁力数据存放在了 redis,利用 redis 的凑集特性来去重。
利用了多线程/多进程,用于提高爬取效率。
在我确当地机器(i7-7700HQ/16G 内存/8M 网速)跑了一下,效果还不错,4 小时爬了 100 万条磁力链接。

$ redis-cli127.0.0.1:6379> scard magnets(integer) 1137627

然后代码推送到我那台性能刁悍 1 核/2G 内存/1M 网速阿里云做事器跑一下,哎....

magnettotorrent_aria2c.py 利用 aria2 将磁力链接转换为种子文件。
考试测验了一些其他的办法将磁力转换为种子,但效果彷佛都不怎么空想。
利用过 libtorrent 的 Python 版本,不知道是我打开办法不对还是它本来效率就不高,反正愣是一个种子都没有转换成功。

末了兜兜转转用到了 aria2 创造效率还可以。
这里利用多线程跑一个命令。
以是要先把 aria2 安装到你的 PATH 中,详细参考官网先容。

parse_torrent.py 解析种子文件内容,同样也是利用了 bencoder 进行解码。
有了种子我们当然要看看到底是些什么资源了啦。
你说天下便是这么小,在我解析出来的几百个种子文件中,居然有几个都是来自那个以 2的10次方为标志的社区。

有图有原形

不过我还是希望大家铭记下面这 24 字箴言

赞助代码

database.py:封装了关于 redis 的数据操作,紧张是利用其凑集数据构造。
utils.py:一些工具函数

如何利用

获取源码及安装依赖环境

$ git clone https://github.com/chenjiandongx/magnet-dht.git$ cd magnet-dht$ pip install -r requirements.txt# 确保已经安装好 redis,redis 的详细配置可以在 database.py 里面修正。

运行项目

# 至于进程数量可以在 crawler.py 进行调度$ python manage.py -husage: manage.py [-h] [-s] [-m] [-p]start manage.py with flag.optional arguments: -h, --help show this help message and exit -s run start_server func. -m run magnet2torrent func -p run parse_torrent func

有须要Python学习资料的小伙伴吗?小编整理【一套Python资料、源码和PDF】,感兴趣者可以关注小编后私信学习资料(是关注后私信哦)反正闲着也是闲着呢,不如学点东西啦

标签:

相关文章

介绍直播新纪元,轻松进入直播的五大步骤

随着互联网技术的飞速发展,直播行业在我国逐渐崛起,越来越多的人选择通过直播这一新兴媒介展示自己、分享生活、传递价值。对于许多新手来...

网站推广 2025-01-03 阅读1 评论0

介绍相机美颜原理,科技与美学的完美结合

随着科技的发展,智能手机的摄像头功能日益强大,美颜相机成为了许多人拍照的首选。美颜相机不仅满足了人们对于美的追求,更在视觉上给人带...

网站推广 2025-01-03 阅读1 评论0

介绍磁铁的制造,科学与艺术的完美结合

磁铁,一种神秘的物质,自古以来就吸引了无数人的目光。它不仅具有独特的磁性,还能在工业、医疗、科研等领域发挥重要作用。磁铁是如何制造...

网站推广 2025-01-03 阅读1 评论0

介绍电瓶激活方法,让电池焕发新生

随着科技的不断发展,电动汽车逐渐成为人们出行的首选。而电瓶作为电动汽车的核心部件,其性能直接影响着车辆的续航里程和行驶体验。新购买...

网站推广 2025-01-03 阅读1 评论0