爬虫问题系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
爬虫遇到的问题[requests卡住]多次请求超时的几种重试方式
文章目录
- 爬虫问题系列文章目录
- 前言
- 第一种
- 第三种
- 第五种
- 总结
前言
在爬虫的过程中,遇到请求卡住,进行重试这样的方法很常见的
在网上找到了几种方法进行总结
下面来看看这位作者是怎么写的
提示:以下是本篇文章正文内容,下面案例可供参考
第一种
headers = Dict()
url = 'https://www.baidu.com'
try:
proxies = None
response = requests.get(url, headers=headers, verify=False, proxies=None, timeout=3)
except:
# logdebug('requests failed one time')
try:
proxies = None
response = requests.get(url, headers=headers, verify=False, proxies=None, timeout=3)
except:
# logdebug('requests failed two time')
print('requests failed two time')
总结 :代码比较冗余,重试try的次数越多,代码行数越多,但是打印日志比较方便
# 第二种
def requestDemo(url,):
headers = Dict()
trytimes = 3 # 重试的次数
for i in range(trytimes):
try:
proxies = None
response = requests.get(url, headers=headers, verify=False, proxies=None, timeout=3)
# 注意此处也可能是302等状态码
if response.status_code == 200:
break
except:
# logdebug(f'requests failed {i}time')
print(f'requests failed {i} time')
总结 :遍历代码明显比第一个简化了很多,打印日志也方便
第三种
def requestDemo(url, times=1):
headers = Dict()
try:
proxies = None
response = requests.get(url, headers=headers, verify=False, proxies=None, timeout=3)
html = response.text()
# todo 此处处理代码正常逻辑
pass
return html
except:
# logdebug(f'requests failed {i}time')
trytimes = 3 # 重试的次数
if times < trytimes:
times += 1
return requestDemo(url, times)
return 'out of maxtimes'
总结 :迭代 显得比较高大上,中间处理代码时有其它错误照样可以进行重试; 缺点 不太好理解,容易出错,另外try包含的内容过多时,对代码运行速度不
# 第四种
@retry(3) # 重试的次数 3
def requestDemo(url):
headers = Dict()
proxies = None
response = requests.get(url, headers=headers, verify=False, proxies=None, timeout=3)
html = response.text()
# todo 此处处理代码正常逻辑
pass
return html
def retry(times):
def wrapper(func):
def inner_wrapper(*args, **kwargs):
i = 0
while i < times:
try:
print(i)
return func(*args, **kwargs)
except:
# 此处打印日志 func.__name__ 为say函数
print("logdebug: {}()".format(func.__name__))
i += 1
return inner_wrapper
return wrapper
总结 :装饰器优点 多种函数复用,使用十分方便
第五种
万能python包中之一的retry模块,自行百度,此处就不介绍了。
总结
第一种: 代码比较冗余,重试try的次数越多,代码行数越多,但是打印日志比较方便
第二种:
遍历代码明显比第一个简化了很多,打印日志也方便
第三种:
迭代 显得比较高大上,中间处理代码时有其它错误照样可以进行重试; 缺点 不太好理解,容易出错,另外try包含的内容过多时,对代码运行速度不
第四种:
装饰器优点 多种函数复用,使用十分方便
第五种:
万能python包中之一的retry模块,自行百度,此处就不介绍了。