比特洪流(BitTorrent)是一种内容分发协议,由布拉姆·科恩自主开发。它采用高效的软件分发系统和点对点技术共享大体积文件(如一部电影或电视节目),并使每个用户像网络重新分配结点那样提供上传服务。一般的下载服务器为每一个发出下载请求的用户提供下载服务,而BitTorrent的工作方式与之不同。分配器或文件的持有者将文件发送给其中一名用户,再由这名用户转发给其它用户,用户之间相互转发自己所拥有的文件部分,直到每个用户的下载都全部完成。这种方法可以使下载服务器同时处理多个大体积文件的下载请求,而无须占用大量带宽。
实现这种协议的方式有很多,磁力链接是其中最常见的一种,有磁力链接就等于有了一切。今天我就来讲一下如何使用 Python 爬虫来获取尽可能多的磁力链接。
概述
虽然我在以前写过一个磁力链接的搜索神器,但那个只爬了一个网站,实际上磁力链接的网站有很多,我们要做的是同时爬很多网站。为了确保效率和可靠性,如何提升效率?其实很简单,因为一个网站对应一个服务器,我们可以直接令每一个网站的爬虫作为一个线程,直接同时爬取多个网站,充分利用 I/O 资源,提升效率。那么如何提升可靠性呢?因为一台机器短时间访问一个网站太多次会被封 IP,我们可以控制访问频率(使用 sleep 做等待),也可以让 Web 服务器认为是多个机器在访问,而不是我一个机器(设置代理)。我在这里直接使用 sleep 做等待了,毕竟免费代理太不靠谱了。
抽象共有的属性
对于每一个网站的爬虫,都需要 headers ,关键字和代理这 3 个字段,还有一个出错处理的装饰器(也就是方法/函数),因此我们直接抽象出一个 Spider 基类,因为每一个 spider 是一个线程,所以这个 Spider 基类继承 Thread,代码如下:
定义具体的 Spider
具体的 Spider 定义起来很简单,继承上面定义的抽象的 Spider,然后重写抽象 Spider 的父类 Thread 中的 run 方法就行了,另外不要忘了给这个 run 方法加上出错处理的功能,因为多线程是一处崩溃就全部崩溃的,就算一个网站的爬虫出现了问题,我也不能让它影响其他网站的数据采集和整个程序的运行。其中一个 Spider 的代码如下:
其余的具体的 Spider 和这个差不多,都是在 run 方法中做查找并输出,只是具体的细节不一样而已。
整个爬虫的源代码(不完整)
实际上也不能算是完整的源代码,有几个具体的 Spider 我只是写了个框架,但是大家自己完善一下应该不是什么问题。
本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕,E-mail:xinmeigg88@163.com
本文链接:http://www.glev.cn/tnews/819.html