分布式爬虫的介绍

目录

分布式爬虫

Scrapy-Redis

正常scrapy单机爬虫

 分布式

安装

scrapy-redis提供四种组件

Scheduler(调度器)

Duplication Filter (去重) 

ltem Pipeline(管道)

Base Spider(爬虫类)


分布式爬虫

分布式爬虫是由一组通过网络进行通信、为了完成共同的爬虫任务而协调工作的计算机节点组成的系统 。分布式爬虫是将多台电脑组合起来,共同完成一个爬虫任务,大大提高爬取效率。

PS:一般情况下在同一局域网内才能实现爬取。

Scrapy-Redis

Scrapy 是一个通用的爬虫框架,但是不支持分布式, Scrapy-redis是为了更方便地实现 Scrapy 分布式爬取,而提供了一些 以redis为基础 的组件。

正常scrapy单机爬虫

分布式爬虫的介绍_第1张图片

 分布式

分布式爬虫的介绍_第2张图片

安装

pip install scrapy-redis 

scrapy-redis提供四种组件

  • Scheduler(调度器)

Scrapy 改造了 Python 本来的 collection.deque(双向队列) 形成 了自己的 Scrapy queue ,但是 Scrapy 多个 spider 不能共享待 爬取队列Scrapy queue ,即 Scrapy 本身不支持爬虫分布式 , scrapy-redis 的解决是把这个 Scrapy queue 换成 redis 数据库(也是指 redis队列) ,便能让 多个spider去同一个数据库里读取 ,这样实现共享爬取队列。

Redis支持多种数据结构,这些数据结构可以很方便的实现这 样的需求:

  • 列表有lpush(),lpop(),rpush), rpop(),这些方法可以实 现先进先出,或者先进后出式的爬取队列。
  • 集合元素是无序且不重复的,可以很方便的实现随机排序且不重复的爬取队列。
  • ScrapyRequest带有优先级控制Redis中的集合也是带有分数表示的,可以用这个功能实现带有优先级调度的爬取队列。
  • Duplication Filter (去重) 

Scrapy 自带去重模块,该模块使用的是 Python 中的集合类 型。该集合会记录每个请求的指纹,指纹也就是 Request的散列值 。指纹的计算采用的是hashlib sha1() 方法。计算的字段 包含了,请求的Method URL Body Header 这几个内容,这些字符串里面只要里面有一点不同,那么计算出来的指 纹就是不一样的。也就是说,计算的结果是加密后的字符串,这就是请求指纹。通过加密后的字符串,使得每个请求都是唯一的,也就是指纹是惟一的。并且指纹是一个字符串,在判断
字符串的时候,要比判断整个请求对象容易。所以采用了 指纹作为判断去重的依据
  • ltem Pipeline(管道)

引擎将(Spider返回的)爬取到的ltem给ltem Pipeline scrapy-redis 的ltem Pipeline将爬取到的Item存入redis的 items queue。 修改过 ltem Pipeline 可以很方便的根据 key items
queue 提取 item ,从而 实现 items processes集群
  • Base Spider(爬虫类)

不再使用scrapy原有的Spider类,重写的RedisSpider继承了Spider和RedisMixin这两个类

你可能感兴趣的:(python爬虫笔记,scrapy,redis,网络爬虫,爬虫,分布式)