首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在出现异常时强制刮伤退出

如何在出现异常时强制刮伤退出
EN

Stack Overflow用户
提问于 2017-06-08 09:15:05
回答 3查看 3.6K关注 0票数 7

我用Scrapy写了一个爬虫。

在管道中有一个函数,我将数据写入数据库。我使用日志模块来记录运行时日志。

我发现当我的字符串有中文的时候,logging.error()会抛出一个异常。但爬虫一直在跑!

我知道这是一个小错误,但如果有一个关键的例外,我会错过它,如果爬虫继续运行。

我的问题是:在出现异常时,是否存在强制Scrapy停止的设置?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-08 09:31:54

您可以使用ERRORCOUNT

一个整数,它指定关闭蜘蛛之前要接收的最大错误数。如果爬行器生成的错误超过这个数目,它将以closespider_errorcount的原因关闭。如果为零(或未设置),则蜘蛛不会因错误数而关闭。

默认情况下,它被设置为0 CLOSESPIDER_ERRORCOUNT = 0,如果您想在第一个错误发生时退出,您可以更改为1

更新

阅读这个问题的答案,您还可以使用:

代码语言:javascript
复制
crawler.engine.close_spider(self, 'log message')

欲了解更多信息,请阅读:

闭蜘蛛延伸

票数 10
EN

Stack Overflow用户

发布于 2017-06-08 09:30:18

在您的蜘蛛的process_item函数中,有一个spider实例。

为了解决您的问题,您可以在插入数据时捕获异常,然后,如果您捕捉到这样的意外情况,则可以整齐地阻止您的蜘蛛:

代码语言:javascript
复制
 def process_item(self, item, spider):
    try:
        #Insert your item here
    except YourExceptionName:
        spider.crawler.engine.close_spider(self, reason='finished')
票数 3
EN

Stack Overflow用户

发布于 2017-06-08 09:28:45

我不知道有什么设置会在任何例外情况下关闭爬行器,但是您至少有几个选项:

  • 您可以在蜘蛛回调中引发CloseSpider异常,也许当您捕捉到提到的异常时
  • 如果有对爬虫和蜘蛛对象的引用(例如,在扩展中),则可以调用crawler.engine.close_spider(spider, 'some reason')。请参见扩展实现 (它与CloseSpider异常不一样)。例如,您可以将其与spider_error信号挂钩。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44431494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档