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...即可删除,执行循环获取响应时间,判断时间执行

posted @ 2020-12-02 22:15  小贝书屋  阅读(3143)  评论(0编辑  收藏  举报