scrapy | scrapy-redis实现分布式爬取:原理,实战案例(虚拟机)

本文详细介绍了使用scrapy-redis实现分布式爬虫的原理和实战步骤,包括分布式爬虫的概念、scrapy-redis的组件如Scheduler、Duplication Filter和Item Pipeline的作用,以及如何配置和运行分布式爬虫。通过scrapy-redis,可以利用Redis的特性实现爬虫的URL去重和任务调度,从而提高爬取效率。
摘要由CSDN通过智能技术生成

1.概念:分布式爬虫

由于需要爬取的数据量大,任务多,一台机器效率太低,需要多台机器共同协作处理。分布式爬虫将多台主机组合起来, 共同完成一个爬取任务,快速高效地提高爬取效率。

分布式爬虫可以分为若干个分布式层级,不同的应用可能由其中部分层级构成。

大型分布式爬虫主要分为以下3个层级:分布式数据中心、分布式抓取服务器及分布式爬虫程序。整个爬虫系统由全球多个分布式数据中心共同组成,每个数据中心又由多台高速网络连接的抓取服务器构成,而每台服务器又可以部署多个爬虫程序。通过多层级的分布式爬虫体系,才可能保证抓取数据的及时性和全面性。

 

作为一个分布式爬虫,是需要有一个Master端(核心服务器)的,在Master端,会搭建一个数据库,用来存储start_urls、request、items。Master的职责是负责url指纹判重,Request的分配,以及数据的存储(一般在Master端会安装一个mongodb用来存储items)。出了Master之外,还有一个角色就是slaver(爬虫程序执行端),它主要负责执行爬虫程序爬取数据,并将爬取过程中新的Request提交到Master的数据库中。

如上图,假设我们有四台电脑:A, B, C, D ,其中任意一台电脑都可以作为 Master端 或 Slaver端。整个流程是: 

  1. 首先Slaver端从Master端拿任务(Request、url)进行数据抓取,Slaver抓取数据的同时,产生新任务的Request便提交给 Master 处理;
  2. Master端只有一个数据库,负责将未处理的Request去重和任务分配,将处理后的Request加入待爬队列,并且存储爬取的数据。

2.背景

Scrapy 是一个通用的爬虫框架,但是不支持分布式。有能人改变了scrapy的队列调度,将起始的网址从start_urls里分离出来,改为从redis数据库读取,多个客户端可以同时读取同一个redis,从而实现了分布式的爬虫。

Redis,非关系型数据库,Key-Value形式存储,结构灵活,是内存中的数据结构存储系统,处理速度快,性能好;并且能提供队列、集合等多种存储结构,方便队列维护。

Scrapy-redis是为了更方便地实现Scrapy分布式爬取,而提供了一些以redis为基础的组件(仅有组件)。通过Scrapy-redis可以快速地实现简单分布式爬虫程序,该组件本质上提供了三大功能:

  • scheduler --调度器
  • dupefilter  -- URL去重规则
  • item pipeline --数据持久化
  • 6
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值