python – 如何最多允许n次相同的请求?

当我请求服务器有时它会回复一个不是预期的网页,即使响应状态是200.I我知道我可以使用
this method多次请求相同的网址:

def parse(response):
    try:
        # parsing logic here
    except AttributeError:
        yield Request(response.url, callback=self.parse, dont_filter=True)

但是如何限制次数,比如说10次,可以请求相同的网址以避免无限循环,当网页真的是这样的时候?

最佳答案 那么你可以使用
functools.partial添加一个参数来调用解析,并使用已经完成的尝试次数的参数.如果这高于某个阈值(此处为10),则不会产生新的请求.所以:

from functools import partial

def parse(response,ntimes=0):
    try:
        # parsing logic here
        pass
    except AttributeError:
        if ntimes < 10:
            yield Request(response.url, callback=partial(self.parse,ntimes=ntimes+1), dont_filter=True)

所以在这里,而不是使用解析作为回调,你在它周围设置一个部分(..)设置n次到前一个ntimes 1(所以你可以增加“虚拟”计数器).当ntimes为10或更高时,您不再将请求添加到队列中.

您将ntimes = 0默认设置为0,这样您仍然可以添加对parse的引用而不指定它被调用的次数(在这种情况下,解析“假定”尚未调用url).

点赞