2012-05-29 67 views
9

我正在使用scrapy作爲一個項目,我想刮一些網站 - 可能有數百個 - 我必須爲每個網站編寫一個特定的蜘蛛。我可以安排一個蜘蛛在部署使用到scrapyd項目:一次使用scrapyd運行多個scrapy蜘蛛

curl http://localhost:6800/schedule.json -d project=myproject -d spider=spider2 

但我怎麼在項目進度所有蜘蛛一次?

所有幫助非常感謝!

回答

22

我一次運行200多個蜘蛛的解決方案是爲項目創建一個自定義命令。有關實現自定義命令的更多信息,請參見http://doc.scrapy.org/en/latest/topics/commands.html#custom-project-commands

爲yourprojectname /命令/ allcrawl.py

from scrapy.command import ScrapyCommand 
import urllib 
import urllib2 
from scrapy import log 

class AllCrawlCommand(ScrapyCommand): 

    requires_project = True 
    default_settings = {'LOG_ENABLED': False} 

    def short_desc(self): 
     return "Schedule a run for all available spiders" 

    def run(self, args, opts): 
     url = 'http://localhost:6800/schedule.json' 
     for s in self.crawler.spiders.list(): 
      values = {'project' : 'YOUR_PROJECT_NAME', 'spider' : s} 
      data = urllib.urlencode(values) 
      req = urllib2.Request(url, data) 
      response = urllib2.urlopen(req) 
      log.msg(response) 

確保包括在您的settings.py命令行(在你的項目目錄)以下

COMMANDS_MODULE = 'YOURPROJECTNAME.commands' 

然後你可以簡單鍵入

scrapy allcrawl 
+0

太好了,我會在早上嘗試這個第一件事。我目前沒有電腦。感謝您的幫助! – user1009453

+0

嗨。我嘗試了你的解決方案,但是我收到了以下導入錯誤: 導入錯誤:沒有命名模塊命令 我在項目目錄的設置文件中放置了「COMMANDS_MODULE ='YOURPROJECTNAME.commands'」行。它是否正確? – user1009453

+0

@ user1009453確保你的命令文件夾有一個'__init __。py' – dru

1

對不起,我知道這是一個古老的話題,但我最近開始學習scrapy並在這裏偶然發現,而且我還沒有足夠的代表發表評論,所以發佈了一個答案。

the common scrapy practices你會看到,如果你需要一次運行多個蜘蛛,你將不得不啓動多個scrapyd服務實例,然後將spider分發到這些實例中。