【问题标题】:Scrapy engine_stopped signal fired before all items are through pipelines?在所有项目通过管道之前触发 Scrapy engine_stopped 信号?
【发布时间】:2015-08-08 13:40:17
【问题描述】:

对于 Scrapy,我是一个相对的菜鸟。我正在尝试实现一个功能,该功能可以跟踪从 crawl 命令到 Scrapy 蜘蛛需要多长时间,直到所有插入/更新完成。

我写了一个extension 使用engine_startedengine_stopped signals。除了engine_stopped 信号在管道中的插入/更新过程中被触发之外,这一切正常。

所以我的问题是:有什么方法可以检查所有管道是否为空,scrapy 是否已完全完成爬行和插入/更新?

注意:我在管道中使用twisted.enterprise.adbapi,我的直觉是这可能是engine_stopped 信号被提前触发的原因。

【问题讨论】:

    标签: python scrapy signals twisted pipeline


    【解决方案1】:

    你可以在item_scraped signal里面更新执行时间:

    当一个项目被抓取,在它通过所有项目管道阶段(没有被丢弃)之后发送。

    这样,当最后一个项目通过“管道”阶段时 - 您将捕获它并测量您的总执行时间。

    (未测试)

    【讨论】:

    • 无趣的方法,但你怎么知道最后一项是什么。触发抓取的项目时可能会覆盖某些值,但是脚本永远不会真正结束,对吗?
    • @Supahsmooth 谢谢,我的意思是每次您在 item_scraped 信号处理程序中时重新计算执行时间。但是,是的,你不会知道还剩多少东西......我可能是错的,这是你需要尝试的东西......
    【解决方案2】:

    另一种方法可能是实现您自己的Feed Exporter

    finish_exporting 方法应该让您对结束时间有一个不错的了解。

    【讨论】:

    • 为什么有人会反对这个?这是一个建议。告诉我我做错了什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-26
    相关资源
    最近更新 更多