2015-03-11 18 views
5

खत्म होने पर स्पाइडर को पुनरारंभ करें यदि मेरा इंटरनेट कनेक्शन (रात इंटरनेट इंटरनेट के दौरान 5 मिनट के लिए नीचे चला जाता है) के कारण मेरा स्क्रैप स्पाइडर फिर से लॉन्च करने की कोशिश कर रहा है। जब इंटरनेट नीचे चला जाता है तो मकड़ी 5 कोशिशों के बाद बंद हो जाती है।स्केपर स्पाइडर:

जब बंद कर दिया मैं मकड़ी को पुनः आरंभ करने की कोशिश कर मेरी मकड़ी परिभाषा के अंदर इस सुविधा का उपयोग करने के लिए कोशिश कर रहा हूँ:

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) 

मैं एक मकड़ी का दृष्टांत फिर जैसी चीजों का एक बहुत कोशिश की, लेकिन त्रुटि रिएक्टर पहले से ही है मिल गया या ऐसा कुछ चल रहा है।

मैंने एक स्क्रिप्ट से मकड़ी को निष्पादित करने के बारे में सोचा था, और जब मकड़ी खत्म हो जाती है तो इसे फिर से कॉल किया जाता है, लेकिन न तो काम नहीं करता है, क्योंकि रिएक्टर अभी भी उपयोग में है।

  • मेरे इरादे (मकड़ी बंद कर देता है, क्योंकि यह इंटरनेट कनेक्शन खो)

किसी को भी यह करने के लिए एक अच्छा और आसान तरीका जानता है मकड़ी पुनर्स्थापित करने के लिए इसे बंद करने के बाद है?

+0

जांच करने के लिए scrapy नौकरियों का उपयोग करेंगे एक परिदृश्य (http://doc.scrapy.org/en/latest/topics/jobs.html) निपटने के लिए बनाता है स्कीपर प्रक्रिया सक्रिय होने पर हर 10 मिनट में उदाहरण के लिए जांच करने के लिए विभिन्न मकड़ी उदाहरणों और खोल स्क्रिप्टिंग के बीच दृढ़ता के साथ। यदि इसे – aberna

+0

को फिर से लॉन्च नहीं किया गया है तो अंधेरे में बस एक शॉट: यदि आप मकड़ी को बहाल करने के बाद 'spider.crawler.crawl (स्पाइडर) 'का उपयोग करेंगे तो क्या होगा? धन्यवाद। – alecxe

+0

मैंने उन दस्तावेज़ों को पढ़ लिया है, लेकिन मुझे नहीं लगता कि स्पाइडर को स्वचालित रूप से फिर से शुरू करने के लिए – AlvaroAV

उत्तर

5

मुझे अपने मुद्दे का समाधान मिला! मैं क्या करने की कोशिश कर रहा था?

  • मकड़ी संभाल जब विफल रहता है या बंद कर देता है स्पाइडर reexecute जब

मैं इस तरह मकड़ी की त्रुटि से निपटने के द्वारा प्रबंधित बंद कर देता है

  • प्रयास करें:

    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) 
    
    • मैंने स्पाइडर को अनुरोध को डुप्लिकेट करने की अनुमति देने के लिए dont_filter=True का उपयोग किया, केवल तभी जब यह त्रुटि से गुजरता है।
    • errback=self.handle_error स्पाइडर कस्टम के माध्यम से जाने handle_error समारोह
  • संबंधित मुद्दे