2016-03-20 21 views
2
Class Myspider1 
#do something.... 

Class Myspider2 
#do something... 

Yukarıdaki, spider.py dosyamın mimarisidir. ve önce Myspider1'i çalıştırmaya çalışıyorum ve Myspider2 katlarını birkaç kez çalıştırmaya çalışıyorum. Bunu nasıl yapabilirim ??? herhangi bir ipucu?Birden Çok Örümcek'i sırayla Çalıştırın

configure_logging() 
runner = CrawlerRunner() 
def crawl(): 
    yield runner.crawl(Myspider1,arg.....) 
    yield runner.crawl(Myspider2,arg.....) 
crawl() 
reactor.run() 

Bu yolu kullanmayı deniyorum.Ama nasıl çalıştırılacağını bilmiyorum. Cmd'yi cmd'de çalıştırmalı mıyım (hangi komutları?) Veya sadece python dosyasını çalıştırmalı mıyım?

çok teşekkürler !!! test.py> çýktý.txt
Sen output.txt gelen gözlemleyebilirsiniz Şimdi piton çalıştırmak test.py

import scrapy 
from twisted.internet import reactor, defer 
from scrapy.crawler import CrawlerRunner 
from scrapy.utils.log import configure_logging 

class MySpider1(scrapy.Spider): 
    # Your first spider definition 
    name = "dmoz" 
    allowed_domains = ["dmoz.org"] 
    start_urls = [ 
       "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/" 
    ] 

    def parse(self, response): 
     print "first spider" 

class MySpider2(scrapy.Spider): 
    # Your second spider definition 
    name = "dmoz" 
    allowed_domains = ["dmoz.org"] 
    start_urls = [ 
       "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/" 
    ] 

    def parse(self, response): 
     print "second spider" 

configure_logging() 
runner = CrawlerRunner() 

@defer.inlineCallbacks 
def crawl(): 
    yield runner.crawl(MySpider1) 
    yield runner.crawl(MySpider2) 
    reactor.stop() 

crawl() 
reactor.run() # the script will block here until the last crawl call is finished 

:

+0

Sadece python komut dosyasını çalıştırın. CrawlerProcess + CrawlerRunner sınıfları bunun için inşa edilmiştir. Ama lütfen konuştuğunuz koşulları silkeleyin. Bu koşullar betiği çalıştırmadan önce tanımlanmış mı yoksa bu koşullar ilk Spider sınıfının çalışması sırasında/bu koşullardan mı alınmıştır? – dron22

+0

Cevabınız için teşekkürler, Bu iki örümcek için, ilk örümcek Myspider1 bir dizi bağlantıyı taramaktan sorumludur ve ikinci örümcek Myspider2, önceki bağlantılardan (Örümcek1'de kullanılan bağlantılar) eksik olan bağlantıları taramaktan sorumludur. İlk örümcek ilk önce çalıştırmak zorunda ve bir kez herhangi bir urls eksik olup olmadığını bulmak ve spider2 açmak için ya da değil açmak için seçin .. –

cevap

1

piton dosyasını örneğin
çalıştırmak örümceklerin sıralı olarak koşuyorlar.

+0

aralığında (1,10): koşucu için tarama() için değiştirmek mümkündür. tarama (MySpider, args [i * 2]) runner.crawl (MySpider, args [i * 2 + 1) d = runner.join() verim d? Ben paralel 2 örümcek çalıştırmak istiyorum, ama onları sırayla N kez çalıştırmak var ... –

+0

Eh, bu tür bir iş (benim ilk yorum) yaptım ... tek dezavantajı tüm "paralel" görevleri için bekler olmasıdır Daha fazla "paralel" görevleri yürütmeden önce bitirin - ve eğer sık ​​sık bir görevin diğerlerinden çok daha uzun olması durumunda, paralel olarak değil sıralı olarak ardışık hale gelir. –