网络爬虫爱好者为了爬取视频, 图片, 文档, 软件, 可能只想到写一个 Web 爬虫, 从各大网站爬取. 但是你知道吗? 这个世界上, 还有 DHT 协议, BitTorrent 协议.
想想看, 全世界每天有那么多人通过 BT 种子 & 磁力链接下载资源(有你懂滴的资源), 如果写个爬虫, 从 DHT 网络里"监听"人们正在下载的资源, 然后把这个资源的种子信息给下载并保存下来. 打造成属于自己的海盗湾!
这几天, 我用 Node.js 重写了我去年用 Python 写出的 DHT 爬虫 + BT 客户端 = P2P 爬虫. 为什么用 Node.js 重写呢? 除了我闲得蛋疼外, 还有个原因是 Node.js 在这个 Network IO 操作频繁的项目上, 性能非常非常牛逼, 占用也非常少! 不过代码难写倒是真的. 我花了好多天才重写出来.
爬虫运行演示视频: http://v.youku.com/v_show/id_XMTQ4NTIzMDU2MA==.html
默认参数下, 在最便宜的日本区 Vultr VPS 运行 24 小时, 可”监听"到 50 万 个 BT 种子信息. 我那个 Python 版的爬虫(只开源一部分), 已经爬了 1400 万种子信息, 连续运行了一年多.
我平常下载资源, 都是从我私人种子数据库里搜索, 然后拿磁力链接去下载. 比如搜索引擎找不到的新电影, 我都能从我数据库找到.
代码在这里: https://github.com/Fuck-You-GFW/p2pspider
求 Star !
如果你对此也有研究, 建议你看看 README.md, 列有这个项目如何发展的计划. 如果你对此感兴趣, 请 fork 它, 贡献你的智慧.
如果你对 Node.js 比较熟练, 也欢迎你重构我的代码, 我对 Node.js 不是很熟, 代码写得不是很好.
赞 自豪地采用 CNodeJS ionic
加起来不过1000行吧
必须要在VPS执行吗?我在本地执行,感觉没任何日志输出呀。 还有个问题,下载后的种子保存在哪里了呢?
初略的看了一下代码,你是不是在某几个站里面爬到里面所有的磁链接,然后用node某些模块通过磁链接来下载?
@tanshanli 建议公网的主机来运行. 局域网里几乎无效. 保存种子的代码需要自己去写, 方便定制. 因为有些人想保存到 json 文件里, 有的想远程传输到别的服务器去.
@i5ting 才500多行
@satrong 恰恰相反, 我是真的从 DHT 网络里爬取的. 你在代码里看到的网址, 那是初始节点. 是加入 DHT 网络, 就好像你要加入某个圈子, 总得有个人带你进这个圈子对吧?
我没用"某些Node 模块"去下载磁力链接. 都是自己造的轮子.
@laomayi 看着很牛逼的样子,我得好好的阅读代码了
@satrong 求Star :)
对dht协议很感兴趣呢,只是不用qq群。。。
@reverland QQ群只是用来快速交流. 虽然看起来很 Low, 但是有用就行.
@laomayi 不low啊。。。不用而已。。。
楼主的github 用户名霸气侧漏啊
用了一下。。。就出现番号了。。。
看来dht最活跃的还是这东西啊。。。。
mark,不为用,只为源码
@timqian 哈哈, 都只有你注意到了我用户名.
@youxiachai 哈哈, 别说话, 赞我.
@laomayi 把你的代码用 ES6 重写了下,已发 pull request
mark
如何只是爬下来存成静态的种子,似乎对磁力下载的帮助不大吧?还是爬虫可以实时动态地解析磁力链接对应的资源?