Python如何实现分布式爬虫「建议收藏」

Python如何实现分布式爬虫「建议收藏」经过前面的介绍,相信大家已经对Python爬虫有了初步的了解,对一些常见的网站爬虫,应该也能够轻松实现。不难发现,我们在使用单一爬虫进行爬取数据时有明显缺陷——速度慢,当我们需要进行大规模数据采集时,这种速度难以满足我们的需求。此时,就需要分布式爬虫的帮助了。由于对分布式系统不做过多解释,有兴趣的朋友可以自行查阅了解,我们将重点放在分布式爬虫上,下面是几点简单介绍:Ⅰ.简介...

    经过前面的介绍,相信大家已经对Python爬虫有了初步的了解,对一些常见的网站爬虫,应该也能够轻松实现。不难发现,我们在使用单一爬虫进行爬取数据时有明显缺陷——速度慢,当我们需要进行大规模数据采集时,这种速度难以满足我们的需求。此时,就需要分布式爬虫的帮助了。由于对分布式系统不做过多解释,有兴趣的朋友可以自行查阅了解,我们将重点放在分布式爬虫上,下面是几点简单介绍:

Ⅰ. 简介

    一. 什么是分布式爬虫:
1. 默认情况下,我们使用scrapy框架进行爬虫时使用的是单机爬虫,就是说它只能在一台电脑上运行,因为爬虫调度器当中的队列queue去重和set集合都只能在本机上创建的,其他电脑无法访问另外一台电脑上的内存和内容。
2. 分布式爬虫实现了多台电脑使用一个共同的爬虫程序,它可以同时将爬虫任务部署到多台电脑上运行,这样可以提高爬虫速度,实现分布式爬虫。

    二. 分布式爬虫的前提:
1. 要保证每一台计算机都能够正常的执行scrapy命令,能够启动爬虫,这是对计算机硬件的最低水平、计算机系统环境和网络等多方面的基本需求,不再赘述。
2. 要保证所有的爬虫程序可以访问同一个队列一个set集合。

针对第二个条件,需要以下特殊声明:
想要满足第二个条件,我们要使用scrapy_redis。想要保证多台机器共用一个queue队列和set集合,在scrapy框架中,是需要结合scrapy_redis完成的。分布式爬虫可以让所有机器上的爬虫程序,从同一个queue队列中获取request请求,并且每个机器取出request,请求的对象是不一样的,直到所有的request被请求完毕。

    三. 分布式爬虫的适用范围/要求:
1. 分布式爬虫对电脑的性能有一定的要求(特别是处理器,也就是常说的cpu)。
2. 分布式爬虫对网速也有一定的要求 。

注意:电脑性能和网速如果不是很好的话,分布式爬虫效率反而不如单一爬虫。并不是任何时候都可以使用分布式爬虫,如果你需要大规模获取数据,不满足于单一爬虫的效率,而且硬件条件能够得到满足,那么就使用分布式爬虫吧。当然,大部分情况下,由于对硬件有要求,一些刚成立的小公司可能负担不起这样的成本。

    四. 分布式爬虫经常和redis数据库一起使用:
redis数据有几个特点,首先它的优点是:
1. 默认使用持久化数据方式
2. 体积小,使用方便
3. 如果存储数据量比较大的话,启动速度很快
4. 数据库中的数据和内存中的数据可以相互访问
最主要的缺点是:从安全性角度来说,数据持久化可能会容易崩溃,造成数据丢失

    五. 要实现分布式爬虫,首先要配置服务器主从:
配置主从的目的:
1.达到一个备份的功能,一旦master出现崩溃而数据库中还有数据的话,可以将其中的一个slave重新设置为主服务器,从而恢复redis的正常运行。
2.一个redis服务器负责读写,性能较低,通过主从来减轻一个redis的压力。

    六. redis主从的配置:
redis作为缓存服务器,主要是将数据在内存中进行缓存,但是一台机器的内存和性能是有限的,当对于redis数据库的数据进行读写量较大时,那么一台redis就不能满足需求了,此时需要将redis部署到多台机器上,用以写入数据的redis,称之为master,而只负责读取数据的redis,称之为slave。
    七. redis主从的特点:
1.master只负责写入数据,slave只负责读取数据。
2.当slave创建的时候,会向master发送一个同步的命令,master接收到命令以后,将数据同步给slave。
3.master只能有一个,slave可以有多个。

Ⅱ. redis的安装

    前面大概了解了一下redis的作用,现在进入实际操作,从最基本的安装做起。

1. 进入redis下载链接下载最新版本,如图所示,本文采用的是3.2.100版本。

下载链接为:https://github.com/MicrosoftArchive/redis/releases

Python如何实现分布式爬虫「建议收藏」

2.  下载完成后将其解压至Python同级目录(方便管理),为了使用方便,也可以将redis路径添加进Path环境变量。

3.  完成解压后,找到配置文件redis.windows.conf,使用任意编译器打开,根据自己需要修改

Python如何实现分布式爬虫「建议收藏」

首先我们要注销第56行:

Python如何实现分布式爬虫「建议收藏」

接着在75行添加''protected-mode no''

Python如何实现分布式爬虫「建议收藏」

最后在123行添加''daemonize yes''

Python如何实现分布式爬虫「建议收藏」

4. 打开一个终端,进入redis文件夹后,输入命令redis-server redis.windows.conf开启服务端,若出现下图所示界面,则表示服务端开启成功。服务端打开后,在停用redis前切记不能关闭,否则之后的所有操作全部无法完成。

Python如何实现分布式爬虫「建议收藏」5. 打开一个新的终端,输入命令redis-cli -h 127.0.0.1 -p 6379,创建一个客户端 ,然后设置键值对,设置值 set key1 XX  获取值 get key1。

Python如何实现分布式爬虫「建议收藏」

6. 如果想要在让B电脑连接到A电脑上,需要获取A电脑的IP,B电脑需要设置redis-cli -h A电脑ip,在B电脑终端输入命令get key1,就可以获取刚才A电脑上的key1值,如果出错,需要设置A电脑上的配置文件,bind127.0.0.1注释掉,dazmoize no,关系守护进程 ,protected-mode no 关闭保护模式(就是前文需要修改配置文件的三行代码)。

注:收到系统通知,后续步骤不便展示。

架构君码字不易,如需转载,请注明出处:https://javajgs.com/archives/209572
0
   

发表评论