当前位置: 代码迷 >> 综合 >> scrapy-redis中url队列类型的控制(zset、list)
  详细解决方案

scrapy-redis中url队列类型的控制(zset、list)

热度:86   发布时间:2024-01-06 14:12:24.0

说明:scrapy-redis在进行数据请求是能够实现url的自动保存到redis中,但是保存的数据结构类型是和setting配置文件中的优先级队列的选择挂钩的。

注意:当url的保存类型和url的提取方式不匹配会报错

比如:通过list数据结构的数据提取的方式提取zset中的数据

redis中list的数据提取方式:lpush key

redis中zset的数据提取方式:zrange key start end

(error) WRONGTYPE Operation against a key holding the wrong kind of value

一、三种优先级队列:

# 指定排序爬取地址时使用的队列,
# 默认的 按优先级排序(Scrapy默认),由sorted set实现的一种非FIFO、LIFO方式。
# SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.SpiderPriorityQueue'
# 可选的 按先进先出排序(FIFO)
SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.SpiderQueue'
# 可选的 按后进先出排序(LIFO)
# SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.SpiderStack'

二、优先级队列对应url在redis中保存的数据类型

scrapy-redis默认的优先级队列:zset

先进先出(FIFO):list

先进后出(LIFO):list

三、队列提取方式的选择

REDIS_START_URLS_AS_SET = True

可以在setting配置文件中配置这一行代码。

True:redis中以set集合提取数据的方式提取

False:redis中以list列表提取数据的方式提取

  相关解决方案