Scrapy是以广度优先还是深度优先的顺序爬行?
默认情况下,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 强制执行所需的顺序,但它会显著降低整体爬行速度。