繁体   English   中英

Scrapy Spider:完成后重启蜘蛛

[英]Scrapy Spider: Restart spider when finishes

如果关闭的原因是因为我的互联网连接(夜间互联网停机5分钟),我正试图让我的Scrapy蜘蛛再次启动。 当互联网发生故障时,蜘蛛在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)

我尝试了很多东西,比如重新实例化一个蜘蛛,但得到了Reactor已经运行的错误或类似的东西。

我想过从脚本执行蜘蛛,当蜘蛛完成后再次调用它,但两个都没有工作,因为反应堆仍在使用中。

  • 我的目的是在蜘蛛关闭后重置蜘蛛(蜘蛛关闭,因为它失去了互联网连接)

有谁知道一个好的,简单的方法来做到这一点?

我找到了解决问题的方法! 我想做什么?

  • 失败或关闭时处理蜘蛛
  • 关闭时尝试重新执行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)
  • 我使用dont_filter=True来使Spider允许复制请求,只有当它经历错误时。
  • errback=self.handle_error使Spider通过自定义handle_error函数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM