簡體   English   中英

使用scrapyd一次運行多個scrapy蜘蛛

[英]Run multiple scrapy spiders at once using scrapyd

我正在使用scrapy進行一個項目,我想要刮掉一些網站 - 可能是數百個 - 我必須為每個網站編寫一個特定的蜘蛛。 我可以使用以下方法在部署到scrapyd的項目中安排一個蜘蛛:

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 / commands / 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並且在這里發現了,我還沒有足夠的代表發表評論,所以發布了答案。

常見的scrapy實踐中,您將看到如果您需要一次運行多個蜘蛛,您將必須啟動多個scrapyd服務實例,然后在這些實例中分發您的Spider運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM