AI-数据采集-requests模块其他方法(五)

举报
咔吧咔吧 发表于 2020/10/26 16:20:58 2020/10/26
【摘要】 requests模块的其他方法 ● requests解决https证书错误的问题 ● requests中超时参数的使用 ● retrying模块的使用 1. requests处理证书错误 经常我们在网上冲浪时,经常能够看到下面的提示: https://sam.huat.edu.cn:8443/selfservice/ 原因:...

    requests模块的其他方法

    ● requests解决https证书错误的问题

    ● requests中超时参数的使用

    ● retrying模块的使用

    

    1. requests处理证书错误

    经常我们在网上冲浪时,经常能够看到下面的提示:

    https://sam.huat.edu.cn:8443/selfservice/

    image.png


    原因:该网站的CA证书没有经过【受信任的根证书颁发机构】的认证


    1.1 代码中发起请求的效果

import requests
url = "https://sam.huat.edu.cn:8443/selfservice/"
response = requests.get(url)

        image.png

    

    1.2 解决方案

    为了在代码中能够正常的请求,我们使用verify=False参数,此时requests模块发送请求将不做CA证书的验证:verify参数能够忽略CA证书的认证

import requests

# 注意:取消安全证书有InsecureRequestWarning 不安全的警告
# 取消警告
requests.packages.urllib3.disable_warnings()

# 1.构建url地址
# 带https的需要进行ssl证书认证
url = "https://sam.huat.edu.cn:8443/selfservice/"

# 2.verify=False 取消ssl安全认证证书,直接登录
resp = requests.get(url, verify=False)
print(resp.text)

    

    2. 超时参数timeout的使用

    在平时网上冲浪的过程中,我们经常会遇到网络波动,这个时候,一个请求等了很久可能任然没有结果。

    在爬虫中,一个请求很久没有结果,就会让整个项目的效率变得非常低,这个时候我们就需要对请求进行强制要求,让他必须在特定的时间内返回结果,否则就报错。


    超时参数timeout的使用方法:

    response = requests.get(url, timeout=3)

    

    3. retrying模块的使用

    使用超时参数能够加快我们整体的请求速度,但是在正常的网页浏览过成功,如果发生速度很慢的情况,我们会做的选择是刷新页面,那么在代码中,我们是否也可以刷新请求呢?

    对应的,retrying模块就可以帮助我们解决

    

    

    3.1 retrying模块的使用

    ● 用retrying模块提供的retry模块

    ● 通过装饰器的方式使用,让被装饰的函数反复执行

    ● retry中可以传入参数stop_max_attempt_number,让函数报错后继续重新执行,达到最大执行次数的上限,如果每次都报错,整个函数报错,如果中间有一个成功,程序继续往后执行


    

    3.2 retrying和requests的简单封装

    ● 实现一个发送请求的函数,每次爬虫中直接调用该函数即可实现发送请求,在其中

    ● 使用timeout实现超时报错

    ● 使用retrying模块实现重试


    参考代码:

import requests
from retrying import retry


# 1.利用retry装饰器,被装饰的函数如果发送超时异常,就会被重新执行
# stop_max_attempt_number=3 最多尝试次数为3
@retry(stop_max_attempt_number=3)
def timeount_func():
    # 1.构建url地址
    url = "http://www.itcast.cn"
    print("-" * 40)
    # 2.发送get请求--要求0.03秒给出效应,否则超时
    resp = requests.get(url, timeout=0.03)
        # 3.返回响应
    return resp


# 2.捕获异常
try:
    resp = timeount_func()
except Exception as e:
    print(e)
    resp = None

# 3.如果响应对象有值,请求成功
if resp:
    print("请求成功")

            

   


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。