python - 存储 scrapy 项目以在蜘蛛完成后处理

标签 python signals scrapy pipeline

我正在编写一个 scrapy 管道,它将调用一个函数来清除我们的 CDN 边缘服务器上的已抓取 URL。我想出了如何足够轻松地存储访问过的网址列表,但问题是知道爬虫何时完成。

cdn的api以100个为批处理获取url,因此我可以轻松地每100个url调用它的clear函数,但是如果有543个url要抓取,最后43个将不会被发送到cdn的clear函数。

我一直在查看 scrapy 信号文档,但我不知道是否

  1. 当收到最后一个请求或所有项目都通过管道时,将调用spider_close信号。如果是后者,就来不及知道用最后43个url调用api了
  2. 另一种选择是添加一个扩展,当它收到spider_close信号时调用cdn的api,但它如何知道spider已经看到的所有url?我可以在项目管道中构建它们的列表,但如何将其发送到扩展程序? (我也许可以使用 item_scraped 信号,这是我刚刚想到的。)

所以,是的,有没有办法知道管道内什么时候不再有元素出现?是否有多个管道同时运行,或者每个管道都是一个单例?

最佳答案

所以我发现,当蜘蛛爬行完成后关闭并且一切都通过管道时,每个管道中都会调用一个函数,这就是

def close_spider(self, spider):
    pass

还有一个在启动时调用的函数,即

def open_spider(self, spider):
    pass

关于python - 存储 scrapy 项目以在蜘蛛完成后处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14047567/

相关文章:

python - 在 Tweepy 中以可用形式 (JSON) 提取数据

python - 删除除特定值外的多次出现?

python - AWS-Lambda:如何在 python 中处理 SNS 事件

C 处理信号 SIGFPE 并继续执行

python - 无法捕获来自 'docker stop' 的 TERM 信号

python - 发出信号后恢复进程

python - 根据其他列中的值替换值,如果不满足条件则保留原样

python - 从 scrapy 请求打印 'response'

python - Scrapy:如何从 spider_idle 事件回调中手动插入请求?

python - 如何限制在 scrapy 中每个域抓取的项目数量?