您的位置: 网站首页> requests爬虫> 当前文章

封装requests自定义请求函数限制最大请求次数

老董-我爱我家房产SEO2021-11-11172围观,114赞

  打开1个网页如果出现卡死或者其他问题,正常的人类会再次尝试打开,也就是说请求1个网页如果出现故障会多试几次。同理,爬虫在抓取数据时候请求1个url也应该设置最大请求次数,万一第1次请求恰逢断网那么第2次请求可能就没事了,这样的程序才比较健壮不会遗漏数据。

  在requests里没找到直接设置最大请求次数的方式,所以需要自行封装,封装需要用到递归!比如如下get请求函数最大会请求3次网页。

# -*- coding: utf-8 -*-
# 获取源码
def get_html(url,retry=2):
    try:
        r = requests.get(url=url,headers=my_header, timeout=10)
    except requests.exceptions.RequestException as e: # 或者 except Exception as e:
        print('请求源码失败', url, e)
        time.sleep(10)
        if retry > 0:
            get_html(url, retry - 1)
    else:
        html = r.text
        return html

  上述函数执行顺序如下:

  1、第1次请求,初始retry=2,请求异常会进入异常处理,retry-1变为1,如果第1次请求成功则不进入异常处理顺利返回html。

  2、第2次请求,此时retry=1,请求异常会进入异常处理,retry-1变为0,如果第2次请求成功则不进入异常处理顺利返回html。

  3、第3次请求,此时retry=0,请求异常会进入异常处理,此时retry==0停止递归;如果第3次请求成功则不进入异常处理顺利返回html。

很赞哦!

python编程网提示:转载请注明来源www.python66.com。
有宝贵意见可添加站长微信(底部),获取技术资料请到公众号(底部)。同行交流请加群 python学习会

文章评论

    封装requests自定义请求函数限制最大请求次数文章写得不错,值得赞赏

站点信息

  • 网站程序:Laravel
  • 客服微信:a772483200