首页 > 代码库 > 如何写一个磁力搜索小偷

如何写一个磁力搜索小偷

 

   我是一名大二的学生,课余时间开发了这个磁力搜索——btgoogle.com 。之前一直在有很多人研究DHT爬虫的群里面, 也就是研究所谓的磁力搜索 ,利用课余时间和群里的一个人一起开发DHT 协议型的磁力搜索,但是我只是负责前端的。但是这次合作,让我对互联网技术有了更多的了解,比如非采集型的 磁力搜索,采用了sphinx作为搜索,redis作为数据库。 redis 为 key-value 型数据库,redis比较适合hash类型数据的存储,当然 dht 是借用了它的分布式功能。然后我也就用了些时间了解sphinx,还是希望自己在新的一年里 对linux 系统进行深入了解一下,还有关于一些web协议的部分。因为看书的原因,入手了 一部kindle 还是挺划算的。比如最近准备看 http权威指南 kindle版。 学习还是靠兴趣比较好,还有就是需要有人指导,这样效率就杠杠的,我就是缺少指导的人 ╮(╯▽╰)╭。好了还是入主题吧。

爬虫的部分确实复杂一些,详情可以查看 github:https://github.com/laomayi/simDHT

   因为自己的兴趣,我个人也做了一个小偷型磁力搜索引擎 使用了4个不同网站的数据,也就是网站中的4个节点,可以根据需要查找不同的资源。做好以后,然后做好了静态化,节点、资源都比较多,然后发现有人需要这个东西,也有人找我买,但是这点钱还不够工钱,所以还是准备开源了罢。 

下面是和我合作过的技术员开源的dht爬虫。这是根据第三方的种子库 获取种子实现的  

github:https://github.com/laomayi/simDHT

随后一直开发的是根据DHT协议获取的。

那么什么是磁力搜索呢?我在这里就不详细叙述了。引入几个链接说明一下。

*********************************************************

磁力搜索介绍:http://xiaoxia.org/2013/05/11/magnet-search-engine/

大白话讲解DHT原理及出现历史:http://www.tuicool.com/articles/jmQfyyN

如何做一个搜片神器 :http://www.tuicool.com/articles/Fj2mai

 根据磁力链获得BT种子:http://www.cnblogs.com/cpper-kaixuan/p/3532694.html

simple-html-dom api参考:http://btgoogle.com/apis/

********************************************************

btgoogle网站的源代码是小偷类型。也就是我将要开源的代码。

原理:

  根据已经有了的磁力搜索,然后根据用户搜索,然后服务器从其他磁力搜索网站上解析html 然后采集主要部分数据,然后插入到 自己的模板当中。

原理很简单。但是很多人也通过这种方法实现,有人用python实现过但是界面很丑,而且不能换页,也不能支持中文等等问题。这里我采用的是php 

  simple-html-dom 解析html结合了 curl 进行辅助,然后实现爬取,这样如果被对方网站发现也能够随时更改ip进行修改。很方便。

当然有些人想采用正则的方式

先用file_get_content()获取html然后正则匹配获取。结果是效率非常低,网站速度很慢。

比如下面是对demo.btspider.net 进行实时采集实现的代码。

demo: http://btgoogle.com/search4/%E5%BF%83%E8%8A%B1%E8%B7%AF%E6%94%BE

curl 在我程序内部充当的作用就是 获取html 代理作用。  simple-html-dom 用来解析html.

具体参考程序内部。因为这个网站和我的前端界面是差不多的。基本上直接获取一个div 块就可以直接用了。不需要更复杂的操作。在程序需要注意的就是采集的分页问题。

               <?php require(‘header.php‘);?><style type="text/css">#wall{max-width: 100%;}</style>                <!-- 搜索内容资源介绍开始  -->                <?php                $ip=array("183.140.164.204:80","58.68.129.68:8888","111.13.109.26:82","115.29.247.115:8888","111.13.87.173:8081","112.124.101.115:8080","122.96.59.104:80","122.227.8.190:80","122.96.59.106:80","121.12.120.246:2008","111.11.228.9:81","120.203.214.144:80","122.96.59.107:843","115.236.59.194:3128","113.140.25.4:81","183.221.47.19:8123","111.13.109.52:80","119.147.115.30:8088","115.227.194.241:80");  
// 这个数组里面存储的ip都是来自代理网站,然后后面可以对数组进行随机选取,获得随机一个代理ip 代理采集。
$ch = curl_init(); $timeout = 5; $title=$_GET[‘s‘]; if(!empty($title)){ if ($_GET["page"]=="") { $url="http://demo.btspider.net/".$title."-first-asc-1"; $page=1; } else{ $page=$_GET["page"]; $url="http://demo.btspider.net/".$title."-first-asc-".$page; } $next=$page+1; $url = preg_replace("/(search\/)(.*)/e", "‘search/‘.urlencode(‘$2‘)", $url); // 有些url 进行了decode 所以需要进行encode一下 curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_BASIC); //代理认证模式 // curl_setopt ($ch, CURLOPT_PROXY, ‘111.13.109.26:80‘); // curl_setopt($ch, CURLOPT_PROXYPORT, 80); //代理服务器端口 curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP); //使用http代理模式 curl_setopt($ch, CURLOPT_USERAGENT, ‘Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 GTB5‘); // ‘Mozilla/5.0 (Windows NT 5.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1‘ $htmls = curl_exec($ch); $html = str_get_html($htmls); foreach($html->find(‘#wall‘) as $element){ $fata = $element->find(‘.search-item‘); foreach ($fata as $link) { $hrefs=$link->find("a",0); $hrefin=$hrefs->href; $hrefs->href=http://www.mamicode.com/‘/details‘.$hrefin;"search-item">‘.$link->innertext.‘</div>‘; } } if(!$link){ //在当前页面没有发现数据的时候,返回错误。 echo "对不起,关键词很敏感或者没有资源信息,请刷新或者换一个节点搜索!"; $j=0; } else $j=5; curl_close ( $ch ); ?> <!-- 搜索内容资源介绍结束--><?php echo ‘ <div class="bottom-pager">‘;for ($i=$page-5; $i <=$page+$j ; $i++) { //对于分页 如果当前页面没有数据的时候就不需要返回多余的页数了。如果有就接着当前页 往后累加。 # code.. if ($i>0) { echo ‘<a href="http://www.mamicode.com/search4/‘.$title.‘/‘.$i.‘">‘.$i.‘</a>‘; }} echo ‘<a href="http://www.mamicode.com/search4/‘.$title.‘/‘.$next.‘">下一页</a>‘;echo "</div>";}require(‘footer.php‘); ?>

  后面会慢慢把整个网站的代码全部共享分析一下.思路很清晰 就是细节多点。

 demo:www.btgoogle.com 开源协议:www.btgoogle.com/about

如何写一个磁力搜索小偷