0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是磁力链接?如何用Python获取磁力种子?

马哥Linux运维 来源:未知 作者:工程师郭婷 2018-08-05 09:08 次阅读

磁力链接

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

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

磁力链接格式类似于 :

magnet:?xt=urn:btih:E7FC73D9E20697C6C440203F5884EF52F9E4BD28

分解一下这个链接

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-cli

127.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次方为标志的社区。

有图有真相

辅助代码

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 -h

usage: manage.py [-h][-s][-m][-p]

start manage.py with flag.

optional arguments:

-h,--help show this help message andexit-s run start_server func.

-m run magnet2torrent func

-p run parse_torrent func

深刻的感悟

自我学编程以来,我一直都是属于兴趣驱动的,对某种技术感兴趣的话就会花时间去研究去尝试。想成为一个有趣的人,去做一些有趣的事,真心觉得能把脑海里的想法转变为代码实现是件很棒的事,即使可能这件事在别人看来并没有什么了不起。技术发展变化总是那么快,不紧跟着可能不小心就掉队了。所以希望每个真心热爱编程的人都能不忘初心,永远保持对新技术的热情,永远能从编码中找到乐趣。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 服务器
    +关注

    关注

    12

    文章

    8017

    浏览量

    82212
  • 客户端
    +关注

    关注

    1

    文章

    281

    浏览量

    16271

原文标题:用Python获取磁力种子

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    磁力穿梭装置的工作原理#电子

    磁力
    未来加油dz
    发布于 :2023年04月15日 16:29:25

    磁力

    磁力计最新资料,全心奉献
    发表于 09-01 18:16

    磁力眩晕频率射线

    磁力眩晕频率射线 有人听说过这东西没有 今天在网上看到很好奇
    发表于 10-26 18:26

    如何处理磁力计HMC5883L获取的三轴数据?

    用HMC5883L来矫正陀螺仪使用四元数法来求偏航角,想问问如何处理磁力计HMC5883L获取的三轴数据?
    发表于 07-25 19:44

    磁力驱动泵是什么?

    磁力偶合器的一半(内磁铁)装于泵轴上,并以非铁磁性材料制成的隔离罩密封在泵体内;另一半(外磁铁)装于电机轴上,在隔离罩外以磁力带动内磁铁旋转驱动泵工作。故无泄漏。
    发表于 10-25 09:10

    怎样去计算线圈的磁力矩呢

    如何去判断磁力矩的方向?怎样去计算线圈的磁力矩呢?
    发表于 10-09 09:31

    磁力泵的工作原理

    磁力泵的工作原理 磁力泵由泵、磁力传动器、电动机三部分组成。关键部件磁力传动器由外磁转子、内磁转子及不导磁的隔离套组成。
    发表于 12-07 10:00 2043次阅读

    什么是磁力滤镜

    什么是磁力滤镜   磁力滤镜是并不是单一的某种滤镜,而是一种安装滤镜的方式,它是目前市面上比较新颖的产品,所以笔者将其单独列出。大家知道,目前市面
    发表于 01-30 14:45 629次阅读

    简述磁力泵的工作原理

      磁力传动离心泵(简称磁力泵)是应用现代磁力学原理,利用永磁体的磁力传动实现扭矩的无接触传递的一种新型泵,也就是电机带动外转子(即外磁钢)总成旋转时,通过磁
    发表于 10-30 16:10 2063次阅读

    磁力泵密封圈的加工工艺

    磁力泵生产加工工艺,磁力泵加工过程中的特殊处理及说明, 磁力泵密封圈的加工工艺
    发表于 01-28 17:28 1353次阅读

    磁力齿轮发展综述

    磁力齿轮具有结构简单、无摩擦、无油污、少维护和自动过载保护等特点,是一种较理想的传动设备。本文综述了国内外有关磁力齿轮的研究,按照时间顺序回顾了其发展历程,总结归纳了其发展脉络和演进过程;横向比较
    发表于 03-22 15:45 0次下载
    <b class='flag-5'>磁力</b>齿轮发展综述

    磁力启动器工作原理_磁力启动器作用

    本文主要阐述了磁力启动器工作原理及磁力启动器的作用。
    的头像 发表于 11-20 10:02 3.1w次阅读

    磁力泵结的工作原理

    磁力传动泵,简称磁力泵。与屏蔽泵一样,结构上只有静密封没有动密封。所以可以在输送液体时无泄漏。用在石化系统输送易燃、易爆、易挥发、有毒、有腐蚀及贵重液体等。    磁力泵结的工作原理 磁力
    的头像 发表于 07-30 11:42 1882次阅读

    磁力泵结的工作原理

    磁力传动泵,简称磁力泵。与屏蔽泵一样,结构上只有静密封没有动密封。所以可以在输送液体时无泄漏。用在石化系统输送易燃、易爆、易挥发、有毒、有腐蚀及贵重液体等。    磁力泵结的工作原理 磁力
    的头像 发表于 08-05 14:32 2259次阅读

    高性能磁力

    技术日新月异,我们每天都走在创新的路上,获取前沿的领域知识,并转化为自己的成果,创造出更适合用户的产品。 在这一路上,贸泽电子始终会伴你左右,并随时提供新的采购情报,希望借此能为你带来更多创新和灵感
    的头像 发表于 09-20 08:10 390次阅读
    高性能<b class='flag-5'>磁力</b>计