纯C#实现的DHT爬虫和磁力搜索引擎 - btcherry.com
最近发现有很多人在做DHT爬虫工具
1、DHT爬虫的实现
采用 MonoTorrent 项目,并对其进行了部分优化使得爬虫能够接收其他节点的"启动下载"通知。每个 DHT 节点都拥有独特的标识符;该通知仅会发送给与当前节点最近的邻居;为了获取更多的信息量;建议部署尽可能多且标识符分布均匀的 DHT 节点。
当'开始下载'消息被接收时,在此系统中会记录下一条长度为40字节的信息条目,并将其作为该文件的一个唯一标识符存在。这也意味着在网络中有一个人开始下载该文件了。此外,在同一时间点内如果多个用户同时选择同一文件进行下载,则说明当前该文件较为受欢迎,并且其 download 速度通常会加快。
得到资源ID后, 应利用缓存服务系统获取相应的种子文件. 例如, 资源ID为'640FE84C-613C-17F6-6355-1D218-9A64-E8AB', 则其对应的种子下载地址分别为:
-
该资源中的种子文件位于https://zoink.it/torrent/包含文件名.torrent处
-
此资源的种子文件可从http://bt.box.n0808.com/...获取
仅需选择一个即可下载。获取到相应的种子文件后, 可以直接通过MonoTorrent进行解码, 并提取资源名称信息、文件大小数据以及发布日期等关键数据, 最后将这些数据存入数据库以便后续便于搜索引擎进行检索和管理准备好了。
在启动爬虫时需要注意的一点是需要通过已接入DHT网络的节点进行引导。常用的引导节点包括dht.transmissionbt.com和router.bittorrent.com,并且均使用6881端口。
2、搜索引擎的实现
种子信息的检索基于Apache Lucene.Net框架(Lucene.Net),该框架是Apache Lucene项目的Net移植版本。系统通过运行在IIS中的守护线程组件,在固定的时间间隔内从外部获取最新的BT数据,并将其注入到Lucene索引系统中。而 ASP.NET 后台则依赖于关键词来执行高效的搜索操作。
Lucene默认采用的标准分析器在处理中文时存在一定局限性,在这种情况下推荐使用盘古分词器或者庖丁解牛算法作为替代方案。具体而言,在某个项目中btcherry采用了Apache组织提供的中文分析工具与标准分析器相结合的方式进行文本处理
参考资料
http://www.bittorrent.org/beps/bep_0005.html
http://codemacro.com/2013/05/19/crawl-dht/
<>
http://en.wikipedia.org/wiki/Kademlia
BT樱桃
