1.requests的高级用法
1.1自动携带cookie的session对象
浏览器的HTTP请求是无状态无连接的
所以在每次发送请求时不会自动携带cookie
借助与session发送请求解决此问题
import request
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
'refer':'',
}
data={
'linkId':'',
}
session = requests.session()
res = session.post('http://www.aa7a.cn/user.php', data=data, headers=header)
# 此时就不需要携带cookie
res1 = session.get('http://www.aa7a.cn/')
1.2 响应对象Response
HTTP的响应就是res对象,所有HTTP响应的东西都在对象中
import requests
response = requests.get('')
# 类型
type(response)
# 响应体转成字符串,默认使用UTF-8
response.text
# 响应体的bytes格式
response.content
# 响应状态码
response.status_code
# cookie
response.cookie
# 将cookie转成字典
response.cookies.get_dict()
# 键值对
response.cookies.items()
# 请求的地址
response.url
# 访问一个地址如果重定向,requests会自动重定向过去,history中存放着没有重定向之前的地址
response.history
# 网页编码
response.encoding
# 关闭
response.close()
# 用于下载图片视频,一点一点取值
response.iter_content()
1.3 案例:下载图片或视频到本地
res = requests.get('图片或者视频的网址')
with open ('文件名','wb') as f :
for line in res.iter_content(chunk_size=1024):
f.write(line)
1.4 编码问题
直接打印res.text字符串形式,从网络过来时二进制;转成二进制涉及到编码,默认是以utf-8
可以指定转换成字符串的编码格式
res.encodeing = '编码格式'
1.5 解析json格式数据
网页返回的数据可能是json格式
解析后可以直接使用
解析json格式数据的网址
www.Json.com
data:可以是浏览器编码后原生的,可以是k:v键的形式
res = requests.post('请求地址', data=data, headers=header)
# 解析浏览器返回的数据
res.json()
# 将数据使用解析网址解析
# 使用循环取出数据中想要的内容
for item in res.json()
# item是数据中的到的对象
# 直接使用 item['K键'] 取值即可
1.6 发送HTTPS请求
# 参数
verify = False
# 不使用安全证书发送HTTPS请求
# 如果报错在发送请求时携带证书即可
requests.post('请求地址', data=data, headers=header,cert=('证书'))
1.7 使用代理
import requests
# 参数是proxies
proxies = {
}
response = requests.get('网址',proxies)
1.8 超时设置
import requests
# 参数是timeout
response = requests.get('网址',timeout=1)
1.9 异常处理
在向网址发送请求的时候可能会遇到异常
用requests模块的异常会捕获到详细的异常信息
可以使用全局的异常捕获
只不过requests模块的异常捕获更为详细
import requests
from requests.exceptions import *
tyr:
response = requests.get('请求地址',timeout=1)
except ReadTimeout:
.....
except RequsestsException:
.....
except Exception as e:
print(e)
1.10 上传文件
import requests
files = {
'文件名':open('本地文件名','rb')
}
response = requests.post('提交的网址',files=files)