requests设置超时时间/requests.Session自动保存cookie/verify忽略ssl证书
requests设置超时时间
可以通过timeout属性设置超时时间,一旦超过这个时间还没有获得响应内容,就会提示错误。爬取大量数据时,可以分离出响应时间过长的url,后续再处理。
import requests
from fake_useragent import UserAgent
# 请求地址
url = 'http://www.github.com'
# 封装请求头
headers = {'User-Agent': UserAgent().chrome}
# 设置超时报错,并处理报错的url
timeout = []
try:
# 发送请求
resp = requests.get(url, headers=headers, timeout=0.001)
except:
# 如果报错执行此代码块
timeout.append(url)
print(url)
else:
# 如果try块没有报错,执行此代码块
# 读取响应内容
print(resp.text)
保存cookies
urllib保持cookies:https://www.cnblogs.com/qyly/p/18417260
,https://www.cnblogs.com/qyly/p/18419063
requests.Session()是python的requests库中的一个功能,它允许用户创建一个会话对象,用于持久化某些参数,比如cookies。为什么Session对象能自动保存cookies:
- 持久化连接,Session对象会在多个请求之间保持连接,这意味着一旦建立了TCP连接,它就会重用,减少连接的开销。
- 自动处理cookies,Session对象会自动处理服务器返回的cookies,并在后续的请求中携带这些cookies。如果在一个请求中登录了某个网站,那么在随后的请求中,Session会自动发送登录时获得的cookies从而保持登陆状态。
- 会话状态,Session对象维护了服务器设置的cookies的状态,因此在多个请求之间也能保持会话状态。
还是使用贝克街推理论坛练手,先建立Session会话对象发送post请求登录,拿到cookie后使用同一个Session对象向目标url发送get请求获取响应的html。
运行代码:
import requests
from fake_useragent import UserAgent
# 登录页面的url
url = 'https://www.tuilixy.net/member.php?mod=logging&action=login&loginsubmit=yes&handlekey=login&loginhash=Lz8z2&inajax=1'
# post参数
data = {
'username': '困在水里的鱼',
'password': 'Beikejie027'
}
# 封装请求头
headers = {'User-Agent': UserAgent().firefox}
# 创建Session对象
s = requests.Session()
# 发送post请求
# 登录成功后就保存了cookie
s.post(url, headers=headers, data=data)
# 目标url,新学员主页,只有登录才能查看
index_url = 'https://www.tuilixy.net/space-username-zhyugi.html'
# 访问新成员的主页
resp = s.get(index_url, headers=headers)
# 打印响应的html文本内容
print(resp.text)
运行结果:
ssl验证
# 禁用来自urllib3库的所有警告,使输出更清洁
requests.packages.urllib3.disable_warnings()
# 将False赋值给verify参数禁用SSL证书验证
resp = requests.get(url, verify=False, headers=headers)
urllib禁用ssl验证:https://www.cnblogs.com/qyly/p/18415310
除了禁用SSL验证,还可以自定义CA证书不使用系统默认的证书,使用环境变量指定CA证书的路径,使用certifi库使用certify.where()获取证书路径将其传递给verify参数等方法。