如何做一个像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=" ... 
随机推荐
- SSH框架学习
			首先,SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活.易于扩展的多层Web应用程序. 集成SSH框 ... 
- centos7 开启ftp服务
			1.关闭默认防火墙 systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewa ... 
- iOS 图片部分模糊,类似于美图秀秀
			代码地址如下:http://www.demodashi.com/demo/14277.html 演示效果 演示效果 代码结构 项目结构截图如下: 该模块的核心源码部分为 MBPartBlurView, ... 
- Highcharts网页版
			//后台控制器中(SpringMVC) @RequestMapping(value="/getAll",method=RequestMethod.POST) @ResponseBo ... 
- Spring mvc中@RequestMapping 6个基本用法小结
			Spring mvc中@RequestMapping 6个基本用法小结 小结下spring mvc中的@RequestMapping的用法. 1)最基本的,方法级别上应用,例如: @RequestMa ... 
- jQuery正则:电话、身份证、邮箱简单校验
			if (!(/^1[3,5,6,7,8,9]\d{9}$/).test(e.detail.value.data_phone)) { wx.showToast({ title: '请输入有效11位手机号 ... 
- HDUOJ-----(1072)Nightmare(bfs)
			Nightmare Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ... 
- wap站、手机APP 接入支付宝、微信、银联支付。
			一.wap站 ①.支付宝接入 1.开发前准备:申请一个通过实名认证的企业支付宝账号,并申请开通手机WAP支付功能. 2.流程 参数准备: 企业支付宝账号的PID(也叫ParnerID)和KEY,如果使 ... 
- C#中缓存的使用  ajax请求基于restFul的WebApi(post、get、delete、put)  让 .NET 更方便的导入导出 Excel  .net core api +swagger(一个简单的入门demo 使用codefirst+mysql)  C# 位运算详解  c# 交错数组  c# 数组协变  C# 添加Excel表单控件(Form Controls)  C#串口通信程序
			C#中缓存的使用 缓存的概念及优缺点在这里就不多做介绍,主要介绍一下使用的方法. 1.在ASP.NET中页面缓存的使用方法简单,只需要在aspx页的顶部加上一句声明即可: <%@ Outp ... 
- python学习笔记011——检查变量类型type()
			>>> a = 1 >>> type(a) <class 'int'> >>> b = 1.0 >>> type(b ... 
