我正在编写一个 scrapy 管道,它将调用一个函数来清除我们的 CDN 边缘服务器上的已抓取 URL。我想出了如何足够轻松地存储访问过的网址列表,但问题是知道爬虫何时完成。
cdn的api以100个为批处理获取url,因此我可以轻松地每100个url调用它的clear函数,但是如果有543个url要抓取,最后43个将不会被发送到cdn的clear函数。
我一直在查看 scrapy 信号文档,但我不知道是否
- 当收到最后一个请求或所有项目都通过管道时,将调用spider_close信号。如果是后者,就来不及知道用最后43个url调用api了
- 另一种选择是添加一个扩展,当它收到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/