博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何做一个像btbook.net这样的搜片神器?
阅读量:4961 次
发布时间:2019-06-12

本文共 1564 字,大约阅读时间需要 5 分钟。

这几天这个搜片神器网站火了, 让我这个无工作的人, 也想做一个出来, 不然时间不好打发, 本人的草稿站:  (刚发布几个小时, 体验等几天再做)

现在说说这种搜片神器是怎么做的:

一, 先实现一个DHT爬虫

至于怎么实现, 我就不多说了, 我这里有几篇文章说了. 

1, 

2, 

3, 

4, 

花点时间去看看吧, 里面有贴有我的两个DHT爬虫的github地址

DHT爬虫, 相当于汽车里的发动机, 技术最难实现, 但也是最重要的, 虽然可以使用别人DHT爬虫, 但是要整合到自己搜片神器的话, 还是需要一定的技术的, 自己写的话, 成就感更大.

二, 种子下载
种子下载也是很麻烦的事情, 如果是自己实现协议进行种子下载的话, 下载种子时特别费时间, 没有好的网络带宽, 就别想了.
直接说下如何到迅雷服务器去下载种子文件, 还有如何对定向采集来先充个面子.

用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向迅雷请求种子下载或自己实现种子下载协议进行下载. 打开, 里面都是存有infohash的文本文件, 种子下载就写如:  就可以了. 注意的是, 这个文本文件里的infohash有重复的, 要注意先去重复.

顺便说句, 不知torrage.com是不是被墙了, 时不时地要抽风, 要定向采集它的, 服务器最好放在国外.

 

三, 种子文件分析

读取文件内容, 使用bencode模块"解码"为编程语言的数据结构, 详情请自行google. 种子文件里有name, files, create date, length等属性值.

四, 搜索引擎
把的种子全部下载完, 后期又要用自己的DHT爬虫爬的话, 那么数据可是上5000万了, 没有好的中文分词搜索引擎, 那是绝对不可能的, 所以要用Sphinx或Lucene类似的. 笔者目前用的是Sphinx, 不过把玩得不好, 只会完全索引, 实时增量索引还在研究中. 这个就不好写了.

 

转载于:https://www.cnblogs.com/Bonker/p/3584738.html

你可能感兴趣的文章
linux解压war包的命令
查看>>
使用.NET操作SQLLITE
查看>>
7.3.3 - 并发多线程 Thread对象的其他属性或方法
查看>>
Spring
查看>>
Python之路 Day1 - Python笔记
查看>>
Asp.Net MVC 常用开发方式之EF Code First
查看>>
redis 数据库
查看>>
FIFO的使用总结
查看>>
Xenocode Postbuild 2010 for .NET 使用说明
查看>>
利用js与java交互
查看>>
svn服务器搭建之SlikSvn
查看>>
8月10号__学习报告
查看>>
android adb命令
查看>>
IDEA 修改文件编码
查看>>
如何判断个人电脑是多少位(32位?还是64位系统)
查看>>
把一个dt内的指定列 赋值都另一个dt里面 原来这么简单?!
查看>>
HDU 4899 Hero meet devil
查看>>
CentOS 7编译安装gcc5.3碰到的坑
查看>>
让ul li 或者table 进行循环往上滚屏
查看>>
Docker安装 小记
查看>>