在所有项目通过管道之前触发 Scrapy engine_stopped 信号?

Scrapy engine_stopped signal fired before all items are through pipelines?

对于Scrapy,我是一个相对菜鸟。我正在尝试实现一个功能来跟踪 Scrapy 蜘蛛从爬网命令到所有 insets/updates 完成所需的时间。

我写了一篇extension that uses the engine_started and engine_stopped signals。这工作正常,除了 engine_stopped 信号在管道中的 inserts/updates 中途被触发。

所以我的问题是:有什么方法可以检查所有管道是否为空并且 scrapy 是否完全完成抓取并且inserting/updating?

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

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

Sent when an item has been scraped, after it has passed all the Item Pipeline stages (without being dropped).

这样,当最后一项通过 "pipeline" 阶段时 - 您将捕捉到它并测量您的总执行时间。

(未测试)

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

finish_exporting 方法应该让您对结束时间有一个正确的认识。