zoukankan      html  css  js  c++  java
  • scrapy_redis的使用

    配置Scrapy-Redis

    配置Scrapy-Redis非常简单,只需要修改一下settings.py配置文件即可。

    1. 核心配置

    首先最主要的是,需要将调度器的类和去重的类替换为Scrapy-Redis提供的类,在settings.py里面添加如下配置即可

    SCHEDULER = "scrapy_redis.scheduler.Scheduler"
    DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
    

    2. Redis连接配置

    第一种,直接在settings.py里面配置为REDIS_URL变量即可:

    REDIS_URL = 'redis://:foobared@120.27.34.25:6379'
    

    第二种

    REDIS_HOST = '120.27.34.25'
    REDIS_PORT = 6379
    REDIS_PASSWORD = 'foobared'
    

    注意:如果配置了REDIS_URL,那么Scrapy-Redis将优先使用REDIS_URL连接,会覆盖上面的三项配置。如果想要分项单独配置的话,请不要配置REDIS_URL。

    3. 配置调度队列

    此项配置是可选的,默认使用PriorityQueue。如果想要更改配置,可以配置SCHEDULER_QUEUE_CLASS变量,如下所示:

    SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.PriorityQueue'
    SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.FifoQueue'
    SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.LifoQueue'
    

    4. 配置持久化

    此配置是可选的,默认是False。Scrapy-Redis默认会在爬取全部完成后清空爬取队列和去重指纹集合。

    如果不想自动清空爬取队列和去重指纹集合,可以增加如下配置:

    SCHEDULER_PERSIST = True
    

    将SCHEDULER_PERSIST设置为True之后,爬取队列和去重指纹集合不会在爬取完成后自动清空,如果不配置,默认是False,即自动清空。

    值得注意的是,如果强制中断爬虫的运行,爬取队列和去重指纹集合是不会自动清空的。

    在本项目中不进行任何配置,我们使用默认配置。

    5. 配置重爬

    此配置是可选的,默认是False。如果配置了持久化或者强制中断了爬虫,那么爬取队列和指纹集合不会被清空,爬虫重新启动之后就会接着上次爬取。如果想重新爬取,我们可以配置重爬的选项:

    SCHEDULER_FLUSH_ON_START = True
    

    这样将SCHEDULER_FLUSH_ON_START设置为True之后,爬虫每次启动时,爬取队列和指纹集合都会清空。所以要做分布式爬取,我们必须保证只能清空一次,否则每个爬虫任务在启动时都清空一次,就会把之前的爬取队列清空,势必会影响分布式爬取。

    注意,此配置在单机爬取的时候比较方便,分布式爬取不常用此配置。

    在本项目中不进行任何配置,我们使用默认配置。

    6. Pipeline配置

    此配置是可选的,默认不启动Pipeline。Scrapy-Redis实现了一个存储到Redis的Item Pipeline,启用了这个Pipeline的话,爬虫会把生成的Item存储到Redis数据库中。在数据量比较大的情况下,我们一般不会这么做。因为Redis是基于内存的,我们利用的是它处理速度快的特性,用它来做存储未免太浪费了,配置如下:

    ITEM_PIPELINES = {
        'scrapy_redis.pipelines.RedisPipeline': 300
    }
    

    本项目不进行任何配置,即不启动Pipeline。

    到此为止,Scrapy-Redis的配置就完成了。有的选项我们没有配置,但是这些配置在其他Scrapy项目中可能用到,要根据具体情况而定。

    本文摘选自公众号:进击的coder,文章完整链接:https://mp.weixin.qq.com/s/JPkwHioLOC_27xfQCeWYhg

  • 相关阅读:
    另一种方式实现事务码SE16里的结果集修改
    如何修改Fiori Launchpad里Tile计数调用的时间间隔
    Opportunity的chance of success的赋值逻辑
    Smart template的控件能否当成普通控件来用
    一个查看UI5控件所有公有方法的小技巧
    到底哪种类型的错误信息会阻止business transaction的保存
    Java实现 LeetCode 453 最小移动次数使数组元素相等
    Java实现 LeetCode 453 最小移动次数使数组元素相等
    Java实现 LeetCode 453 最小移动次数使数组元素相等
    Java实现 LeetCode 452 用最少数量的箭引爆气球
  • 原文地址:https://www.cnblogs.com/c-x-a/p/10943026.html
Copyright © 2011-2022 走看看