搜索网站源码分享pdf?网站源码扫描

大家好,今天来为大家解答搜索网站源码分享pdf这个问题的一些问题点,包括网站源码扫描也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~

磁力链接

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

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

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

磁力链接格式类似于:

magnet:?xt=urn:btih:E7FC73D9E20697C6C440203F5884EF52F9E4BD28

分解一下这个链接

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

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

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

种子/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。而很多网上同类的代码基本上也是对这个照搬….

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

经过一波happycoding之后

项目结构

核心代码

crawler.py

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

$redis\n-\ncli\n127.0\n.\n0.1\n:\n6379\n>\nscardmagnets\n(\ninteger\n)\n\n1137627\n

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

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

最后兜兜转转用到了aria2发现效率还可以。这里利用多线程跑一个命令。所以要先把aria2安装到你的PATH中,具体参考官网介绍。

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

有图有真相

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

辅助代码

database.py:封装了关于redis的数据操作,主要是利用其集合数据结构。utils.py:一些工具函数

如何使用

获取源码及安装依赖环境

$gitclonehttps\n:\n//github.com/chenjiandongx/magnet-dht.git\n$cdmagnet\n-\ndht\n$pipinstall\n-\nrrequirements\n.\ntxt\n至于进程数量可以在crawler.py进行调整$pythonmanage.py-h\nusage\n:\nmanage\n.\npy\n[-\nh\n]\n\n[-\ns\n]\n\n[-\nm\n]\n\n[-\np\n]\nstartmanage\n.\npy\nwith\nflag\n.\noptionalarguments\n:\n\n-\nh\n,\n\n–\nhelpshow\nthis\nhelpmessage\nand\n\nexit\n\n-\nsrunstart_serverfunc\n.\n\n-\nmrunmagnet2torrentfunc\n\n-\nprunparse_torrentfunc\n

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

如果你还想了解更多这方面的信息,记得收藏关注本站。

站内搜索