scrapy_redis的基本使用和介绍

九、scrapy_redis

1.分布式是什么?

简单的说,分布式就是不同的节点(服务器、ip不同)共同完成一个任务

2.scrapy_redis的概念

scrapy_redis是scrapy框架的基于redis的分布式组件

3.scrapy_redis的作用

通过持久化请求队列和请求的指纹集合来实现:

  • 断点续爬
  • 分布式快速爬取
4.scrapy_redis的工作流程
  • 在scrapy_redis中,所有的待抓取的request的对象和去重的request对象指纹都存在所有的服务器公用的redis中
  • 所有的服务器中的scrapy进程公用同一个redis中的request对象的队列
  • 所有的request对象存入redis前,都会通过该redis中的request指纹集合进行判断,之前是否已经存入过
  • 在默认的情况下所有的数据会保存在redis中
配置项:
  • DUPEFILTER_CLASS 设置重复过滤器的模块
  • SCHEDULER 设置调度器 scrapy_redis中的调度器具有与数据库交互的功能
  • SCHEDULER_PERSIST 设置当爬虫结束的时候是否保持redis数据库中的去重集合与任务队列
  • 设置redis数据库
    • REDIS_URL = “redis://127.0.0.1:6379”

filter函数在python3中返回一个过滤器对象,在python2中返回一个列表

5.实现分布式爬虫

通过观察代码:

  • 1.继承字父类RedisSpier

  • 2.增加了一个redis_key的键,没有start_urls,因为分布式中,如果每一台电脑都请求一次start_url就会重复

  • 3.多了一个__init__方法,该方法不是必须的,可以手动指定allow_domains

  • 4.启动方法:

    • 在每个节点正确的目录下执行scrapy crawl 爬虫名,使该节点的scrapy_redis爬虫程序就位
    • 在共用的redis中,lpush redis_key ‘start_url’,使全部节点真正的开始运行
  • 5.settings.py关键的配置

    • DUPEFILTER_CLASS = 'scrapy_redis.duperfilter.RFPDupefilter'
      SCHEDULER = 'scrapy_reds.scheduler.Scheduler'
      ScheDULER_PERSIST = True
      
      ITEM_PIPELINES = {
          ...
          'scrapy_redis.pipelines.RedisPipeline':400,
      }
      REDIS_URL = "reds://127.0.0.1:6379"
      
  • 小结:

  • 1.scrapy_redis的含义和能够实现的功能

    • scrapy是框架
    • scrapy_redis是scrapy的组件
    • scrapy_redis能够实现断点续爬和分布式爬虫
  • 2.scrapy_reds流程和实现原理

    • 在scrapy框架流程的基础上,把存储request对象放到了redis的有序集合中,利用该有序集合实现了请求队列
    • 并对request对象生成指纹对象,也存储在同一redis的集合中,利用request指纹避免发送重复的请求
  • 3.reqeust对象进入队列的条件

    • request的指纹不在集合中
    • request的dont_filter为True,即不过滤
  • 4.reqeust指纹的实现

    • 请求方法
    • 排序后的请求地址
    • 排序并处理过的请求体或空字符串
    • 用hashlib.sha1()对以上内容进行加密
  • 5.scrapy_redis实现增量式爬虫、分布爬虫

  • 6.启动方式 scrapy runspider 爬虫文件名

分布式爬虫编写流程
  • 1.先编写普通爬虫
    • 创建项目
    • 明确目标
    • 创建爬虫
    • 保存内容
  • 2.改造成分布式爬虫
    • 1.改造爬虫
      • 1.导入scrapy_redis中的分布式爬虫类
      • 2.继承爬虫类
      • 3.注销start_url & allowed_domains
      • 4.设置redis_key获取start_urls
      • 5.设置__init获取允许的域
    • 2.改造配置文件
      • copy配置参数 5个
Scrapy Redis是一个用于分布式爬取网页的Python框架。它是基于Scrapy框架的扩展,采用Redis作为分布式队列,可以在多个爬虫节点之间共享任务和数据。通过引入scrapy_redis.spider文件中的RedisSpider类,可以将原来继承的scrapy.Spider类改为RedisSpider类,从而实现对分布式爬虫的支持。 在使用分布式爬虫的过程中,首先需要将项目配置为分布式,并将项目拷贝到多台服务器中。然后启动所有的爬虫项目,这样每个爬虫节点都可以独立运行。接下来,在主redis-cli中使用lpush命令将需要爬取的网址推送到Redis队列中。这样,所有的爬虫节点都会开始运行,同时获取不同的任务和数据,实现分布式爬取的效果。 要使用Scrapy Redis进行分布式爬取,首先需要安装scrapy_redis包。可以通过在CMD工具中执行命令"pip install scrapy_redis"来进行安装。安装完成后,就可以在项目中使用scrapy_redis进行分布式爬取了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Scrapy基于scrapy_redis实现分布式爬虫部署](https://blog.csdn.net/baoshuowl/article/details/79701303)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值