Scrapy采集的顺序是深度优先还是广度优先?

Posted 爬了么

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scrapy采集的顺序是深度优先还是广度优先?相关的知识,希望对你有一定的参考价值。

问题描述

Scrapy采集的顺序是深度优先还是广度优先?

问题解答

默认情况下,Scrapy使用LIFO(后进先出)队列存储待发出的请求,这基本上意味着它按DFO(深度优先)顺序采集数据。这种顺序在大多数情况下都比较方便。如果你确实想要以真实的BFO(广度优先)顺序采集数据,可以通过设置以下设置来实现:

DEPTH_PRIORITY = 1
SCHEDULER_DISK_QUEUE = 'scrapy.squeues.PickleFifoDiskQueue'
SCHEDULER_MEMORY_QUEUE = 'scrapy.squeues.FifoMemoryQueue'

但是事情又并非如此绝对,当队列中待采集的请求低于CONCURRENT_REQUESTS, CONCURRENT_REQUESTS_PER_DOMAINCONCURRENT_REQUESTS_PER_IP的配置值时,将并发发送这些请求。因此,爬虫的前几个请求很少遵循所需的顺序。而如果将这些设置降低到1并强制执行所需的顺序,会显著降低整体爬虫的爬网速度[1]

深度与广度优先[2]

  • 深度优先:一个一个节点往下找,不找兄弟节点,每一个深度一个节点,先进去的节点最后出来,也即是先进后出队列。
  • 广度优先:  横向取值,一个节点有兄弟节点,一同被取出来,同一个深度内有多个节点,先进去的节点的最先出来,也即是先进先出队列。

参考资料

[1]

Scrapy官方文档: https://docs.scrapy.org/en/latest/faq.html#does-scrapy-crawl-in-breadth-first-or-depth-first-order

[2]

深度与广度优先: https://www.jianshu.com/p/bff70b786bb6

- END -


以上是关于Scrapy采集的顺序是深度优先还是广度优先?的主要内容,如果未能解决你的问题,请参考以下文章

Scrapy实战2:爬虫深度&&广度优先算法

第三百三十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—深度优先与广度优先原理

BFS/DFS 广度/深度优先搜索

PHP数据结构-图的遍历:深度优先与广度优先

二叉树深度优先遍历和广度优先遍历

刚入行前端,深度优先还是广度优先?