林适畴优秀作者
原创内容 来源:小居数码网 时间:2024-08-10 09:00:01 阅读() 收藏:51 分享:76 爆
导读:您正在阅读的是关于【数码知识】的问题,本文由科普作家协会,生活小能手,著名生活达人等整理监督编写。本文有1454个文字,大小约为6KB,预计阅读时间4分钟。
磁力链接
现在我们使用迅雷等工具下载资源的时候,基本上都只需要一个叫做磁力链接的东西就可以了,非常方便。
磁力链接是对等网络中进行信息检索和下载文档的电脑程序。和基于“位置”连接的统一资源定位符不同,磁力链接是基于元数据文件内容,属于统一资源名称。也就是说,磁力链接不基于文档的 IP 地址或定位符,而是在分布式数据库中,通过散列函数值来识别、搜索来下载文档。因为不依赖一个处于启动状态的主机来下载文档,所以特别适用没有中心服务器的对等网络。
磁力链接格式类似于 :
magnet:?xt=urn:btih:E7FC73D9E20697C6C440203F5884EF52F9E4BD28
分解一下这个链接
一般来讲,一个磁力链接只需要上面两个参数即可找到唯一对应的资源。也有其他的可选参数提供更加详细的信息。
种子/DHT
通过磁力就可以获取种子文件从而进行下载,这跟直接使用种子下载时一个道理的,只是少了从磁力到种子文件的一个过程而已。
BitTorrent 协议的种子文件可以保存一组文件的元数据。这种格式的文件被 BitTorrent 协议所定义。扩展名一般为“.torrent”。BitTorrent 使用”分布式哈希表”(DHT)来为无 tracker 的种子(torrents)存储 peer 之间的联系信息。这样每个 peer 都成了 tracker。这个协议基于 Kademila 网络并且在 UDP 上实现。
DHT 由节点组成,它存储了 peer 的位置。BitTorrent 客户端包含一个 DHT 节点,这个节点用来联系 DHT 中其他节点,从而得到 peer 的位置,进而通过 BitTorrent 协议下载。
务实的实践
项目来源
一般来讲到 Python 爬取,大家的第一印象可能就是 requests/aiohttp,或者是 scrapy/pyspider 等爬虫框架。基本上都是从指定的 HTML 页面爬取信息。我有一个项目 torrent-cli(github.com/chenjiandongx/torrent-cli) 就是一个从资源网站上爬取磁力信息的工具。
然而我想自给自足获取磁力种子,Google 了一番,发现大家基本上的代码都是从 simDHT(github.com/fanpei91/simDHT)这个项目来的,首先这个项目很棒,但是有个问题就是代码实现细节基本没有一行注释且不兼容 Python3。而很多网上同类的代码基本上也是对这个照搬....
所以我知道我要开始干活了
经过一波 happy coding 之后
项目结构
核心代码
从 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 网速阿里云服务器跑一下,哎....
最后兜兜转转用到了 aria2 发现效率还可以。这里利用多线程跑一个命令。所以要先把 aria2 安装到你的 PATH 中,具体参考官网介绍。
有图有真相
不过我还是希望大家铭记下面这 24 字箴言
辅助代码
如何使用
获取源码及安装依赖环境
$ 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写的吗)的全部内容,希望可以帮助到你,想了解更多关于数码知识的问题,欢迎关注我们,并收藏,转发,分享。
94%的朋友还想知道的:
(555)个朋友认为回复得到帮助。
部分文章信息来源于以及网友投稿,转载请说明出处。
本文标题:利用Python爬取磁力种子链接(磁力搜索是python写的吗):http://sjzlt.cn/shuma/154233.html