Login
网站首页 > 文章中心 > 其它

基于scrapy-redis的分布式爬虫_scrapy redis增量爬虫

作者:小编 更新时间:2023-08-22 18:17:59 浏览量:13人看过

scrapy能否实现分布式爬虫?


因为多台机器上部署的scrapy会各自拥有各自的调度器,这样就使得多台机器无法分配start_urls列表中的url.(多台机器无法共享同一个调度器)

多台机器爬取到的数据无法通过同一个管道对数据进行统一的数据持久出存储.(多台机器无法共享同一个管道)

二.实现分布式爬虫的方式

基于scrapy-redis的分布式爬虫_scrapy redis增量爬虫-图1

基于scrapy-redis组件的分布式爬虫

scrapy-redis组件中为我们封装好了可以被多台机器共享的调度器和管道,我们可以直接使用并实现分布式数据爬取.

实现方式:

①基于该组件的RedisSpider类

三.实现分布式爬虫的步骤

上述两种不同方式的分布式实现流程是一样的

  1. 安装模块


  2.配置数据库(redis.windows.conf)

- 注释该行:
  bind 12⑦0.0.1  #表示可以让其他ip访问redis 

- 将yes该为no:
  protected-mode no   #表示可以让其他ip操作redis

  ③修改爬虫文件中的代码

 #修改之前要记得导包from scrapy_redis.Spiders import RedisSpider
    #把爬虫文件中父类修改成RedisSpider或者RedisCrawlSpider--看原爬虫基于的父类是什么,
    #如果原来是基于Spider则更改为RedisSpider
    #如果原爬虫是基于CrawlSpider,则更改为RedisCrawlspider 

爬虫文件ct.py


item.py

import scrapy


class ChoutiItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
title=scrapy.Field()
author=scrapy.Field()
 #同时要注释掉原生的管道,使用redis封装好的共享的管道
  ITEM_PIPELINES = { 
        'scrapy_redis.pipelines.RedisPipeline': 400 
                      }

  ⑤在settings文件中进行相关配置,开启使用scrapy-redis组件中封装好的调度器

#使用scrapy-redis组件的去重队列,使用redis集合来保存请求对象的指纹 ,从而实现去重的持久化
    DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter" 
  #使用scrapy-redis组件自己的调度器 
    SCHEDULER = "scrapy_redis.scheduler.Scheduler" 
  #配置调度器是否要持久化, 也就是当爬虫结束了, 要不要清空Redis中请求队列和去重指纹的set.如果是True, 就表示要持久化存储, 就不清空数据, 否则清空数据
  #当这个参数为False的时候,就是没有持久化保存数据,就会再下次启动爬虫文件的时候从新爬取,从0 开始

     SCHEDULER_PERSIST = True

  ⑥ 在配置文件中进行爬虫程序链接redis的配置:

  REDIS_HOST = 'redis服务的ip地址' #数据库所在机器上IP地址
  REDIS_PORT = 6379 
  REDIS_ENCODING = 'utf-8' 
  #REDIS_PARAMS = {'password':'123456'}
  

  #这么配置也可以
  REDIS_URL='redis://12⑦0.0.1:6379'

  ⑦ 开启redis服务器:redis-server 配置文件



  9. 运行爬虫文件:scrapy runspider 爬虫文件名.py

#这个命令要到爬虫项目里面才能运行
scrapy runspider ct.py


#爬虫文件就可以监听端口,等待我们往调度器管道里丢一个起始url
#这个时候爬虫的状态应该是夯筑了,等待我们给他一个reidis_key

基于scrapy-redis的分布式爬虫_scrapy redis增量爬虫

基于scrapy-redis的分布式爬虫_scrapy redis增量爬虫

#lpush redis_key属性值 起始url
#插入的人key就是爬虫文件redis_key的值
lpush chouti https://dig.chouti.com/  

  11.查看数据库

基于scrapy-redis的分布式爬虫_scrapy redis增量爬虫

三.深度优先和的广度优先 

在scrapy-redis中,默认的是 深度优先

如果想变成 广度优先,在配置文件中写入

- DEPTH_PRIORITY = 1\n,
- SCHEDULER_DISK_QUEUE = 'scrapy.squeues.PickleFifoDiskQueue'\n,
- SCHEDULER_MEMORY_QUEUE = 'scrapy.squeues.FifoMemoryQueue'\n,

深度优先和广度优先的对比

- 广度优先:不全部保留结点,占用空间少;运行速度慢\n,    - 深度优先:保留全部结点,占用空间大;运行速度快

以上就是土嘎嘎小编为大家整理的基于scrapy-redis的分布式爬虫相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章