2015-06-30 254 views
2

我很難弄清楚Scrapy是如何工作的(或者我需要如何使用它)。 這個問題有點寬泛 - 更多的理解。Scrapy - 抓取蜘蛛的流程

我設置了一個CrawlSpider並投入了6個啓動網址。
從這些(24個項目來颳去每個啓動url),我預計大約144行結束在我的數據庫中,但我現在只有18。

所以我用

def parse_start_url(self, response): 

,以避免併發症的規則現在。 現在Scrapy應該抓取這6個URL並抓取它們,然後處理這些頁面上的項目。 但相反,它似乎需要這6個網址,然後檢查這些網頁上的每個鏈接,並首先遵循這些鏈接 - 這可能嗎?
Scrapy是否只需要URL 1,掃描所有鏈接並遵循允許的一切?
它什麼時候需要URL 2?

回答

3

您可以找到official documentation page你的答案,但對於完整性,我將它貼在這裏:

默認情況下,Scrapy使用LIFO隊列用於存儲待處理的請求, 這基本上意味着它爬在DFO訂購。在大多數情況下,此訂單更方便 。如果你想在真正的BFO爲了抓取, 您可以通過設置以下設置做到這一點:

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

注: 你描述的抓取順序的方式是usuall稱爲DFS(深度 - 第一次搜索)或BFS(廣度優先搜索)。 Scrapy使用DFO和BFO('O'是'訂單',但含義相同)。

+1

啊是的 - 非常好。如果不知道正確的關鍵字(LIFO/DFO/BFO等),就很難找到它。不得不從該頁面上沒有記錄的scrapy import squeue'。 但現在結果看起來更好。 – Chris