我用 Scrapy 编写了一个抓取工具。
管道中有一个函数,我将数据写入数据库。我使用日志记录模块来记录运行时日志。
我发现当我的字符串中有logging.error()
时会抛出异常。但是爬虫一直在运行!
我知道这是一个小错误,但如果存在严重异常,我会在爬行器继续运行时错过它。
我的问题是:当出现异常时,是否有可以强制Scrapy
停止的设置?
答案 0 :(得分:5)
一个整数,指定要接收的最大错误数 在关闭蜘蛛之前。如果蜘蛛产生的不止于此 错误的数量,它将被关闭的原因 closespider_errorcount。如果为零(或未设置),则不会关闭蜘蛛 按错误数量。
默认情况下,它设置为0
CLOSESPIDER_ERRORCOUNT = 0
如果您想在第一次出错时退出,可以将更改为 1 。
<强>更新强>
阅读this question的答案,您也可以使用:
crawler.engine.close_spider(self, 'log message')
了解更多信息:
答案 1 :(得分:2)
在您的蜘蛛的 process_item 函数中,您有一个spider
的实例。
要解决您的问题,您可以在插入数据时捕获例外,然后如果您抓住这样的某个例子,那就整齐地阻止您:
def process_item(self, item, spider):
try:
#Insert your item here
except YourExceptionName:
spider.crawler.engine.close_spider(self, reason='finished')
答案 2 :(得分:1)
我不知道在任何异常情况下关闭抓取工具的设置,但您至少有几个选项:
CloseSpider
异常,也许当你抓到你提到的异常时crawler.engine.close_spider(spider, 'some reason')
,例如在扩展名中。请参阅how the CloseSpider
extension is implemented(它与CloseSpider
例外不同)。
例如,您可以将其与spider_error
信号挂钩。