Python 刮痕卡盘:完成后重新启动卡盘
如果关闭的原因是因为我的网络连接(在夜间,网络中断了5分钟),我正试图让我的Scrapy spider再次启动。当网络瘫痪时,蜘蛛会在5次尝试后关闭 我试图在爬行器定义中使用此函数,试图在关闭时重新启动爬行器:Python 刮痕卡盘:完成后重新启动卡盘,python,python-2.7,web-scraping,scrapy,Python,Python 2.7,Web Scraping,Scrapy,如果关闭的原因是因为我的网络连接(在夜间,网络中断了5分钟),我正试图让我的Scrapy spider再次启动。当网络瘫痪时,蜘蛛会在5次尝试后关闭 我试图在爬行器定义中使用此函数,试图在关闭时重新启动爬行器: def handle_spider_closed(spider, reason): relaunch = False for key in spider.crawler.stats._stats.keys(): if 'DNSLookupError' in
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)
我尝试了很多事情,比如重新实例化一个spider,但是得到了错误反应器已经在运行或者类似的东西
我考虑过从脚本中执行spider,当spider完成后再次调用它,但两者都不起作用,因为reactor仍在使用中
- 我的意图是在爬行器关闭后重置它(爬行器关闭是因为它失去了internet连接)
有人知道一个简单的好方法吗?我找到了解决问题的方法!我想做什么
- 在卡盘出现故障或关闭时处理卡盘
- 关闭时尝试重新执行蜘蛛
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\u filter=True
使爬行器通过自定义errback=self.handle\u error
函数handle\u error
spider.crawler.crawler(spider)
,该怎么办?谢谢。我已经阅读了这些文档,但我不明白当蜘蛛启动时如何自动重启closes@alecxe我已经试过了,但它说因为反应堆的原因不能运行