上周开发了一个磁力链接和 BT 种子的搜索引擎 {Magnet & Torrent},本文简单介绍一下主要的系统功能和用到的技术。

系统包括几个独立的部分:

使用 Python 的 Scrapy 框架开发的网络爬虫,用来爬取磁力链接和种子;

使用 PHP CI 框架开发的简易网站;

搜索引擎目前直接使用的 MySQL,将来可以考虑使用 sphinx;

新词发现机制

基于搜索关键词的新词发现机制。

目前词库方面还有一个很大的问题,比如最新的电影无法分词,例如星际穿越 会被分词为“星际”和“穿越”,因此“被偷走的那五年,穿越火线,极速蜗牛,了不起的盖茨比,摩登年代,星际迷航,乔布斯传。”也出现在了搜索结果中。

当然这也不算事大问题,但是霍比特人却被分词为了“霍”、“比特”、“人”了,好在搜索结果里面没有啥东西乱入。这些属于过度分词,通过增加词库内容可以解决,因此准备些一个豆瓣爬虫,将豆瓣的所有电影都加入词库,用来辅助分词。

资源别名

这会使我们的系统更加智能,更加人性化。我们在百度搜索时,经常会遇到这样的情况,当我们搜索“开核桃利器”,百度提示我们“您要找的是不是诺基亚?”。当我们搜索“世界上最好的语言”,百度提示我们“您要找的是不是PHP?”。同样,当用户搜索“星际穿越”时,应该为用户提供Interstellar的匹配结果。

我们不用实现复杂的在线翻译,只需要继续爬取豆瓣,将电影的中英文都做成对照表就可以了。而且,为了考虑到某些宅男的特殊需求,我们还需要做一个日语的对照表。

英文分词

英文还需要分词?空格不就是词语边界吗?你有这样的译文很正常,我最初也是这么想的,因此英文只是简单的使用了 PHP 的 explode(' ', $query) 函数。

但是我刚才(2015-02-01 21:59:35)看搜索日志时发现了一些问题,今天 xart 关键词被搜索了 169 次,而 x-art 关键词仅仅被搜索了 54 次,但是 x-art 才是它的官方名词啊(不要问我为什么知道的这么多)。因此我刚刚调整了一下代码,将 xart 和 x-art 统一定向到了 x-art。

BitTorrent 低版本最初使用 Python 开发,而且是开源的,因此很多类库都是直接使用的 BitTorrent 的,也有一些类库和辅助函数直接移植到了 PHP 平台上;(Petru Paler 写的 bencode 太赞了,老婆问我:你为什么跪着写代码?)

了解 P2P 原理的人都知道,BT 不需要中心服务器,因为每个节点既是客户端,同时也是服务器,因此基于 0x0d 大神的 dhtfck 写了一个 DHT 爬虫,它伪装为 DHT 网络中的一个节点,这样当其他客户端想下载某个 torrent 时,就会在 DHT 网络发起广播,当它询问到我的节点时,我就知道了:哦,原来有人要下载这个种子啊,那么在 DHT 网络中肯定有这个种子。于是我把这个种子的信息保存到 MySQL 中。

以上 DHT 的整个过程可以具体看看 DHT 协议。

注意:我只是保存了 torrent 的 infohash 信息,用这个信息,可以构建一个磁力链接,但是却还没有得到种子文件,我们还得通过其它方式取得种子文件。

Python 的爬虫程序是主动出击,盲目寻找。在互联网的海量网页中寻找种子和磁力链接。而 DHT 爬虫则变成了被动等待,当别人来询问时,就把它的询问结果记录下来,如果一个种子被询问了很多次,则说明这个种子是一个热门种子,这是 Python 爬虫无法做到的。

由于 BitTorrent 开源版本使用的 Python,因此我的 DHT 爬虫也使用了 Python。作为一个服务器,肯定要使用 twisted 框架,熟悉 nodejs 的同学一定知道这个框架的特性:异步网络 IO,虽然大部分开发者都是通过 nodejs 才了解了异步 IO,但是 twisted 要比 nodejs 早了 N 年。

当前运行的爬虫是一个非常简陋的版本,是我一周前写的一个多线程的基于 Socket 的 DHT 服务器。截至到写这篇文章时,已经运行了 6 天了,总共收集到了 45,234,859 个磁力链接。

