系统包括几个独立的部分:
使用 python 的scrapy框架开发的网络爬虫,用来爬取磁力链接和种子;
使用 php ci 框架开发的简易网站;
搜索引擎目前直接使用的 mysql,将来可以考虑使用 sphinx;
中文分词。
用 php 写了一个简陋版的基于逆向最大匹配算法的小类,词库呢,哈哈,直接使用了chrome 的分词表,分词表可以在这个地址下载:。
新词发现机制
基于搜索关键词的新词发现机制。
目前词库方面还有一个很大的问题,比如最新的电影无法分词,例如星际穿越会被分词为“星际”和“穿越”,因此“被偷走的那五年,穿越火线,极速蜗牛,了不起的盖茨比,摩登年代,星际迷航,乔布斯传。”也出现在了搜索结果中。
当然这也不算事大问题,但是霍比特人却被分词为了“霍”、“比特”、“人”了,好在搜索结果里面没有啥东西乱入。这些属于过度分词,通过增加词库内容可以解决,因此准备些一个豆瓣爬虫,将豆瓣的所有电影都加入词库,用来辅助分词。
资源别名
这会使我们的系统更加智能,更加人性化。我们在百度搜索时,经常会遇到这样的情况,当我们搜索“开核桃利器”,百度提示我们“您要找的是不是诺基亚?”。当我们搜索“世界上最好的语言”,百度提示我们“您要找的是不是php?”。同样,当用户搜索“星际穿越”时,应该为用户提供interstellar的匹配结果。
我们不用实现复杂的在线翻译,只需要继续爬取豆瓣,将电影的中英文都做成对尚公主是什么意思照表就可以了。而且,为了考虑到某些宅男的特殊需求,我们还需要做一个日语的对照表。
英文分词
英文还需要分词?空格不就是词语边界吗?你有这样的译文很正常,我最初也是这么想的,因此英文只是简单的使用了 php 的explode(' ', $query)
函数。
但是我刚才(2015-02-01 21:59:35)看搜索日志时发现了一些问题,今天关键词被搜索了 169 次,而关键词仅仅被搜索了 54 次,但是肺活量体重指数 x-art 才是它的官方名词啊(不要问我为什么知道的这么多)。因此我刚刚调整了一下代码,将 xart 和 x-art 统一定向到了 x-art。
bittorrent 低版本最初使用 python 开发,而且是开源的,上海立信会计金融学院因此很多类库都是直接使用的 bittorrent 的,也有一些类库和辅助函数直接移植到了 php 平台上;(petru paler 写的太赞了,老婆问我:你为什么跪着写代码?)
了解 p2p 原理的人都知道,bt 不需要中心服务器,因为每个节点既是客户端,同时也是服务器,因此基于 0x0d 大神的写了一个 dht 爬虫,它伪装为 dht 网络中的一个节点,这样当其他客户端想下载某个 torrent 时,就会在 dht 网络发起广播,当它询问到我的节点时,我就知道了:哦,原来有人要下载这个种子啊,那么在 dht 网络中肯定有这个种子。于是我把这个种子的信息保存到 mysql 中。
以上 dht 的整个过程可以具体看看dht 协议。
注意:我只是保存了 torrent 的 info感恩的作文hash 信息,用这个信息,可以构建一个磁力链接,但是却还没有得到种子文件,我们还得通过其它方式取得种子文件。
python 的爬虫程序是主动出击,盲目寻找。在互联网的海量网页中寻找种子和磁力链接。而 dht 爬虫则变成了被动等待,当别人来询问时,就把它的询问结果记录下来,如果一个种子被询问了很多次,则说明这个种子是一个热门种子,这是 python 爬虫无法做到的。
由于 bittorrent 开源版本使用的 python,因此我的 dht 爬虫也使用了 python。作为一个服务器,肯定要使用 twisted 框架,熟悉 nodejs 的同学一定知道这个框架的特性:异步网络 io,虽然大部分开发者都是通过 nodejs 才了解了异步 io,但是 twisted 要比 nodejs 早了 n 年。
当前运行的爬虫是一个非常简陋的版本,是我一周前写的一个多线程的基于 socket 的 dht 服务器。截至到现在(2015年2月1日),已经运行了 6 天了,总共收集到了 45,234,859 个磁力链接。
本文发布于:2023-04-08 02:25:24,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/251b2e624a52a229052fcdf40fac9a03.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:DHT协议网络爬虫磁力链接和BT种子搜索引擎.doc
本文 PDF 下载地址:DHT协议网络爬虫磁力链接和BT种子搜索引擎.pdf
留言与评论(共有 0 条评论) |