我用Scrapy写了一个爬虫。
在管道中有一个函数,我将数据写入数据库。我使用日志模块来记录运行时日志。
我发现当我的字符串有中文的时候,logging.error()会抛出一个异常。但爬虫一直在跑!
我知道这是一个小错误,但如果有一个关键的例外,我会错过它,如果爬虫继续运行。
我的问题是:在出现异常时,是否存在强制Scrapy停止的设置?
发布于 2017-06-08 09:31:54
您可以使用ERRORCOUNT
一个整数,它指定关闭蜘蛛之前要接收的最大错误数。如果爬行器生成的错误超过这个数目,它将以closespider_errorcount的原因关闭。如果为零(或未设置),则蜘蛛不会因错误数而关闭。
默认情况下,它被设置为0 CLOSESPIDER_ERRORCOUNT = 0,如果您想在第一个错误发生时退出,您可以将更改为1。
更新
阅读这个问题的答案,您还可以使用:
crawler.engine.close_spider(self, 'log message')欲了解更多信息,请阅读:
发布于 2017-06-08 09:30:18
在您的蜘蛛的process_item函数中,有一个spider实例。
为了解决您的问题,您可以在插入数据时捕获异常,然后,如果您捕捉到这样的意外情况,则可以整齐地阻止您的蜘蛛:
def process_item(self, item, spider):
try:
#Insert your item here
except YourExceptionName:
spider.crawler.engine.close_spider(self, reason='finished')发布于 2017-06-08 09:28:45
我不知道有什么设置会在任何例外情况下关闭爬行器,但是您至少有几个选项:
CloseSpider异常,也许当您捕捉到提到的异常时crawler.engine.close_spider(spider, 'some reason')。请参见扩展实现 (它与CloseSpider异常不一样)。例如,您可以将其与spider_error信号挂钩。https://stackoverflow.com/questions/44431494
复制相似问题