def retry(retries=CONFIG.CRAWLER.RETRY or 3, sleep=CONFIG.CRAWLER.SLEEP,
changeip=False):
"""??????????????????????retrying
pip install retrying
https://github.com/rholder/retrying
??????????
http://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=2653547274&idx=1&sn=52e5037b163146c1656eedce2da1ecd8&scene=1&srcid=0527MEXhNRZATtlTPhinD5Re#rd
:param retries: number int of retry times.
301 Moved Temporarily
401 Unauthorized
403 Forbidden
404 Not Found
408 Request Timeout
429 Too Many Requests
503 Service Unavailable
"""
def _retry(func):
@wraps(func)
def _wrapper(*args, **kwargs):
index = 0
while index < retries:
index += 1
try:
response = func(*args, **kwargs)
if response.status_code in (301, 302, 404, 500):
print('status_code', response.status_code)
break
elif response.status_code != 200:
print(response.status_code)
if changeip:
change_ip()
continue
else:
break
except Exception as e:
# ???????????
# traceback.print_exc()
response = None
if isinstance(e, Timeout):
if sleep is not None:
time.sleep(sleep + randint(1, 10))
continue
elif isinstance(e, TooManyRedirects):
break
return response
return _wrapper
return _retry
评论列表
文章目录