架构学习(二):原生scrapy如何接入scrapy-redis,初步入局分布式

原生scrapy如何接入scrapy-redis,实现初步入局分布式

前言

scrpy-redis分布式

下图是scrpy-redis官方提供的架构图,按我理解,与原生scrapy的差异主要是把名单队列服务器化,也是存储在redis服务中,从而实现分布式。(当然还有piplines采集结果数据的存储差异化,它也可以存储到redis中,实现数据存储分布式)

其实一套完整、健全的采集框架可以在scrapy-redis的基础上加入代理池服务cookie池服务数据存储服务等等,一般来说不会把解析流程放在采集时做,每个环节只做自己的事情,不要越界,所有后面还会有解析入库服务(听听就好,这套流程搞起来太麻烦了,一般开发都是直接scrapy项目集成搞定)。想法还是要有的,这套流程不只是解耦,更是为了监控和日志统计。

碎语

scrapy-redis分布式实现流程网上有很多教程,参考源码和博客教程后(看是看得懂,关键还是得实践),在这些基础上,整理出自己的实现经验。

实现流程

  1. 安装scrapy-redis
powershell 复制代码
pip install scrapy-redis
  1. sessting配置文件中添加下面配置信息
    这是最基本的配置
powershell 复制代码
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
SCHEDULER_PERSIST = True
# SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderPriorityQueue"
# SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderQueue"
# SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderStack"

# redis
REDIS_HOST = '127.0.0.1'
REDIS_PORT = 6379
# REDIS_ENCODING = 'utf-8'
# REDIS_PARAMS = {'password': 'redispasswordqwe'}  # 如果有密码的话
  1. 采集脚本修改必要参数
    scrapy脚本的一般样式如下

    接入scrapy-reids后的一般样式如下

    到一步其实我们就已经实现好代码层的改动了,只要运行成功就表示已经接入成功
  2. 往redis写入名单
    运行后发现采集脚本的逻辑并没有执行,且程序一直在运行着,这是因为scrapy-redis会一直监听redis队列,只要往redis写入名单队列,scrapy-redis就会自动拿到名单并执行采集脚本的逻辑,所以这一步我们需要往redis写入对应的key的名单。
powershell 复制代码
lpush dmoz:start_urls http://www.dmoz-odp.org/  # scrapy-redis的采用的start_urls是列表结构

原生命令or工具

写入成功后就可以看到程序跑起来了。

扩展

使用scrapy-redis后,一般情况下在某个脚本编号下redis会生成三个key,分别是

其中

  1. start_urls是初始名单队列,使用的是列表数据结构
  2. dupefilter是去重队列,这个只有你开启了去重机制才会生成,默认是不开启的,使用的是集合数据结构
  3. requestsscheduler名单队列,我们知道所有名单都是由scheduler发送给调度器的,而scheduler的名单一般是两个来源,一个是初始名单队列;另一个是由Spider提取后发送到scheduler的,这一步就会生成这个key,并且它是有积分优先级机制的(priority),所以它使用的是有序集合数据结构

所有其实我们也可以直接生成requests名单队列,当然生成方式会相对复杂,这个后面分享分享~

结束

好了,分享就到这了,有啥错误的地方请指正~

相关推荐
李小星同志17 分钟前
高级算法设计与分析 学习笔记6 B树
笔记·学习
霜晨月c29 分钟前
MFC 使用细节
笔记·学习·mfc
小江湖199442 分钟前
元数据保护者,Caesium压缩不丢重要信息
运维·学习·软件需求·改行学it
dot.Net安全矩阵1 小时前
.NET内网实战:通过命令行解密Web.config
前端·学习·安全·web安全·矩阵·.net
微刻时光2 小时前
Redis集群知识及实战
数据库·redis·笔记·学习·程序人生·缓存
伯牙碎琴3 小时前
十一、SOA(SOA的具体设计模式)
架构
潮汐退涨月冷风霜4 小时前
机器学习之非监督学习(四)K-means 聚类算法
学习·算法·机器学习
GoppViper4 小时前
golang学习笔记29——golang 中如何将 GitHub 最新提交的版本设置为 v1.0.0
笔记·git·后端·学习·golang·github·源代码管理
羊小猪~~4 小时前
深度学习基础案例5--VGG16人脸识别(体验学习的痛苦与乐趣)
人工智能·python·深度学习·学习·算法·机器学习·cnn
Charles Ray5 小时前
C++学习笔记 —— 内存分配 new
c++·笔记·学习