【问题标题】:spider_closed function is not firedspider_close 函数未触发
【发布时间】:2014-04-21 15:14:38
【问题描述】:

我想在蜘蛛完成工作时记录一些数据。

我在我的蜘蛛中创建了这个函数。

def spider_closed(self, spider):
        log.msg('The spider {0} finished working on'.format(self.name), level=log.INFO)

但是这个函数没有被触发。

我在 python 2.7 中使用 scrapy 0.20

请注意,我可以将任何内容记录到我的日志中,实际上我正在记录很多可以在我的日志文件中看到的数据。所以日志记录正在与我一起工作。

编辑

我想我必须发送一个信号signals.spider_closed,但我不知道该怎么做。

【问题讨论】:

    标签: python scrapy


    【解决方案1】:

    您应该将您的方法作为receiver 附加到SignalManager 信号调度器:

    from scrapy.xlib.pydispatch import dispatcher
    from scrapy import signals
    
    class MySpider(Spider):
        def __init__(self, *args, **kwargs):
            dispatcher.connect(self.spider_closed, signal=signals.spider_closed)
            super(MySpider, self).__init__(*args, **kwargs)
    
        def spider_closed(self, spider):
            log.msg('The spider {0} finished working on'.format(self.name), level=log.INFO)
    

    另见相关主题:

    【讨论】:

    • 我找到了解决方案,它与您的答案几乎相同,我这样做了:dispatcher.connect(self.spider_closed, signals.spider_closed) 在我的__init__ 中,然后它就可以工作了。请问这样对吗?
    • @SimeoniPeraparota 是的,它更好 - 编辑了答案。谢谢。
    • +1 感谢您对我所做的努力。系统允许时会接受你的回答
    猜你喜欢
    • 1970-01-01
    • 2021-06-15
    • 2023-04-01
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多