我们有一个用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 (或在