python,url请求失败重新请求的方法(try、except 应用)
爬虫请求链接,有时候会出现请求失败或者等待时间很长的情况,用下面的方法可以一定程度的解决这个问题
url='https://cl.xxxx.xyz/'+url try: response = requests.get(url, headers=headers,timeout=5)#超时设置为3秒 except Exception as e: for i in range(2): # 循环2次去请求网站 response = requests.get(url, headers=headers,timeout=10)#超时设置为5秒
这里有个问题,一旦超时,就会执行except内的循环,然而循环是必须会执行两遍的
所以,需要找个方案当循环执行一遍且没有问题的时候自动终止
改进,上篇遗留问题,第一次执行即try里的内容超时后会执行except里的内容,但except里内容又是循环多次执行,这样会产生很多无用的重复请求
所以,在循环里面加个判断,同时去掉循环里的timeout
步骤:1、获取循环内请求的响应时间,如果大于指定时间,则继续循环,如果小于指定时间则结束循环,改进后的代码如下
url='https://cl.xxx.xyz/'+url try: response = requests.get(url, headers=headers,timeout=15)#超时设置为15秒 resptime_a = response.elapsed.total_seconds()#获取请求响应时间 print("响应时间"+str(resptime_a)+"秒") except Exception as e: for i in range(100): # 循环2次去请求网站 response = requests.get(url, headers=headers) print("循环第"+str(i)+"次") resptime_b=response.elapsed.total_seconds() print("响应时间"+str(resptime_b)+"秒") if resptime_b < 10:#如果响应时间小于10秒,结束循环 break
这里主要用到break语句来中断循环,具体参考https://www.cnblogs.com/becks/p/14081151.html
当然,如果引入判断,那么try...except...即可删除,执行循环获取响应时间,判断时间执行