一、什么是分布式爬虫?
一般的爬虫是在一台机器上进行爬取某个网站的数据,分布式爬虫是多台机器上同时爬取某个网站的数据。如下图所示:
二、如何实现分布式爬取
1.对于实现分布式爬取的疑问:
疑问1:
分布式爬虫是好几台机器在同时运行,如何保证不同的机器爬取页面的时候不会出现重复爬取的问题。
如果出现重复爬取,那么本质还是在一台机器上的爬虫。
疑问2:
分布式爬虫在不同的机器上运行,在把数据爬完后如何保证保存在同一个地方。
如果不能保存到同一个地方,数据储存就会出现问题。
2.问题的解决:
疑问1的解决:
找到一个中间商,这个中间商负责所有要获取url的分发,保证url不会被重复爬取。
疑问2的解决:
找到一个中间商,数据都储存在中间商那里,保证数据不会被重复存储。
3.中间商是什么?
一个强大的非关系型数据库:Redis。
三、Redis简介
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。
用大白话来说,Redis储存的数据就像字典一样,都是以键值对的形式存在的。
Redis特点:
多台机器间共享数据。
两个疑问:
1.分布式爬虫是好几台机器在同时运行,如何保证不同的机器爬取页面的时候不会出现重复爬取的问题。
2.分布式爬虫在不同的机器上运行,在把数据爬完后如何保证保存在同一个地方。
因为Redis可以在多台机器间共享数据:
对于第1个疑问:在使用的时候,redis可以判断出来这个url是否被获取过,如果获取过了,那就不再分给其他的机器,如果没有获取过,那就分给其他机器。【成功解决不会重复爬取的问题】
对于第2个疑问:Redis具有数据存储的功能,可以存储从不同机器爬取到的数据。
所以实现分布式爬虫的关键点:使用Redis作为中间商来协调数据与存储数据。
四、如何实现分布式爬虫
由于Scrapy本身并不具备分布式的功能,所以在这里需要安装【Scrapy-Redis】组件,这个组件正是利用了Redis可以分布式的功能,集成到Scrapy框架中,使得爬虫可以进行分布式。
1.Scrapy-Redis的安装:
pip install scrapy-redis==0.7.1
2.Scrapy-Redis架构图:
【Scrapy架构图】
【Scrapy-Redis架构图】
3.分布式爬虫架构图