如何自动让scrapy爬虫重启?


我们现在使用的是scarpy的爬虫框架,但是,由于各种各样的问题,爬虫在执行的过程中,会非正常停止。请问有什么办法可以让这些停止的爬虫再自动重新运行。

经验 scrapy 爬虫

magican 8 years, 9 months ago

对于这种问题,通常有几种方案

第一种方式

通过scrapy的error handle机制,即,当spider遇到错误或关闭时,让spider重新执行。 参考代码如下:

    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)

注意, 1. 需要使用 dont_filter=True 来保证,只有当遇到错误时,spider可以复制一个请求 2. errback=self.handle_error 来确保spider可以调用handle_error函数

第二种方式

使用supervisor来监控 spider 的运行。具体请参考相关文档。

我不是侧田 answered 8 years, 9 months ago

Your Answer