解析刮过的页面时,我还保存了使用response.meta['depth']从请求中删除的深度。
最近,我开始使用errback将所有失败的请求记录到一个单独的文件中,这样做对我有很大帮助。(我相信)对于那些实际得到响应但由于http状态错误(比如403等)失败的页面,我可以使用failure.value.response.meta['depth'],但是当遇到类似TCPTimeout的错误时,就没有响应了。
是否有可能在没有响应的情况下获得失败请求的深度级别?
EDIT1:尝试过failure.request.meta['depth'],但这带来了一个错误。元似乎是可以找到的,但它没有深度键。
EDIT2:问题似乎是只有在收到第一个响应时才创建failure.request.meta['depth']。因此,我理解的是,如果第一个请求,一个start_url没有收到响应,深度键还没有创建,因此抛出一个异常。
根据深度中间件,我将对此进行实验:
if 'depth' not in response.meta:
response.meta['depth'] = 0发布于 2020-09-24 09:09:31
是的,问题就在于我在EDIT2中是怎么描述的。我就是这样修好的:
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先生,他为我指明了正确的方向!
https://stackoverflow.com/questions/64021697
复制相似问题