资讯专栏INFORMATION COLUMN

Spring Cloud + Netty 打造分布式可集群部署的 DHT 磁力爬虫(开源)

banana_pi / 1533人阅读

摘要:闲话不多说了,接下来谈谈网络爬虫吧。根据中的到指定端口使用扩展协议进行数据的交换即下载下载成功,解析出种子文件列表信息入库。具体实现请参考我的开源项目代码如有问题,欢迎指正,仅供技术交流,切勿用作非法商业用途。

演示地址: https://dodder.cc

三年前,照着 Python 版的 DHT 网络爬虫用 Java 重写了一遍,当时大学还未毕业,写出来的代码比较杂乱,数据跑到 1600 万的时候就遇到了瓶颈,最近辞职了想学习一波 Spring Cloud 微服务开发,于是就有了现在这个项目。

学习一门新的技术总是枯燥无味的,不知道大家有没有这样的感觉,照着官方文档或者 Demo 去敲代码,不仅印象不深刻容易忘记,而且特别无聊,所以对于我个人而言,在学习一门新技术时喜欢去找一个自己感兴趣的实战场景,然后再进行学习实践,遇到不懂的再去 Google 或者看官方文档,而不是按部就班地买本书一页一页的全部看完,只有自己要用到什么的时候再去查相关的文档,这样子对应用场景以及技术要点才会更加深刻。

闲话不多说了,接下来谈谈 DHT 网络爬虫吧。

对于老湿鸡来说,到磁力搜索网站去搜索番号是他们获取资源的一种快速途径,对于这种网站,广告也是一大堆的,那么身为 IT 技术人,能不能自己来实现一个呢?

答案肯定是可以的,而且技术含量也不是特别高,但实现之前,Bittorrent 协议以及其 Wire Peer 扩展协议,还是必须要了解的,前者在官方文档还能详细找到,后者在维基百科上貌似已经被删掉了(官方文档里只有简单的介绍了,整个协议数据收发的流程已经没有了)。

参考协议:
http://www.bittorrent.org/bep...
http://www.bittorrent.org/bep...

除此之外,还需要熟悉 Torrent 种子文件里的结构信息,Bittorrent 协议以及 Torrent 种子文件信息大多都采用 bencode 编码,学习之前,可以先去了解一下这个编码,和 json 有点类似,不过也不是必要的,不用自己去实现,有现成的编解码库。

对前面的东西了解过后,再整理下整个爬取的流程:

使用 Netty 本地模拟一个 DHT 网络节点加入到 DHT 网络中去(即向启动节点发送 find_node 请求)

收到 find_node 回复解析出更多的 DHT 节点信息,向这些节点发送 find_node 节点(目的就是让更多的人知道自己,专业术语就是把自己的节点 ID 加入到对方的桶里,和推销自己差不多吧~)

那些收到 find_node 请求的节点,把我们的节点 ID 加入到桶里之后,它就会向我们发送 find_node、get_peers、announce_peer 请求。

对于其他节点发送给我们的请求,我们需要根据协议进行回复,否则对方会认为我们是个不活跃节点把我们从对方的桶里删除,并且不会发送 announce_peer 消息给我们

对于 get_peers 消息里的 info_hash 我们可以进行忽略,因为此时对方也是在查找对应 info_hash 的种子文件,只有收到 announce_peer 消息时的 info_hash 对我们才有用,因为它表示当前对方正在指定端口下载该种子文件的 metadata 信息。

根据 announce_peer 中的 info_hash 到指定 ip 端口使用 wire peer 扩展协议进行 metadata 数据的交换(即下载)

下载成功,解析出种子文件列表信息入库。

具体实现请参考我的开源项目: https://github.com/xwlcn/Dodder

代码如有问题,欢迎指正,仅供技术交流,切勿用作非法、商业用途。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/73559.html

相关文章

  • nodejs 实现 磁力链接资源搜索 BT磁力链接爬虫

    摘要:项目简介前端站点项目效果预览使用实现磁力链接爬虫磁力链接解析成种子信息,保存到数据库,利用实现中文检索。搭建磁力链接搜索引擎源码地址后端脚本磁力链接获取磁力链接解析入库定时同步源码地址此项目仅用学习交流技术使用不做商业用途。 项目简介 前端站点 项目效果预览 http://findcl.com 使用 nodejs 实现磁力链接爬虫 磁力链接解析成 torrent种子信息,保存到数据...

    fish 评论0 收藏0
  • python爬虫dht磁力源代码开源

    摘要:本人建立个群作为去转盘网的官方群,人数现在也不多,如果有兴趣的话来逛逛吧,多个粉丝去转盘多一份热闹,群号 之前我在写百度网盘爬虫,百度图片爬虫的时候答应网友说,抽时间要把ok搜搜的的源码公开,如今是时候兑现诺言了,下面就是爬虫的所有代码,完全,彻底的公开,你会不会写程序都可以使用,不过请先装个linux系统,具备公网条件,然后运行: python startCrawler.py 有必要...

    hizengzeng 评论0 收藏0
  • Dubbo Cloud Native 之路实践与思考

    摘要:可简单地认为它是的扩展,负载均衡自然成为不可或缺的特性。是基于开发的服务代理组件,在使用场景中,它与和整合,打造具备服务动态更新和负载均衡能力的服务网关。类似的特性在项目也有体现,它是另一种高性能代理的方案,提供服务发现健康和负载均衡。 摘要: Cloud Native 应用架构随着云技术的发展受到业界特别重视和关注,尤其是 CNCF(Cloud Native Computing Fo...

    niceforbear 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<