2015-11-13 51 views
5

我在啓動同一個蜘蛛的多個實例時被卡住了。我想爲1蜘蛛實例運行它像1 url。我必須處理5萬個URL,爲此我需要爲每個URL啓動不同的實例。在我的主要蜘蛛腳本中,我已經設置了閉路電視時間爲7分鐘,以確保我不會爬很長一段時間。請參閱下面的代碼:Scrapy - 如何啓動同一個蜘蛛程序的多個實例?

from scrapy.crawler import CrawlerProcess 
from scrapy.utils.project import get_project_settings 
import urlparse 

for start_url in all_urls: 
    domain = urlparse.urlparse(start_url).netloc 
    if domain.startswith('ww'): 
     domain = domain.split(".",1)[1] 

    process = CrawlerProcess(get_project_settings()) 
    process.crawl('textextractor', start_url=start_url,allowed_domains=domain) 
    process.start() 

它完全運行的第一個網址,鑽後,當第二URL傳遞它給了以下錯誤:

raise error.ReactorNotRestartable() 
ReactorNotRestartable 

請建議我應該怎麼做,使之運行相同蜘蛛的多個實例。另外,我正在考慮一次使用線程來啓動多個scrapy實例。這會是一個好方法嗎?

+0

在這個問題上的任何更新? – UriCS

回答

0

這個怎麼樣

process = CrawlerProcess(get_project_settings()) 

for start_url in all_urls: 
    domain = urlparse.urlparse(start_url).netloc 
    if domain.startswith('ww'): 
     domain = domain.split(".",1)[1] 
    process.crawl('textextractor', start_url=start_url,allowed_domains=domain) 

process.start() 
+0

furas我用你的解決方案進行了測試,但它沒有提供正確的結果。這個解決方案確實啓動了多個實例,但沒有給出「ReactorNotRestartable」錯誤,但它完全抓取了最後一次傳遞的url,對於其他網址,不要抓取超過1個網址並完成蜘蛛。我已經單獨檢查了這些網址,他們確實在其上返回了大量抓取的數據。 另外,正如我所提到的,我必須做到這一點爲50k的網址做的這意味着我將開始一次爬到50k的網址爬行過程?這看起來不錯嗎? – user3721618