纯C#实现的DHT爬虫和磁力搜索引擎 - btcherry.com
2014-03-12 11:17
1416 查看
最近似乎有很多人做DHT爬虫,但是好像没有完全用C#实现的,所以我来介绍一下C#的实现过程。关于DHT协议的原理,网上有很多介绍的文章,这里就不再赘述,仅说说实现的过程,作为抛砖引玉吧。
1、DHT爬虫的实现
DHT协议我选择使用MonoTorrent项目并稍作修改,使爬虫可以得到其他节点“开始下载”的通知。每个DHT节点都有自己的ID,而开始下载的通知只会发送到离自己“最近”的节点,所以如果我们想要收到更多的消息,就要启动尽可能多、ID尽可能平均分布的节点。
在我们收到的“开始下载”消息中,有一个40字节长的字符串,就是这个资源的ID,也表示网络中有一个用户开始下载这个资源了。下载同一个资源的用户越多,表示这个资源越热门,下载速度也越快。
得到资源ID后,需要通过种子缓存服务下载对应的种子文件。如资源ID:640FE84C613C17F663551D218689A64E8AEBEABE,则对应的种子下载地址分别为:
https://zoink.it/torrent/640FE84C613C17F663551D218689A64E8AEBEABE.torrent http://bt.box.n0808.com/64/BE/640FE84C613C17F663551D218689A64E8AEBEABE.torrent
http://torcache.net/torrent/640FE84C613C17F663551D218689A64E8AEBEABE.torrent http://torrage.com/torrent/640FE84C613C17F663551D218689A64E8AEBEABE.torrent
选择其中之一下载即可。得到对应的种子文件后,可以直接通过MonoTorrent解析成对象,并读取资源的名称、大小、收录日期、包含的文件等信息,接下来就可以存入数据库为以后的搜索引擎做准备了。
需要注意的是爬虫启动时需要通过已经在DHT网络中的节点引导,常用的引导节点是dht.transmissionbt.com和router.bittorrent.com,端口都是6881。
2、搜索引擎的实现
种子信息的检索使用Lucene.Net,是Apache Lucene项目的.Net移植。通过IIS中运行的守护线程,定时将最新采集的BT信息加入到Lucene索引中,aspx后台通过关键词进行检索即可。
Lucene默认的分词器StandardAnalyzer对中文支持的不是很好,其他的选择还有盘古分词和庖丁解牛,这里btcherry用的是Apache提供的ChineseAnalyzer和StandardAnalyzer配合使用。
参考资料
http://www.bittorrent.org/beps/bep_0005.html
http://codemacro.com/2013/05/19/crawl-dht/
/article/2122304.html
http://en.wikipedia.org/wiki/Kademlia
BT樱桃
http://www.btcherry.com/
1、DHT爬虫的实现
DHT协议我选择使用MonoTorrent项目并稍作修改,使爬虫可以得到其他节点“开始下载”的通知。每个DHT节点都有自己的ID,而开始下载的通知只会发送到离自己“最近”的节点,所以如果我们想要收到更多的消息,就要启动尽可能多、ID尽可能平均分布的节点。
在我们收到的“开始下载”消息中,有一个40字节长的字符串,就是这个资源的ID,也表示网络中有一个用户开始下载这个资源了。下载同一个资源的用户越多,表示这个资源越热门,下载速度也越快。
得到资源ID后,需要通过种子缓存服务下载对应的种子文件。如资源ID:640FE84C613C17F663551D218689A64E8AEBEABE,则对应的种子下载地址分别为:
https://zoink.it/torrent/640FE84C613C17F663551D218689A64E8AEBEABE.torrent http://bt.box.n0808.com/64/BE/640FE84C613C17F663551D218689A64E8AEBEABE.torrent
http://torcache.net/torrent/640FE84C613C17F663551D218689A64E8AEBEABE.torrent http://torrage.com/torrent/640FE84C613C17F663551D218689A64E8AEBEABE.torrent
选择其中之一下载即可。得到对应的种子文件后,可以直接通过MonoTorrent解析成对象,并读取资源的名称、大小、收录日期、包含的文件等信息,接下来就可以存入数据库为以后的搜索引擎做准备了。
需要注意的是爬虫启动时需要通过已经在DHT网络中的节点引导,常用的引导节点是dht.transmissionbt.com和router.bittorrent.com,端口都是6881。
2、搜索引擎的实现
种子信息的检索使用Lucene.Net,是Apache Lucene项目的.Net移植。通过IIS中运行的守护线程,定时将最新采集的BT信息加入到Lucene索引中,aspx后台通过关键词进行检索即可。
Lucene默认的分词器StandardAnalyzer对中文支持的不是很好,其他的选择还有盘古分词和庖丁解牛,这里btcherry用的是Apache提供的ChineseAnalyzer和StandardAnalyzer配合使用。
参考资料
http://www.bittorrent.org/beps/bep_0005.html
http://codemacro.com/2013/05/19/crawl-dht/
/article/2122304.html
http://en.wikipedia.org/wiki/Kademlia
BT樱桃
http://www.btcherry.com/
相关文章推荐
- 使用C#实现DHT磁力搜索的BT种子后端管理程序+数据库设计(开源)[搜片神器]
- 使用C#实现DHT磁力搜索的BT种子后端管理程序+数据库设计(开源)
- c#关于网页内容抓取,简单爬虫的实现。(包括动态,静态的)
- COM方式实现C++调用C#代码的一些总结
- C#抽象工厂模式的几种实现方法及比较开发者在线 Builder.com.cn 更新时间:2008-07-19作者: 来源:
- C# 无需COM组件创建快捷方式的实现代码
- 第三百六十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索的自动补全功能
- 如何实现小型WEB搜索引擎(C#+SQL Server全文检索+Asp.net)
- 第三百七十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现我的搜索以及热门搜索
- 用C#实现语音技术开发者在线 Builder.com.cn 更新时间:2008-07-18作者: 来源:
- C#实现网页爬虫
- 巧用C#webbrowser以及Application.DoEvents()实现采集动态网页的爬虫机器人
- dySE:一个 Java 搜索引擎的实现,第 1 部分: 网络爬虫
- 第三百六十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索功能
- 用C#实现FTP搜索引擎
- c#实现微软同步sql数据库Synchronize(),COM class factory for component with CLSID...80040154
- C#实现动态分配IP和释放IP开发者在线 Builder.com.cn 更新时间:2008-08-05
- C#中实现窗体间传值开发者在线 Builder.com.cn 更新时间:2008-07-19作者: 来源:
- 通过爬虫、lucene和python.web实现网页搜索引擎
- C#使用多线程实现网络爬虫,并且通过网络传输,传到另外的服务器数据库存储