AI-数据采集-requests模块其他方法(五)
requests模块的其他方法
● requests解决https证书错误的问题
● requests中超时参数的使用
● retrying模块的使用
1. requests处理证书错误
经常我们在网上冲浪时,经常能够看到下面的提示:
https://sam.huat.edu.cn:8443/selfservice/
原因:该网站的CA证书没有经过【受信任的根证书颁发机构】的认证
1.1 代码中发起请求的效果
import requests url = "https://sam.huat.edu.cn:8443/selfservice/" response = requests.get(url)
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("请求成功")
- 点赞
- 收藏
- 关注作者
评论(0)