我正在编写一个scrapy管道,该管道将调用一个函数来清除我们cdn的边缘服务器的抓取的url。我想出了如何轻松地存储访问过的 url 列表,但问题是知道爬虫何时完成。
cdn 的 api 以 100 个为一组获取 url,所以我可以很容易地每 100 个 url 调用它的 clear 函数,但是如果有 543 个 url 要抓取最后 43 个将不会发送到 cdn 的 clear 函数。
我一直在查看scrapy信号文档,但我不知道是否
- 当收到最后一个请求或所有项目都通过管道时,将调用 spider_close 信号。如果是后者,不知道用最后43个url调用api就来不及了
- 另一种选择是添加一个扩展,当它接收到 spider_close 信号时调用 cdn 的 api,但是它如何知道蜘蛛看到的所有 url?我可以在项目管道中构建它们的列表,但是如何将其添加到扩展中?(我也许可以使用我刚刚想到的 item_scraped 信号。)
所以,是的,有没有办法知道,在管道内,什么时候没有更多的项目来了?是否有多个管道同时运行,或者每个管道都是单例的?