一、什么是分布式爬虫?

      一般的爬虫是在一台机器上进行爬取某个网站的数据,分布式爬虫是多台机器上同时爬取某个网站的数据。如下图所示:

分布式爬虫系统架构 分布式爬虫原理_数据

 二、如何实现分布式爬取

1.对于实现分布式爬取的疑问:

疑问1:

分布式爬虫是好几台机器在同时运行,如何保证不同的机器爬取页面的时候不会出现重复爬取的问题。

如果出现重复爬取,那么本质还是在一台机器上的爬虫。

疑问2:

分布式爬虫在不同的机器上运行,在把数据爬完后如何保证保存在同一个地方。

如果不能保存到同一个地方,数据储存就会出现问题。

2.问题的解决:

疑问1的解决:      

找到一个中间商,这个中间商负责所有要获取url的分发,保证url不会被重复爬取。

疑问2的解决:

找到一个中间商,数据都储存在中间商那里,保证数据不会被重复存储。

3.中间商是什么?

一个强大的非关系型数据库:Redis。

三、Redis简介

      Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。

      用大白话来说,Redis储存的数据就像字典一样,都是以键值对的形式存在的。

分布式爬虫系统架构 分布式爬虫原理_redis_02

 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架构图】

分布式爬虫系统架构 分布式爬虫原理_redis_03

 

 

 【Scrapy-Redis架构图】

分布式爬虫系统架构 分布式爬虫原理_redis_04

 

 3.分布式爬虫架构图

分布式爬虫系统架构 分布式爬虫原理_分布式爬虫_05

 

 五、分布式爬虫的优点:

  1. 多台机器同时爬取,数据获取效率更高。
  2. 可以充分利用多台机器的带宽。
  3. 可以充分利用多台机器的ip地址。