Python之分布式爬虫的实现步骤

什么是分布式爬虫?

默认情况下,scrapy爬虫是单机爬虫,只能在一台电脑上运行,因为爬虫调度器当中的队列queue去重和set集合都是在本机上创建的,其他电脑无法访问另一台电脑上的内存中的内容。分布式爬虫是一个用共同的爬虫程序,同时部署到多台电脑上运行,这样可以提高爬虫速度,实现分布式爬虫。

今天我就来给大家讲一下使用scrapy_redis实现分布式爬虫

第一步:

创建一个scrapy爬虫项目,完善代码爬出你要爬取的数据,至于如何创建不知道的小伙伴请看我前面的关于scrapy框架的使用的博客

第二步:

更改scrapy爬虫项目中的一些内容

1.引入scrapy_redis,下面的代码使用一个就可以,RedisCrawlSpider和RedisSpider运行步骤相同,

from scrapy_redis.spiders import RedisCrawlSpider
# from scrapy_redis.spiders import RedisSpider

 将继承换为RedisCrawlSpider或RedisSpider

Python之分布式爬虫的实现步骤_第1张图片

Python之分布式爬虫的实现步骤_第2张图片

2.注释掉start_urls,添加一个redis_key='类名:start_urls',当然这里的类名可以随便写,不过规范的写法是你的"爬虫类名:+start_urls",这里字符串中类名不分大小写

redis_key='类名:start_urls'

3.setting文件中添加下面几句代码

# 使用scrapy_redis里的去重组件,不使用scrapy默认的去重方式
DUPEFILTER_CLASS = 'scrapy_redis.dupefilter.RFPDupeFilter'
# 使用scrapy_redis里的调度器组件,不使用默认的调度器
# scheduler调度器
SCHEDULER = 'scrapy_redis.scheduler.Scheduler'
# 允许暂停,redis请求记录不丢失
SCHEDULER_PERSIST = True
# # 默认的scrapy_redis请求队列形式(按优先级)
# # priority优先权
# SCHEDULER_QUEUE_CLASS ='scrapy_redis.queue.SpiderPriorityQueue'
# 连接服务器端的redis数据库
REDIS_URL = 'redis://root:@192.168.52.176:6379'

REDIS_URL = 'redis://root:@192.168.52.176:6379'  @后面写要连接到的服务器端的IP,6379是默认的端口号

4.在settings文件中解注释ITEM_PIPELINES 并将红框中的代码添加进去,使数据可以存入redis数据库中,

Python之分布式爬虫的实现步骤_第3张图片

第三步:

1.服务端修改redis.windows.conf文件,在如图所示的位置添加: bind 服务端IP。

Python之分布式爬虫的实现步骤_第4张图片

2.将你的代码发给另一台主机并打开

3.开启服务端,不知道如何开启的小伙伴可以看一下我的上篇博客

4.两台主机同时在控制台输入 scrapy  crawl   爬虫名,运行爬虫程序,因为没有start_urls所以会等待传入开始网址

5.开启服务端的主机另打开一个命令提示符,连接本地服务器,输入lpush + 第二步中的redis_key的值+ 开始网址

例:

lpush 类名:start_urls http://blog.jobbole.com/all-posts/

传入开始网址之后爬虫程序会接收到 ,然后开始爬虫

注意:客户端的小伙伴只需要将服务端的代码文件复制过来,打开运行就行了,不需要做其他操作

 

你可能感兴趣的:(Python之分布式爬虫的实现步骤)