2015-03-11 16 views
5

Internet bağlantım nedeniyle kapalı nedenlerden dolayı (gece interneti 5 dakikaya iner) Scrapy örümcemin yeniden başlatılmasını sağlamaya çalışıyorum. İnternet bittiğinde, 5 denemeden sonra örümcek kapanır.Scrapy Spider: Bitirdiğinde örümceği yeniden başlat

kapatıldığında ben örümcek yeniden çalışıyorum benim örümcek tanımı içinde bu işlevi kullanmaya çalışıyorum: Bir örümcek örneğini yeniden gibi bir çok şey denedik ama Reaktör zaten hata var

def handle_spider_closed(spider, reason): relaunch = False for key in spider.crawler.stats._stats.keys(): if 'DNSLookupError' in key: relaunch = True break if relaunch: spider = mySpider() settings = get_project_settings() crawlerProcess = CrawlerProcess(settings) crawlerProcess.configure() crawlerProcess.crawl(spider) spider.crawler.queue.append_spider(another_spider) 

veya bunun gibi bir şey çalışıyor.

Örümceği bir komut dosyasından çalıştırmayı düşündüm ve örümcek bittiğinde tekrar çağırır, ancak ne işe yaramadı, çünkü reaktör hala kullanımda.

  • Niyetim

Herkes bunun için iyi ve kolay bir yolu biliyor mu (bu internet bağlantısı kaybetti çünkü örümcek kapatır) bunu kapandıktan sonra örümcek sıfırlamak için mi?

+0

scrapy işlerini kullanarak olurdu araştırmak için bir senaryo (http://doc.scrapy.org/en/latest/topics/jobs.html) başa

  • errback=self.handle_error Örümcek handle_error fonksiyonu özel geçmesi yapar örneğin, scrapy işlemi aktifse, her 10 dakikada bir kontrol etmek için farklı örümcek örnekleri ve kabuk betimleme arasındaki süreklilik ile. eğer değilse yeniden – aberna

  • +0

    Karanlıkta sadece bir atış: bir örümceği yeniden canlandırdıktan sonra “spider.crawler.crawl (örümcek)” yi kullanırsanız? Teşekkürler. – alecxe

    +0

    Bu dokümanları okudum ama – AlvaroAV

    cevap

    5

    Sorunun çözümünü buldum! Ne yapmaya çalışıyordum?

    import time 
    
    class mySpider(scrapy.Spider): 
        name = "myspider" 
        allowed_domains = ["google.com"] 
        start_urls = [ 
         "http://www.google.com", 
        ] 
    
        def handle_error(self, failure): 
         self.log("Error Handle: %s" % failure.request) 
         self.log("Sleeping 60 seconds") 
         time.sleep(60) 
         url = 'http://www.google.com' 
         yield scrapy.Request(url, self.parse, errback=self.handle_error, dont_filter=True) 
    
        def start_requests(self): 
         url = 'http://www.google.com' 
         yield scrapy.Request(url, self.parse, errback=self.handle_error) 
    
    • : başarısız olursa veya

    böyle örümcek hata işleme tarafından yönetilen kapandığında Spider reexecute için

  • deneyin kapattığında

    • örümcek Kulp Örümcek'in bir isteği çoğaltmasını sağlamak için dont_filter=True'u kullandım, sadece hatadan geçtiğinde.