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 is already 运行 或类似的东西。
我考虑过从脚本中执行爬虫,当爬虫完成后再次调用它,但都没有用,因为反应器仍在使用中。
- 我的目的是在蜘蛛关闭后重置它(蜘蛛关闭是因为它失去了互联网连接)
有没有人知道一个简单好用的方法?
我找到了问题的解决方案!我想做什么?
- 在失败或关闭时处理蜘蛛
- 尝试在关闭时重新执行 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
函数
如果关闭的原因是因为我的互联网连接(夜间互联网中断 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 is already 运行 或类似的东西。
我考虑过从脚本中执行爬虫,当爬虫完成后再次调用它,但都没有用,因为反应器仍在使用中。
- 我的目的是在蜘蛛关闭后重置它(蜘蛛关闭是因为它失去了互联网连接)
有没有人知道一个简单好用的方法?
我找到了问题的解决方案!我想做什么?
- 在失败或关闭时处理蜘蛛
- 尝试在关闭时重新执行 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
函数