在蜘蛛完成后存储scrapy项目进行处理

时间:2012-12-26 23:28:59

标签: python signals scrapy pipeline

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

cdn的api需要100个批量的网址,所以我可以轻松地每100个网址调用它的清除功能,但如果有543个网址要抓取,则最后43个网址将不会被发送到cdn的清除功能。

我一直在看scrapy信号文档,但我无法弄清楚是否

  1. 在收到最后一个请求或所有项目都通过管道时调用spider_closed信号。如果是后者,那么知道用最后的43个网址打电话给api已经太晚了
  2. 另一种选择是在收到spider_closed信号时添加一个调用cdn的api的扩展名,但是它如何知道蜘蛛看到的所有网址?我可以在项目管道中构建它们的列表,但是如何将其添加到扩展中? (我可以使用item_scraped信号,这个信号刚刚发生在我身上。)
  3. 所以是的,有没有办法知道,在管道内,什么时候没有更多的物品来了?是否有多个管道同时运行,或者每个管道是单个管道?

1 个答案:

答案 0 :(得分:2)

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

def close_spider(self, spider):
    pass

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

def open_spider(self, spider):
    pass