前言
問題:有朋友問起這究竟scrapy是廣度優(yōu)先還是深度優(yōu)先?
回答:
深度優(yōu)先是指網絡爬蟲會從起始頁開始,一個鏈接一個鏈接跟蹤下去,處理完這條線路之后再轉入下一個起始頁,繼續(xù)追蹤鏈接
廣度優(yōu)先,有人也叫寬度優(yōu)先,是指將新下載網頁發(fā)現的鏈接直接插入到待抓取URL隊列的末尾,也就是指網絡爬蟲會先抓取起始頁中的所有網頁,然后在選擇其中的一個連接網頁,繼續(xù)抓取在此網頁中鏈接的所有網頁
經過官方文檔查詢,因為scrapy使用的是后進先出隊列,基本可以看成是深度優(yōu)先(DFO)。如果需要設置廣度優(yōu)先(BFO),可以在settings中添加以下代碼。另外當DEPTH_PRIORITY為正值時越靠廣度優(yōu)先,負值則越靠深度優(yōu)先,默認值為0
settings中設置方法
DEPTH_PRIORITY = 1
SCHEDULER_DISK_QUEUE = 'scrapy.squeues.PickleFifoDiskQueue'
SCHEDULER_MEMORY_QUEUE = 'scrapy.squeues.FifoMemoryQueue'