当我请求服务器时,它有时会回复一个网页,即使响应状态为200,也不会是预期的网页。我知道我可以使用this method多次请求相同的网址:
def parse(response):
try:
# parsing logic here
except AttributeError:
yield Request(response.url, callback=self.parse, dont_filter=True)
但是如何限制次数,让我们说10次,可以请求相同的网址,以避免在网页确实是什么时出现无限循环?
答案 0 :(得分:1)
您可以使用functools.partial
添加参数以使用已完成尝试次数的参数调用parse
。如果这高于某个阈值(此处为10),则不会yield
新的Request
。所以:
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)
所以这里不是使用parse
作为回调而是围绕它设置partial(..)
,将ntimes
设置为前一个ntimes+1
(所以你增量&#34;虚拟&#34;计数器可以这么说)。当ntimes
为10或更高时,您不再将请求添加到队列中。
您默认将ntimes=0
设置为0
,这样您仍然可以添加对parse
的引用,而无需指定其被调用的次数(在这种情况下{{1} &#34;假设&#34;网址尚未被调用。)