zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

scrapy_redis的使用

Redisscrapy 使用
2023-09-14 09:06:36 时间

配置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