首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取没有响应的失败请求的深度级别。

获取没有响应的失败请求的深度级别。
EN

Stack Overflow用户
提问于 2020-09-23 05:41:23
回答 1查看 154关注 0票数 0

解析刮过的页面时,我还保存了使用response.meta['depth']从请求中删除的深度。

最近,我开始使用errback将所有失败的请求记录到一个单独的文件中,这样做对我有很大帮助。(我相信)对于那些实际得到响应但由于http状态错误(比如403等)失败的页面,我可以使用failure.value.response.meta['depth'],但是当遇到类似TCPTimeout的错误时,就没有响应了。

是否有可能在没有响应的情况下获得失败请求的深度级别?

EDIT1:尝试过failure.request.meta['depth'],但这带来了一个错误。元似乎是可以找到的,但它没有深度键。

EDIT2:问题似乎是只有在收到第一个响应时才创建failure.request.meta['depth']。因此,我理解的是,如果第一个请求,一个start_url没有收到响应,深度键还没有创建,因此抛出一个异常。

根据深度中间件,我将对此进行实验:

代码语言:javascript
复制
if 'depth' not in response.meta:
            response.meta['depth'] = 0
EN

回答 1

Stack Overflow用户

发布于 2020-09-24 09:09:31

是的,问题就在于我在EDIT2中是怎么描述的。我就是这样修好的:

代码语言:javascript
复制
def start_requests(self):
    for u in self.start_urls:
        yield scrapy.Request(u, errback=self.my_errback)
        
def my_errback(self, failure):
    if 'depth' not in failure.request.meta:
        failure.request.meta['depth'] = 0

    depth = failure.request.meta['depth']
    # do something with depth...

非常感谢@Galecio先生,他为我指明了正确的方向!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64021697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档