2

我正在编写一个scrapy管道,该管道将调用一个函数来清除我们cdn的边缘服务器的抓取的url。我想出了如何轻松地存储访问过的 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,但是它如何知道蜘蛛看到的所有 url?我可以在项目管道中构建它们的列表,但是如何将其添加到扩展中?(我也许可以使用我刚刚想到的 item_scraped 信号。)

所以,是的,有没有办法知道,在管道内,什么时候没有更多的项目来了?是否有多个管道同时运行,或者每个管道都是单例的?

4

1 回答 1

2

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

def close_spider(self, spider):
    pass

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

def open_spider(self, spider):
    pass
于 2012-12-28T20:32:12.977 回答