2012-05-29 11 views
9

私は多くのサイト(おそらく数百万)を掻き集めるプロジェクトにscrapyを使用していますが、各サイトごとに特定のスパイダーを作成する必要があります。scrapydを使用して一度に複数のスクラピースパイダーを実行する

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

しかし、どのように、私は一度、プロジェクト内のすべてのスパイダーのスケジュールを設定します:私は使用してscrapydする展開プロジェクトにクモをスケジュールすることができますか?

すべてのご協力ありがとうございます。

答えて

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

申し訳ありません私はこれが古い話題だと知っていますが、最近私は治療法を学び始め、ここではうんざりしました。コメントを投稿するのに十分な担当者がいないので、回答を投稿します。

the common scrapy practicesから複数のスパイダーを一度に実行する必要がある場合は、複数のscrapydサービスインスタンスを起動し、その中でSpiderランを配布する必要があります。

関連する問題