scrapy-redis分布式爬虫

scrapy-redis是scrapy框架基于redis数据库的组件,用于scrapy项目的分布式开发和部署。

有如下特征:

 分布式爬取

您可以启动多个spider工程,相互之间共享单个redis的requests队列。最适合广泛的多个域名网站的内容爬取。

 分布式数据处理

爬取到的scrapy的item数据可以推入到redis队列中,这意味着你可以根据需求启动尽可能多的处理程序来共享item的队列,进行item数据持久化处理

 Scrapy即插即用组件

Scheduler调度器 + Duplication复制 过滤器,Item Pipeline,基本spider
scrapy-redis整体运行流程如上图:

  1. 首先Slaver端从Master端拿任务(Request、url)进行数据抓取,Slaver抓取数据的同时,产生新任务的Request便提交给 Master 处理;

  2. Master端只有一个Redis数据库,负责将未处理的Request去重和任务分配,将处理后的Request加入待爬队列,并且存储爬取的数据。

Scrapy-Redis默认使用的就是这种策略,我们实现起来很简单,因为任务调度等工作Scrapy-Redis都已经帮我们做好了,我们只需要继承RedisSpider、指定redis_key就行了。

缺点 Scrapy-Redis调度的任务是Request对象,里面信息量比较大(不仅包含url,还有callback函数、headers等信息),

可能导致的结果就是会降低爬虫速度、而且会占用Redis大量的存储空间,所以如果要保证效率,那么就需要一定硬件水平。

安装

pip install scrapy-redis

一般在配置文件中添加如下几个常用配置选项:

使用了scrapy_redis的去重组件,在redis数据库里做去重

DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"

使用了scrapy_redis的调度器,在redis里分配请求

SCHEDULER = "scrapy_redis.scheduler.Scheduler"

在redis中保持scrapy-redis用到的各个队列,从而允许暂停和暂停后恢复,也就是不清理redis queues

SCHEDULER_PERSIST = True

通过配置RedisPipeline将item写入key为 spider.name : items 的redis的list中,供后面的分布式处理item 这个已经由 scrapy-redis 实现,不需要我们写代码,直接使用即可

ITEM_PIPELINES = {
   'scrapy_redis.pipelines.RedisPipeline': 100 ,
}

指定redis数据库的连接参数

REDIS_HOST = '127.0.0.1' 
REDIS_PORT = 6379

如何把项目改为分布式爬虫????

过程只需要修改一下spider的继承类和配置文件

更改settings.py文件

修改继承类
在这里插入图片描述
start_url已经不需要了,修改为:redis_key = “xxxxx”,其中,这个键的值暂时是自己取的名字,

一般用项目名:start_urls来代替初始爬取的url。由于分布式scrapy-redis中每个请求都是从redis中取出来的,因此,在redis数据库中,设置一个redis_key的值,作为初始的url,scrapy就会自动在redis中取出redis_key的值,作为初始url,实现自动爬取。

如果不使用默认的request队列模式(则设置队列模式)

		# 调度器存储request队列的模式(三种)
	    #SpiderPriorityQueue:是scrapy_redis框架(默认)的请求队列形式
	    #(有自己的优先级),按照redis数据库中的有序集合的方式取
	    #SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderPriorityQueue"
	
	    #SpiderQueu:请求队列形式,按照先进先出的方式
	    #SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderQueue"
	    #SpiderStack:请求队列形式,按照先进的后出的方式(类似栈的结构)
	    #SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderStack"`

最后添加起始任务即可

为什么使用redis数据库 好处

Scrapy_redis在scrapy的基础上实现了更多,更强大的功能,
具体体现在:reqeust去重,爬虫持久化,和轻松实现分布式

提供了下面四种组件

  1. Scheduler
  2. Duplication Filter
  3. Item Pipeline
  4. Base Spider
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值