2012-05-29 32 views
9

kullanarak birden fazla scrapy örümcekler çalıştırın Ben bir site - muhtemelen yüzlerce - kazımak istiyorum bir proje için scrapy kullanıyorum ve her site için belirli bir örümcek yazmak zorunda. Ben kullanarak scrapyd dağıtılan bir projede bir örümcek zamanlayabilirsiniz:Aynı anda scrapyd

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

Ama nasıl seferde bir projede tüm örümcekler planlarım?

Tüm yardımlar çok takdir edilir!

cevap

22

Aynı anda 200'den fazla örümcek çalıştırmak için yaptığım çözüm, proje için özel bir komut oluşturmak oldu. Özel komutları uygulama hakkında daha fazla bilgi için bkz. http://doc.scrapy.org/en/latest/topics/commands.html#custom-project-commands.

YourProjectName/komutlar/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) 

emin olun komut satırından (proje dizininde)

COMMANDS_MODULE = 'YOURPROJECTNAME.commands' 

Sonra settings.py aşağıdaki içerecek şekilde sadece

yazabilirsin
scrapy allcrawl 
+0

Harika, İlk şeyleri sabahları deneyeceğim. Şu an bilgisayarım yok. Yardımınız için teşekkürler! – user1009453

+0

Merhaba. Çözümünüzü denedim ancak follwoing içe aktarma hatasını aldım: alma hatası: Modül adı verilen komutlar yok Proje dizinindeki ayarlar dosyasına "COMMANDS_MODULE = 'YOURPROJECTNAME.commands'" satırını koydum. Bu doğru mu? – user1009453

+0

@ user1009453 Komutlarınızın bir '__init __. Py' – dru

1

Üzgünüm Biliyorum, bu eski bir konu, ama yakın zamanda scrub öğrenmeye başladım ve burada tökezledim, ve henüz bir röportaj yapmak için yeterince röportajım yok, bu yüzden bir cevap gönderiyorum.

the common scrapy practices dan, birden çok örümceği aynı anda çalıştırmanız gerekirse, birden fazla scrapyd hizmet örneğini başlatmanız ve ardından Spider çalışmalarınızı bunlara dağıtmanız gerektiğini göreceksiniz.