12

私は、多数のサイト (おそらく数百) をスクレイピングしたいプロジェクトにスクレイピーを使用しており、サイトごとに特定のスパイダーを作成する必要があります以下を使用して、scrapyd にデプロイされたプロジェクトで1 つのスパイダーをスケジュールできます。

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

しかし、プロジェクト内のすべてのスパイダーを一度にスケジュールするにはどうすればよいでしょうか?

すべての助けに感謝します!

4

2 に答える 2

24

一度に 200 以上のスパイダーを実行するための私の解決策は、プロジェクトのカスタム コマンドを作成することでした。カスタム コマンドの実装の詳細については、 http://doc.scrapy.org/en/latest/topics/commands.html#custom-project-commandsを参照してください。

あなたのプロジェクト名/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
于 2012-05-29T18:02:14.740 に答える
1

申し訳ありませんが、これは古いトピックであることは知っていますが、最近スクレイピーを学び始めてここでつまずきました。まだコメントを投稿するのに十分な担当者がいないため、回答を投稿してください。

一般的な Scrapy の慣例から、複数のスパイダーを一度に実行する必要がある場合は、複数の Scrapyd サービス インスタンスを開始し、Spider の実行をそれらの間で分散する必要があることがわかります。

于 2014-11-29T19:40:10.097 に答える