当前位置: 首页 > 面试题库 >

满足管道中的条件后,如何立即停止所有的星形轮和引擎?

万勇
2023-03-14
问题内容

我们有一个用scrapy编写的系统,可以抓取一些网站。有 多个蜘蛛 ,以及所有爬虫传递的所有项目的 级联管道 。管道组件之一查询
google服务器以获取地址地理编码 。Google对 每个IP地址每天 限制 2500个请求
,并且威胁要禁止一个IP地址,即使它继续响应google,甚至在google发出警告消息“ OVER_QUERY_LIMIT”后也是如此。

因此,我想了解我可以从管道中调用的任何机制,该机制将 完全立即停止 所有蜘蛛以及主机的所有进一步爬网/处理。

from scrapy.project import crawler
crawler._signal_shutdown(9,0) #Run this if the cnxn fails.

这不起作用,因为蜘蛛需要花费一些时间才能停止执行,因此向Google提出了更多请求(这可能会禁止我的IP地址)

import sys
sys.exit("SHUT DOWN EVERYTHING!")

这个根本不起作用;尽管日志呕吐sys.exit()-> exceptions.SystemExit引发(无效),但项仍不断生成并传递到管道

  • 遇到第一个异常时,如何使草率的爬网中断并退出?
crawler.engine.close_spider(self, 'log message')

这个问题与上述第一种情况相同。

我试过了:

scrapy.project.crawler.engine.stop()

无济于事

编辑 :如果我在管道中:

从scrapy.contrib.closespider导入CloseSpider

我应该从管道范围中将什么作为“爬虫”参数传递给CloseSpider的 init ()?


问题答案:

您可以引发CloseSpider异常以关闭蜘蛛。但是,我认为这不能通过管道进行。

编辑 :avaleske在对此答案的注释中指出,他能够从管道中引发CloseSpider异常。最明智的方法是使用它。

在此线程的“
Scrapy用户”组中描述了类似的情况。

我引用:

要为代码的任何部分关闭蜘蛛,您应该使用 engine.close_spider
方法。请参阅此扩展以获取用法示例:https
:
//github.com/scrapy/scrapy/blob/master/scrapy/contrib/closespider.py#L61

您可以编写自己的扩展名,同时以closespider.py为例,如果满足特定条件,它将关闭蜘蛛。

另一个 “ hack”是在管道中的蜘蛛上设置一个标志。例如:

管道:

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')


 类似资料:
  • 我有一个项目,我的方法得到两个日期,它不断地向方法添加一天,直到两个日期相等,然后您可以通过查看一天添加了多少次来查看日期相距有多远。我的问题是,当满足日条件时,即使日、月和年必须都相同才能停止工作,我的while循环也会退出

  • 我在LibGDX做一个项目。这是一款2d平台游戏。你可以说这就像超级马里奥。 这就是我如何把我的球员移到右边: 当我离开钥匙时,玩家仍然在移动一点。(我想他的身体上仍然有“线性冲动”的力量)。 我怎样才能让它停下来? 我的问题可能很简单:拿着钥匙,在LibGDX上向一个方向移动身体的最佳方式是什么。当我离开钥匙时,玩家立即停止。 BDW——我尝试过“setTransform”,当身体触摸其他物体时

  • 问题内容: 我有一个简单的jenkins管道构建,这是我的jenkinsfile: 我正在使用sshagent推送到远程服务器上的git repo。我已经创建了指向Jenkins主〜/ .ssh中的私钥文件的凭据。 运行构建时,得到以下输出(我用*替换了一些敏感信息): 如您所见,ssh-agent启动,之后立即停止,然后运行git push命令。奇怪的是,它曾经正确地工作过一次,但这似乎是完全随

  • 问题内容: 我正在使用SQL Server 2008及其管理工作室。我执行了一个查询,该查询产生许多行。我试图通过红色的“取消”按钮将其取消,但在过去的10分钟内仍未停止。通常会在3分钟内停止。 原因可能是什么?如何立即停止? 问题答案: 可能是什么原因 只要您的注意力可以到达服务器并得到处理,查询就会立即取消。查询必须处于可取消状态,几乎总是如此,除非您执行某些操作,例如从SQLCLR调用Web

  • 我写了一个代码,获取用户对开始日期的输入

  • 问题内容: 有什么办法可以阻止python.exe在完成后立即关闭?它关闭的速度比我读取输出的速度快。 这是程序: 问题答案: 您不能-全局地,即对于每个python程序。这是一件好事-Python非常适合编写脚本(自动执行操作),并且脚本应该能够在无需任何用户交互的情况下运行。 但是,您始终可以在程序结束时要求输入,从而有效地使程序保持活动状态,直到您按回车键为止。使用在Python 3 (或在