scrapy框架提供了几个退出条件参数,用于在满足某些条件时提前退出爬虫,这几个参数有:
CLOSESPIDER_ITEMCOUNT = 10000 # 生成10000个item后退出
CLOSESPIDER_TIMEOUT =100 # 超时100秒退出
CLOSESPIDER_PAGECOUNT = 20000 # 收到20000个response后退出
CLOSESPIDER_ERRORCOUNT = 100 # 发生100个错误后退出
参考scrapy源代码,爬虫退出是调用了scrapy引擎的close_spider方法,因此,可以在pipeline中显式调用,用于控制主动退出
class Pipeline(object):
@classmethod
def from_crawler(cls, crawler):
return cls(crawler)
def __init__(self, crawler):
self.crawler = crawler
def process_item(self, item, spider):
# if 满足退出条件
self.crawler.engine.close_spider(spider, "退出原因")