Python 管道刮伤原因分析
我使用scrapy管道将项目保存在db中,它可以很好地用于此目的。现在我尝试在db中写一条记录,原因是蜘蛛关闭。当我引发CloseSpider异常时,我可以在引发之前生成特定项(并将记录保存到db)。但如果蜘蛛以“完成”结尾,我就不能做同样的事情了。 我尝试的是:Python 管道刮伤原因分析,python,scrapy,Python,Scrapy,我使用scrapy管道将项目保存在db中,它可以很好地用于此目的。现在我尝试在db中写一条记录,原因是蜘蛛关闭。当我引发CloseSpider异常时,我可以在引发之前生成特定项(并将记录保存到db)。但如果蜘蛛以“完成”结尾,我就不能做同样的事情了。 我尝试的是: 将卡盘关闭信号连接到卡盘关闭方法内部 spider方法和由此产生的收益项-这不起作用 在spider_closed内部,将一些spider变量设置为原因值和 然后尝试用管道的close_spider方法读取它。问题 这是在spider
@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))
这是我的解决办法。希望对你有所帮助
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
在管道中注册信号处理程序怎么样?这个信号有一个理由作为论据。谢谢!在管道中注册处理程序这是一个好主意,对我来说很有效。我用一小段工作解决方案编辑了这篇文章