http代码429表示访问过快。
服务器在温柔地提示你,可以爬,但是爬慢一些。
控制访问的速度就可以了。
有些服务器会在返回的头部中添加"Retry-After",告诉你多久之后重试。
获取这个值,然后sleep就可以了。
捕获错误
try:
.....
except aiohttp.ClientResponseError as e: # 响应错误
if status== 429:
retryAfter="Retry-After"
headers=e.headers
sec=getHeader(headers, retryAfter)
if len(sec)>0:
sec=int(sec)
print(status, "请求过快,服务器要求待",sec , url )
time.sleep(sec) # If the rate limit is renewed in a minute, put 60 seconds, and so on.
else:
print(status, "服务器拒绝了请求,表示请求过快。取消重试,请稍后再试!", url)
def getHeader(headers, key):
key_lower=key.lower()
headers_lower = {k.lower():v for k,v in headers.items()}
if (key_lower in headers_lower) :
return headers_lower[key_lower]
else:
return ''
大概就是这样。

3311

被折叠的 条评论
为什么被折叠?



