我使用scrapy管道来保存db中的项目,并且它可以正常工作。现在我尝试在db中写一个蜘蛛关闭原因的记录。当我提出CloseSpider异常时,我可以在raise之前产生特定项目(并将记录保存到db)。但如果蜘蛛关闭了"完成"我不能做同样的事情。 我尝试了什么:
那么,有人能提供我如何在管道内访问蜘蛛关闭原因吗?
UPD: 感谢Paul我在管道from_crawler方法中注册了信号处理程序(几乎就像蜘蛛内部一样),它对我有用
@classmethod
def from_crawler(cls, crawler):
temp = cls()
crawler.signals.connect(temp.spider_closed, signal=scrapy.signals.spider_closed)
return temp
def spider_closed(self, reason):
logging.info("REASON: {}".format(reason))
答案 0 :(得分:1)
这是我的解决方案。希望有利于你。
class SubJobPipeline(object):
@classmethod
def from_crawler(cls, crawler):
ins = cls(crawler.settings)
crawler.signals.connect(ins.customize_close_spider, signal=signals.spider_closed)
return ins
def customize_close_spider(self, **kwargs):
_logger.warning("customize_close_spider kwargs: %s", kwargs)
reason = kwargs.get("reason") # reason maybe finished, shutdown or others
spider = kwargs.get("spider")
if reason == "finished":
# extract your item through spider
# do what you want