dht磁力链php,基于 DHT 网络的磁力链接和BT种子的搜索引擎架构相关推荐

  1. # 解析bt文件_磁力链接和BT种子使用方法

    目前用的最多的是磁力链接和BT种子,不过好多人并不太会使用,因此写个教程给大家说明一下. 何为磁力链接:简单地说,磁力链接是一种特殊链接,但是它与传统基于文件的位置或名称的普通链接(如http://x ...

  2. RedHat 7.5 7.6下载磁力链分享

    某度最近更新了一波,导致诸多屏蔽弹客户端应用直接显示直链下载的浏览器插件也失效,就连最强的下载神器也400.403报错 csdn的下载站里是有不少资源,但是苦于都要积分,出于服务大众.便利人民的心. ...

  3. Ubuntu 14.04 64bit上磁力链爬虫dht部署指南

    首先声明: 下面的源码包改编来自github上老太太写的一个"史上最简单的DHT爬虫"项目: https://github.com/laomayi/simDHT 相关源码在附件源码 ...

  4. 一个dht网络的“磁力链接”搜索python代码

    这个python代码是用来从DHT网络(一种分布式的"磁力链接"的共享网络,这个叫法是我个人对这种分布式网络的称呼)中,检测收集"磁力链接".每一个磁力链接就对 ...

  5. 使用C#实现DHT磁力搜索的BT种子后端管理程序+数据库设计(开源)

    直接上程序界面,了解整体工作流程是什么样子的,求服务器进行挂机测试,需要固定IP,空间大概需要10G左右(主要是BT种子占用空间过大),最好有SQLSERVER来做为存储数据库,目前采用的是ACCES ...

  6. 蚂蚁双链通:基于区块链的供应链协作网络

    摘要:以"数字金融新原力(The New Force of Digital Finance)"为主题,蚂蚁金服ATEC城市峰会于2019年1月4日于上海如期举办.ATEC区块链行业 ...

  7. python之bt种子,dht网络共享热门资源

    最近研究了dht网络,使用python写了个爬虫程序,另外用php做了个搜索网站,今天又把sphinx加上了,这样就是一个简单的bt种子搜索引擎了哈,网址:http://bt.dianfenxiang ...

  8. 你的磁力链为什么下不动了?(干货)

    我总是接到粉丝发问: 换了好多工具还是下不动啊!还有没有好用的下载器啊?你推荐的这些不行啊!垃圾,完全没用,还是下不了没用!换了几个下载器都下不动. 因为老有人把下载不了的问题归咎于下载器上,我必须要 ...

  9. # 解析bt文件_BT、磁力链这些词语是什么意思?

    "知其然知其所以然".我们经常在下载资料的时候能看到BT.磁力链等词语,这些词语到底是什么意思呢? 下载都会用,但是你了解吗? BT下载 传统的下载模式是每个客户端从服务器拷贝文件 ...

  10. 搭建区块链浏览器——基于hyperledger fabric 1.0,MySQL容器

    搭建区块链浏览器--基于hyperledger fabric 1.0,MySQL容器 区块链 hyperledger fabric 浏览器 MySQL docker  Contents 环境要求 分支 ...

最新文章

  1. Console-算法-一个偶数总能表示为两个素数之和
  2. 查看SQL Server被锁的表以及如何解锁
  3. js原生方法传参的细节(面试必问)
  4. 设计模式-生产者消费者模式
  5. gin-vue-admin菜单配置教程:父子菜单
  6. HarmonyOS之AI能力·关键字提取
  7. selenium ie 操作cookie_Python3中selenium 怎么操作Cookie?
  8. Centos7安装Redis4.0.8
  9. 修改android的wifi客户端名称的两种方法
  10. mysql 维护文档_mysql数据库维护文档
  11. 机器学习课程笔记【十一】- 因子分析
  12. 应用Mongoose开发MongoDB(1)数据库连接
  13. 计算机网络图标显示不出来,网络图标不见了汇总解决教程
  14. PLC属于电子计算机吗,plc是什么
  15. Android开发技术周报 Issue#8
  16. DW_axi_dmac控制器(术语)
  17. 图灵学院Java开发笔记
  18. 屏蔽html查看源代码,禁止查看网页源代码方法
  19. outlook中打不开超链接
  20. 中科曙光宁畅R620 G40安装Centos7识别不到硬盘

热门文章

  1. SPSS安装多次显示请输入注册的电子邮箱时,采用的解决办法。亲测有效!
  2. MPUSH消息推送服务器搭建,MPUSH消息推送服務器搭建
  3. 基于Matlab App Designer的语音信号分析与处理(一):语音信号的采集,时域、频域分析
  4. Sketch的下载与安装
  5. 解决Hash冲突四种方法
  6. sobel算子进行边缘检测
  7. 通过js实现文字合成语音并播报
  8. 运维部门工作总结_运维工作个人工作总结范文
  9. php sql注入防御方法,php怎么防御sql注入
  10. win10录屏_不需要第三方软件,看看WIN10自带的几个强大的截图、录屏工具