我使用刮伤管道将项目保存在db中,为此目的,它可以很好地工作。现在我试着用db写一张带有蜘蛛关闭原因的记录。当我引发CloseSpider异常时,我可以在引发之前生成特定的项(并将记录保存到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))发布于 2018-03-15 06:39:59
这是我的解决办法。希望对你有帮助。
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 wanthttps://stackoverflow.com/questions/45583079
复制相似问题