我们有一个用scrapy编写的系统来抓取一些网站.有几个蜘蛛,以及所有爬虫传递的所有物品的一些级联管道.其中一个管道组件向Google服务器查询地理编码地址.谷歌每个IP地址每天限制2500个请求,并且如果谷歌继续查询谷歌,即使谷歌已经回复了警告信息:'OVER_QUERY_LIMIT',也有可能禁止IP地址.
因此,我想知道我可以在管道中调用的任何机制,它将完全并立即停止所有进一步爬行/处理所有蜘蛛以及主引擎.
我检查了其他类似的问题,他们的答案没有奏效:
Run Code Online (Sandbox Code Playgroud)from scrapy.project import crawler crawler._signal_shutdown(9,0) #Run this if the cnxn fails.
这不起作用,因为蜘蛛停止执行需要时间,因此谷歌提出了更多的请求(可能会禁止我的IP地址)
Run Code Online (Sandbox Code Playgroud)import sys sys.exit("SHUT DOWN EVERYTHING!")
这个根本不起作用; 项目不断生成并传递给管道,虽然日志呕吐sys.exit() - > exceptions.SystemExit引发(无效)
Run Code Online (Sandbox Code Playgroud)crawler.engine.close_spider(self, 'log message')
这个问题与上面提到的第一种情况有同样的问题.
我试过了:
Run Code Online (Sandbox Code Playgroud)scrapy.project.crawler.engine.stop()
无济于事
编辑:如果我在管道中:
来自scrapy.contrib.closespider导入CloseSpider
我应该将什么作为'crawler'参数从我的管道范围传递给CloseSpider的init()?
根据python.org的文档,在mac os上安装python 3.2需要升级到tcl/tk 8.5.9(使用IDLE).我急忙,我做了两件事.现在我的朋友告诉我,不推荐使用python 3,因为只有内置版本和一些模块已经发布了3.目前稳定的版本是2.7(特别是如果想要广泛使用各种模块) .我的机器同时具有2.6.1和3.2(因为某些OS服务使用2.6.1作为操作系统的默认值).
1.如何完全删除3.2以避免任何兼容性问题?
还安装了tcl/tk 8.5.9,这不是默认值.安装过程中没有详细模式,所以我不知道它是否替换了默认模式.如果它对操作系统有多糟糕?因此
2.如果以上情况真的很糟糕,我如何降级到旧版本的tcl/tk?
简而言之,我如何将我的机器恢复到原始状态?如果有人知道目录和文件的所有路径,我可以手动完成.
谢谢
在Python 2.7.x中
In [21]: s = set([-1, -1, -1, 0, -1, 0, 0, 0, 0]).remove(-1)
In [22]: type(s)
Out[22]: NoneType
Run Code Online (Sandbox Code Playgroud)
和
In [23]: s = set([-1, -1, -1, 0, -1, 0, 0, 0, 0])
In [24]: type(s)
Out[24]: set
In [25]: s.remove(-1)
In [26]: type(s)
Out[26]: set
In [27]: s
Out[27]: set([0])
Run Code Online (Sandbox Code Playgroud)
为什么函数链在上面的例子中不能按预期工作?
我尝试了一切我能想到的......
1. unicode_obj.split('\u2022')
2. re.split(r'\u2022', unicode_object)
3. re.split(r'(?iu)\u2022', unicode_object)
Run Code Online (Sandbox Code Playgroud)
没有任何效果
问题是我想拆分特殊字符.
example string : u'<special char like middot:\u00b7 or bullet:\u2022> sdfhsdf <repeat special char> sdfjhdgndujhfsgkljng <repeat special char> ... etc'
Run Code Online (Sandbox Code Playgroud)
请帮忙.
提前致谢.