gpt4 book ai didi

python - Scrapy 不响应 CloseSpider 异常

转载 作者:行者123 更新时间:2023-11-28 21:18:12 26 4
gpt4 key购买 nike

我已经实现了一个依赖于 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")

然而,虽然代码似乎确实在遇到异常时引发了异常,但请求仍被蜘蛛处理了很长时间。我需要它立即停止正在做的事情。

我知道 Scrapy 是围绕一个异步框架构建的,但是有什么方法可以强制蜘蛛关闭而不产生任何额外的出站请求吗?

最佳答案

所以我最终使用了一个 hacky 解决方案来绕过这个问题。我没有以不适合 Twisted 框架的方式立即终止蜘蛛,而是编写了 DownloaderMiddleware,它拒绝来 self 已请求关闭的蜘蛛的任何请求。

所以:

from scrapy import log
from scrapy.exceptions import IgnoreRequest

class SpiderStatusMiddleware:

def process_request(self, request, spider):
if spider.to_be_killed or not spider.active:
log.msg("Spider has been killed, ignoring request to %s" % request.url, log.DEBUG, spider=spider)
raise IgnoreRequest()

return None

注意:to_be_killed 和 active 都是我在蜘蛛类中定义的标志,由我自己的代码管理。

关于python - Scrapy 不响应 CloseSpider 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27001586/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com