阅读(1851) (0)

Scrapy是以广度优先还是深度优先的顺序爬行?

2021-06-11 15:42:24 更新

默认情况下,Scrapy使用 LIFO 用于存储挂起请求的队列,这基本上意味着它会爬入 DFO order .这种订单在大多数情况下更方便。

如果你真的想爬进去 BFO order ,您可以通过设置以下设置来完成此操作:

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

当挂起的请求低于配置的值时 ​CONCURRENT_REQUESTS​ , ​CONCURRENT_REQUESTS_PER_DOMAIN​ 或 ​CONCURRENT_REQUESTS_PER_IP​ ,这些请求同时发送。因此,前几个爬行请求很少遵循所需的顺序。将这些设置降低到 1 强制执行所需的顺序,但它会显著降低整体爬行速度。