【系列】scrapy爬虫开发(8)Redis分布式

8.Redis分布式

原生scrapy不支持分布式,不适合大型开发。
安装redis数据库,然后pip install scrapy_redis安装对应的库,可基于redis实现分布式功能。

redis数据库简介

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
Redis是非关系数据库。
Redis是轻量型内存数据库,有限的数据类型,简洁的读写API,运行后不经过磁盘IO,读写迅速,远程增删改查非常容易。既可用于对临时性、经常变动的数据的缓存,也可用于执行分布式任务。
在这里,需要在linux系统中安装redis数据库(master机器,yum install redis),并安装对应的python库(可选,pip install redis)。

scrapy_redis库

scrapy_redis主要内容:
1.不必额外连接redis数据库,只需在配置文件里进行配置,爬虫启动时自动连接redis数据库并自动读取url数据生成请求队列。
2.实现了基于redis数据库以及适用于分布式的Spider基础类。
3.实现了基于redis数据库以及适用于分布式的Scheduler(调度器)、RFPDupeFilter(去重)、PriorityQueue(优先级队列)等,即重写了scrapy框架的核心类。
4.提供了RedisPipeline,可自动将爬取及解析得到的item存到redis数据库里。

默认配置:
scrapy_redis/defaults.py:

# For standalone use.
DUPEFILTER_KEY = 'dupefilter:%(timestamp)s'

PIPELINE_KEY = '%(spider)s:items'

REDIS_CLS = redis.StrictRedis
REDIS_ENCODING = 'utf-8'
# Sane connection defaults.
REDIS_PARAMS = {
   
    'socket_timeout': 30,
    'socket_connect_timeout': 30,
    'retry_on_timeout': True,
    'encoding': REDIS_ENCODING,
}

SCHEDULER_QUEUE_KEY = '%(spider)s:requests'
SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.PriorityQueue'
SCHEDULER_DUPEFILTER_KEY = '%(spider)s:dupefilter'
SCHEDULER_DUPEFILTER_CLASS = 'scrapy_redis.dupefilter.RFPDupeFilter'

START_URLS_KEY = '%(name)s:start_urls'
START_URLS_AS_SET = False

分布式爬虫架构

需要定义一个Master主服务器,用于运行redis数据库,把所有的爬取任务集中统一管理。所有的爬虫实例均视作Slave。

相关配置

在爬虫工程的配置文件里修改或添加一些项:
yourproject/settings.py:

SCHEDULER = "scrapy_redis.scheduler.Scheduler"#基于redis的调度器
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"#基于redis的url去重类
SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.PriorityQueue'#基于redis的优先级队列
SCHEDULER_PERSIST = True
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值