天天看點

同時運作多個scrapy爬蟲的幾種方法(自定義scrapy項目指令)

  試想一下,前面做的實驗和例子都隻有一個spider。然而,現實的開發的爬蟲肯定不止一個。既然這樣,那麼就會有如下幾個問題:1、在同一個項目中怎麼建立多個爬蟲的呢?2、多個爬蟲的時候是怎麼将他們運作起來呢?

  說明:本文章是基于前面幾篇文章和實驗的基礎上完成的。如果您錯過了,或者有疑惑的地方可以在此檢視:

  一、建立spider

  1、建立多個spider,scrapy genspider spidername domain

  通過上述指令建立了一個spider name為CnblogsHomeSpider的爬蟲,start_urls為http://www.cnblogs.com/的爬蟲

  2、檢視項目下有幾個爬蟲scrapy list

  由此可以知道我的項目下有兩個spider,一個名稱叫CnblogsHomeSpider,另一個叫CnblogsSpider。

  二、讓幾個spider同時運作起來

  現在我們的項目有兩個spider,那麼現在我們怎樣才能讓兩個spider同時運作起來呢?你可能會說寫個shell腳本一個個調用,也可能會說寫個python腳本一個個運作等。然而我在stackoverflow.com上看到。的确也有不上前輩是這麼實作。然而官方文檔是這麼介紹的。

通過CrawlerProcess

通過CrawlerRunner

通過CrawlerRunner和連結(chaining) deferred來線性運作

  這是官方文檔提供的幾種在script裡面運作spider的方法。

  三、通過自定義scrapy指令的方式來運作

  1、建立commands目錄

  注意:commands和spiders目錄是同級的

  2、在commands下面添加一個檔案crawlall.py

  這裡主要是用了self.crawler_process.spider_loader.list()方法擷取項目下所有的spider,然後利用self.crawler_process.crawl運作spider

  3、commands指令下添加__init__.py檔案

  注意:這一步一定不能省略。我就是因為這個問題折騰了一天。囧。。。就怪自己半路出家的吧。

  如果省略了會報這樣一個異常

  一開始怎麼找都找不到原因在哪。耗了我一整天,後來到http://stackoverflow.com/上得到了網友的幫助。再次感謝萬能的網際網路,要是沒有那道牆該是多麼的美好呀!扯遠了,繼續回來。

  4、settings.py目錄下建立setup.py(這一步去掉也沒影響,不知道官網幫助文檔這麼寫有什麼具體的意義。)

  這個檔案的含義是定義了一個crawlall指令,cnblogs.commands為指令檔案目錄,crawlall為指令名。

  5. 在settings.py中添加配置:

  6. 運作指令scrapy crawlall