如何做一个像btbook.net这样的搜片神器?
这几天btbook.net这个搜片神器网站火了, 让我这个无工作的人, 也想做一个出来, 不然时间不好打发, 本人的草稿站: fastbot.me (刚发布几个小时, 体验等几天再做)
现在说说这种搜片神器是怎么做的:
一, 先实现一个DHT爬虫
至于怎么实现, 我就不多说了, 我这里有几篇文章说了.
2, 如何"养"一只DHT爬虫
3, 如何让DHT爬虫走得更远
花点时间去看看吧, 里面有贴有我的两个DHT爬虫的github地址
DHT爬虫, 相当于汽车里的发动机, 技术最难实现, 但也是最重要的, 虽然可以使用别人DHT爬虫, 但是要整合到自己搜片神器的话, 还是需要一定的技术的, 自己写的话, 成就感更大.
二, 种子下载
种子下载也是很麻烦的事情, 如果是自己实现协议进行种子下载的话, 下载种子时特别费时间, 没有好的网络带宽, 就别想了.
直接说下如何到迅雷服务器去下载种子文件, 还有如何对torrage.com定向采集来先充个面子.
用WireShark抓包分析迅雷, 发现它是这么个流程: 得到一个磁力链接, 取出那40字节的infohash, 在自己的种子服务器进行HTTP请求, 看自己是否已缓存过, 如果已缓存, 直接下载. 如果没有缓存, 就走DHT网去下载了. 这就是为什么你看到迅雷有时候下载种子快和慢的现象, 快的时候是因为直接到自己种子服务器下载, 慢的是因为要经过一定数量的向DHT网络发送get_peers请求.
ok, 只要我们实现了DHT爬虫, 得到infohash后, 就可以到迅雷种子库去下载. 那么向迅雷种子库进行HTTP请求时, 是个什么构造呢? 抓包分析图我就不截图了, 直接文字描述下.
原始infohash: ad2150e029b61caee9edc5f4e9b02cee489788cd
大写infohash: AD2150E029B61CAEE9EDC5F4E9B02CEE489788CD
请求地址: http://bt.box.n0808.com/AD/CD/AD2150E029B61CAEE9EDC5F4E9B02CEE489788CD.torrent
header头信息: Referer: http://bt.box.n0808.com (必须写, 不然返回error信息)
就这么简单, 一定要注意AD是infohash头两个字符, CD是infohash最后两个字符.
如果迅雷种子服务器也没有你给定的infohash的种子的话, 那就算了, 除非你自己去实现种子下载协议
那个torrage.com又是干啥的? 假如你也要做一个搜片神器的网站的话, 那么你最好先迅速积累资源, 后面再慢慢用DHT爬虫收集infohash向迅雷请求种子下载或自己实现种子下载协议进行下载. 打开torrage.com/sync, 里面都是存有infohash的文本文件, 种子下载就写如: http://torrage.com/torrent/640FE84C613C17F663551D218689A64E8AEBEABE.torrent 就可以了. 注意的是, 这个文本文件里的infohash有重复的, 要注意先去重复.
顺便说句, 不知torrage.com是不是被墙了, 时不时地要抽风, 要定向采集它的, 服务器最好放在国外.
三, 种子文件分析
读取文件内容, 使用bencode模块"解码"为编程语言的数据结构, 详情请自行google. 种子文件里有name, files, create date, length等属性值.
四, 搜索引擎
把torrage.com的种子全部下载完, 后期又要用自己的DHT爬虫爬的话, 那么数据可是上5000万了, 没有好的中文分词搜索引擎, 那是绝对不可能的, 所以要用Sphinx或Lucene类似的. 笔者目前用的是Sphinx, 不过把玩得不好, 只会完全索引, 实时增量索引还在研究中. 这个就不好写了.
如何做一个像btbook.net这样的搜片神器?的更多相关文章
- 【技巧】使用weeman来做一个钓鱼网页
本文来自网友836834283 对玄魂工作室的投稿. 工具项目地址:https://github.com/Hypsurus/weeman/ 克隆地址:https://github.com/Hypsur ...
- 用struts2标签如何从数据库获取数据并在查询页面显示。最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量。
最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变 ...
- 基于trie树做一个ac自动机
基于trie树做一个ac自动机 #!/usr/bin/python # -*- coding: utf-8 -*- class Node: def __init__(self): self.value ...
- 做一个 App 前需要考虑的几件事
做一个 App 前需要考虑的几件事 来源:limboy的博客 随着工具链的完善,语言的升级以及各种优质教程的涌现,做一个 App 的成本也越来越低了.尽管如此,有些事情最好前期就做起来,避免当 ...
- 有了lisk,为什么我们还要做一个Asch?
0 前言 首先要声明一点,我们和我们的一些朋友都是lisk的投资人和支持者,我们也相信lisk会成功. 事实上,lisk已经成功了一半,目前在区块链领域融资金额排行第二,仅次于以太坊. 那为什么我们还 ...
- 做一个阅读管理APP
背景 由于最近在看的书有点多,所以一直想找一个能够管理阅读进度的书(鄙人记性不是很好,两天不看就忘了)可惜Android平台上一直找不到合适的APP: 有没有读书进度管理的网站或软件啊? 有没有记录读 ...
- 微软云创益大赛获奖团队风采:做一个中国特色的.Net源代码社区
为了强化云技术,落地云应用,彰显云价值,微软(中国)携手中国计算机报举办了“微软Cloud OS第二届云创益大赛”.本届大赛历时111天,共吸引了6647位个人组选手回答了70,078道题,59支参赛 ...
- 用jQuery做一个三级菜单,鼠标移动到二级菜单的选项上,然后再迅速离开后,当鼠标再移动到该一级菜单或其他二级菜单选项,三级菜单也会显示。
用jQuery做一个三级菜单,鼠标移动到二级菜单的选项上,然后再迅速离开后,当鼠标再移动到该一级菜单或其他二级菜单选项,三级菜单也会显示. 原因:在为一个元素绑定hover事件之后,用户把光标移入元素 ...
- 【 D3.js 入门系列 --- 5.1 】 做一个带坐标轴和标签的图表
前面几节讲解了图标.坐标轴.比例等等,这一节整合这些内容做一个实用的图表.结果图如下: 代码如下所示: <html> <head> <meta charset=" ...
随机推荐
- MongoDB删除数据库
> db.dropDatabase()
- Eclipse中jar包关联JDK源代码
1.点 “window”-> "Preferences" -> "Java" -> "Installed JRES"2.此 ...
- 【转】Asp.Net MVC4 之Url路由
MVC4常见路由的处理方式 //直接方法重载+匿名对象 routes.MapRoute( name: "Default", url: "{controller}/{act ...
- java 新创建的类要重写的方法
重写toString方法,可以控制println打印的结构. 如果需要往hashSet或者HashMap中存,需要重写hashCode和equals方法,因为hashSet执行添加,以对象为参数删除, ...
- Linux 系统文件类型
在Linux中只有一下7种文件类型 1.普通文件(-表示,可用ls -l查看) 2.目录(d)[在linux中,任何东西都被看成文件,外设备也看成文件,注意是任何东西] 3.字符设备文件(c) 4.块 ...
- ant入门程序
一. ant简单介绍 Ant是apache的一个核心项目, 它的作用是项目自己主动化构建, 由于它内置了Javac.Java.创建文件夹.拷贝文件等功能, 直接执行build.xml文件就能够编译我们 ...
- 转:PHP关于反斜杠处理函数addslashes()和stripslashes()的用法
1.php处理\函数:addslashes()和stripslashes()函数 addslashes():对输入字符串中的某些预定义字符前添加反斜杠,这样处理是为了数据库查询语句等的需要.这些预定义 ...
- HDUOJ----1301 Jungle Roads
Jungle Roads Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tota ...
- Java虚拟机学习 - 垃圾收集算法(3)
跟踪收集器 跟踪收集器采用的为集中式的管理方式,全局记录对象之间的引用状态,执行时从一些列GC Roots的对象做为起点,从这些节点向下开始进行搜索所有的引用链,当一个对象到GC Ro ...
- 分布式缓存技术memcached学习系列(五)—— memcached java客户端的使用
Memcached的客户端简介 我们已经知道,memcached是一套分布式的缓存系统,memcached的服务端只是缓存数据的地方,并不能实现分布式,而memcached的客户端才是实现分布式的地方 ...