Python 如何在满足管道条件后立即停止所有卡盘和发动机?
我们有一个用scrapy编写的系统来抓取一些网站。对于所有爬虫传递的所有项目,有几个爬虫,并且有几个级联管道。 其中一个管道组件向谷歌服务器查询地理编码地址。 谷歌对每个IP地址每天的请求限制为2500次,并威胁说,即使在谷歌回复警告信息“超过查询限制”后,如果谷歌仍继续查询谷歌的IP地址,谷歌也将禁止该IP地址 因此,我想知道我可以从管道中调用的任何机制,这些机制将完全并立即停止所有爬行器和主机的所有进一步爬行/处理 我检查了其他类似问题,但他们的答案不起作用:Python 如何在满足管道条件后立即停止所有卡盘和发动机?,python,scrapy,web-crawler,Python,Scrapy,Web Crawler,我们有一个用scrapy编写的系统来抓取一些网站。对于所有爬虫传递的所有项目,有几个爬虫,并且有几个级联管道。 其中一个管道组件向谷歌服务器查询地理编码地址。 谷歌对每个IP地址每天的请求限制为2500次,并威胁说,即使在谷歌回复警告信息“超过查询限制”后,如果谷歌仍继续查询谷歌的IP地址,谷歌也将禁止该IP地址 因此,我想知道我可以从管道中调用的任何机制,这些机制将完全并立即停止所有爬行器和主机的所有进一步爬行/处理 我检查了其他类似问题,但他们的答案不起作用: 这不起作用,因为爬行器停
引擎。关闭\u spider
方法。查看此扩展以了解用法
例子:
您可以编写自己的扩展,同时以closespider.py为例,如果满足特定条件,它将关闭spider
另一个“黑客”是在管道中的爬行器上设置一个标志。例如:
管道:
def process_item(self, item, spider):
if some_flag:
spider.close_down = True
蜘蛛网:
def parse(self, response):
if self.close_down:
raise CloseSpider(reason='API usage exceeded')
谢谢你的来信。我认为这将像上面显示的第一个示例一样关闭spider,但这需要时间,并且每个预定spider中的一些项目仍将通过管道。这意味着在收到警告后,谷歌仍将收到100条查询。。。我怎么才能杀了整件事???如果根本没有办法,我就用“黑客”!谢谢!!!CloseSpider类还接受一个“crawler”参数。在我的管道及其范围内,应该传递什么对象?我不太确定您指的是什么;但是这个关于扩展的文档可能会有所帮助:和关于管道的文档:。我会将spider传递到管道,在那里设置标志,并在spider本身中引发CloseSpider异常。Scrapy是异步的,因此当您处理响应时,已经发出了大量额外的请求。即使你立即停止爬虫,也为时已晚,所以不要着急。多出几个100并不能让你得到谷歌的永久禁令。我只是在一个管道中提出了一个CloseSpider例外。
crawler.engine.close_spider(self, 'log message')
scrapy.project.crawler.engine.stop()
def process_item(self, item, spider):
if some_flag:
spider.close_down = True
def parse(self, response):
if self.close_down:
raise CloseSpider(reason='API usage exceeded')