我已经实现了一个依靠Scrapy同时运行多个蜘蛛的解决方案.根据我在这里阅读的内容(http://doc.scrapy.org/en/latest/topics/exceptions.html),为了优先发信号通知蜘蛛是时候死了,我应该提出一个CloseSpider异常如下:
from scrapy.exceptions import CloseSpider
class SomeSpider(CrawlSpider):
def parse_items(self, response):
if self.to_be_killed:
raise CloseSpider(reason="Received kill signal")
Run Code Online (Sandbox Code Playgroud)
但是,虽然代码在遇到异常时似乎确实引发了异常,但蜘蛛仍在长时间处理请求.我需要它立即停止它正在做的事情.
我意识到Scrapy是围绕一个异步框架构建的,但是有什么方法可以强制蜘蛛关闭而不会产生任何额外的出站请求?