我正在使用scrapy作爲一個項目,我想刮一些網站 - 可能有數百個 - 我必須爲每個網站編寫一個特定的蜘蛛。我可以安排一個蜘蛛在部署使用到scrapyd項目:一次使用scrapyd運行多個scrapy蜘蛛
curl http://localhost:6800/schedule.json -d project=myproject -d spider=spider2
但我怎麼在項目進度所有蜘蛛一次?
所有幫助非常感謝!
我正在使用scrapy作爲一個項目,我想刮一些網站 - 可能有數百個 - 我必須爲每個網站編寫一個特定的蜘蛛。我可以安排一個蜘蛛在部署使用到scrapyd項目:一次使用scrapyd運行多個scrapy蜘蛛
curl http://localhost:6800/schedule.json -d project=myproject -d spider=spider2
但我怎麼在項目進度所有蜘蛛一次?
所有幫助非常感謝!
我一次運行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
對不起,我知道這是一個古老的話題,但我最近開始學習scrapy並在這裏偶然發現,而且我還沒有足夠的代表發表評論,所以發佈了一個答案。
從the common scrapy practices你會看到,如果你需要一次運行多個蜘蛛,你將不得不啓動多個scrapyd服務實例,然後將spider分發到這些實例中。
太好了,我會在早上嘗試這個第一件事。我目前沒有電腦。感謝您的幫助! – user1009453
嗨。我嘗試了你的解決方案,但是我收到了以下導入錯誤: 導入錯誤:沒有命名模塊命令 我在項目目錄的設置文件中放置了「COMMANDS_MODULE ='YOURPROJECTNAME.commands'」行。它是否正確? – user1009453
@ user1009453確保你的命令文件夾有一個'__init __。py' – dru