磁力搜索网站搭建3.2:数据获取

系列索引:磁力搜索网站搭建教程索引

上一篇:磁力搜索网站搭建3.1:数据保存

本篇介绍一下如何获取磁力链接数据。

磁力链接是获取不完的

我做不到从0开始,只能从之前的代码修改,之前的两个项目都是用Python,那就一条路走到黑。

原计划是打算基于别人的代码修改,经过测试,别人的代码无法实现获取数据和保存到数据库。数据库部分的代码与DHT部分代码有冲突,两者一起导致程序无法运行。

所以本系列采用的方式是别人的Python代码(就是保存到Redis的方式,毕竟已经用它获取了170万条数据了),然后用Python脚本将其解析保存到MySQL数据库中。

下面简单介绍一下Python版的原理和流程,后期会用C++写一个直接获取保存到MySQL的版本。

首先你要了解

从GitHub上面找了现成的:

asyncDHT使用MySQL数据库存储数据,但是我在Ubuntu20.04+MySQL+Python3.8.5上面没有没有成功运行。magnet-dht可以使用,并且跑满带宽,但是使用Redis存储数据,而我不会使用Redis。

秃头

asyncDHT作者在阿里云ECS(1核、1G、100M/s)上跑了66小时。获取get_peers请求的info_hash 21,313,390条记录(不重复),announce_peer请求的info_hash 849,355条记录(不重复),get_peers和announce_peer请求的info_hash 76,411,582条记录(含重复)。

模块流程图为

flowchart LR

A[utils] --> B[crawler]
A[utils] --> C[metadata]
C[metadata] --> D[crawler]
E[bencode] --> C[metadata]
F[mysqlpool] --> C[metadata]
F[mysqlpool] --> B[crawler]

数据流为

flowchart TD

A(开始) --> B[receive_response_forever]
B[receive_response_forever] --> C[bootstrap]
C[bootstrap] --> D[send_find_node]
C[bootstrap] --> E[on_message]
E[on_message] --> F[on_find_node_response]
E[on_message] --> G[on_get_peers_request]
E[on_message] --> H[on_announce_peer_request]
G[on_get_peers_request] --> I[save_magnet]
H[on_announce_peer_request] --> I[save_magnet]

运行程序

running

这样就会有源源不断的数据填充到数据库表里面,除了本系列之外,MySQL入门、测试也会用到这些表、数据。

数据爬取

爬虫环境为:2xCPU + 8G RAM + 80G HD + Ubuntu LTS 20.04 + Apache2 2.4.41 + PHP 7.4.3 + MySQL 8.0.26 + Python3 3.8.10

经过接近两个月的爬取。获取到了大约3GB的数据,共计5051203条

state

state

state

我在腾讯云ECS(2核,4G,5M/s)上运行接近两周(运行时间太长我忘了具体时间),获取记录get_peers类型info_hash为8488890条,announce_peer类型info_hash为129条。

穷的想叮当

爬了那么长时间我才意识到链接是永远爬不完的。

熬夜

get_peers中0-f开头的数量为:

peer

get_announce中0-f开头的数量为:

announce

占比图为:

percent

那么我们进行下一步

Redis->MySQL

使用脚本将数据从Redis中提取并保存到MySQL中。

数据大约为505万条,单线程耗时12个小时。

导入了5050679条数据,其余524条数据因数据字符问题无法导入。

磁力文件

磁力链接总数太多,选取get_peers中b开头的磁力链接,只有50万条,这样爬取的种子不会太多。

但是找不到有效的BT种子仓库或者找的仓库无法直接获取,无法批量获取*.torrent文件,可能需要考虑从dht网络中直接获取种子文件。


磁力搜索网站搭建3.2:数据获取
https://blog.jackeylea.com/bt/retrive-data-of-torrent-with-dht/
作者
JackeyLea
发布于
2021年10月8日
许可协议