[Web自动化] Requests模块响应的内容

6.2 响应的内容

使用requests方法后,会返回一个response对象,其存储了服务器响应的内容。而response对象中的request对象则存储了相关请求内容。

6.2.1 response.request对象:请求内容

py 复制代码
import requests
from icecream import ic
response = requests.get(url='http://dict.baidu.com/s', params={'wd': 'python'})
request = response.request
ic(request.method)# 请求方法
ic(request.url)# 请求地址
ic(request.headers)# 请求头
ic(request.body)# 请求体(正文)
ic(request._Cookies)# 请求Cookies
ic(request.hooks)# 请求钩子

13:22:11|> request.method: 'GET'

13:22:11|> request.url: 'https://dict.baidu.com/s?wd=python'

13:22:11|> request.headers: {'User-Agent': 'python-requests/2.27.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '/ ', 'Connection': 'keep-alive'}

13:22:11|> request.body: None

13:22:11|> request._Cookies: <RequestsCookieJar\[\]>

13:22:11|> request.hooks: {'response': \[\]}

6.2.2 response对象:响应内容

py 复制代码
import requests
from icecream import ic
response = requests.get(url='http://dict.baidu.com/s', params={'wd': 'python'})
ic(response.apparent_encoding)# 响应编码
ic(response.connection)# 连接类型
(response.content)# 响应内容
ic(response.Cookies)# 响应Cookie
ic(response.encoding)# 编码
ic(response.headers)# 响应头
ic(response.is_permanent_redirect)# 是否永久重定向
ic(response.is_redirect)# 是否重定向
ic(response.links)# 响应链接
ic(response.ok)# 响应状态码是否为200
ic(response.raw)# 原始响应体
ic(response.reason)# 响应状态码原因
ic(response.request)# 发送请求的请求对象
ic(response.status_code)# 响应状态码
(response.text)# 响应内容
ic(response.url)# 响应url
ic(r.history)# 返回重定向信息,当然可以在请求是加上allow_redirects = false 阻止重定向

13:35:42|> response.apparent_encoding: 'utf-8'

13:35:42|> response.connection: <requests.adapters.HTTPAdapter object at 0x000002275A16F0A0>

13:35:42|> response.Cookies: <RequestsCookieJarCookie(version=0, name='BAIDUID', value='7AC84A542BEF4BA0FCAF5193D6ABD531:FG=1', port=None, port_specified=False, domain='.baidu.com', domain_specified=True, domain_initial_dot=True, path='/', path_specified=True, secure=False, expires=1752384942, discard=False, comment=None, comment_url=None, rest={}, rfc2109=True)>

13:35:42|> response.encoding: 'UTF-8'

13:35:42|> response.headers: {'Content-Encoding': 'gzip', 'Content-Type': 'text/html; charset=UTF-8', 'Date': 'Sat, 13 Jul 2024 05:35:42 GMT', 'P3p': 'CP=" OTI DSP COR IVA OUR IND COM "', 'Server': 'Apache', 'Set-Cookie': 'BAIDUID=7AC84A542BEF4BA0FCAF5193D6ABD531:FG=1; expires=Sun, 13-Jul-25 05:35:42 GMT; max-age=31536000; path=/; domain=.baidu.com; version=1', 'Tracecode': '21419605820294162442071313', 'Vary': 'Accept-Encoding', 'Transfer-Encoding': 'chunked'}

13:35:42|> response.is_permanent_redirect: False

13:35:42|> response.is_redirect: False

13:35:42|> response.links: {}

13:35:42|> response.ok: True

13:35:42|> response.raw: <urllib3.response.HTTPResponse object at 0x000002275A436920>

13:35:42|> response.reason: 'OK'

13:35:42|> response.request: <PreparedRequest GET>

13:35:42|> response.status_code: 200

13:35:42|> response.url: 'https://dict.baidu.com/s?wd=python'

13:35:42|> response.history: \>]

响应response的content和text的区别:
1. content
类型:bytes
描述:content属性以字节(bytes)形式返回原始响应体。这意味着,无论响应的Content-Type是什么,content都会直接以字节形式返回数据。这对于需要处理二进制数据(如图片、PDF文件或任何非文本文件)的场景特别有用。
使用场景:当你需要处理非文本响应体,或者需要确保数据的原始性时(例如,防止编码问题影响数据),应使用content。
2. text
类型:str
描述:text属性以字符串(str)形式返回响应体的内容。在返回之前,requests会根据响应的Content-Type头部信息自动尝试对内容进行解码。这意味着,如果响应是JSON、HTML或其他文本格式,text属性将提供一个易于阅读和处理的字符串表示。
使用场景:当你需要处理文本数据(如HTML页面、JSON响应等)时,应使用text。它简化了文本数据的处理过程,因为你不需要自己处理编码问题。
注意事项

默认情况下,requests库会根据HTTP头部中的charset参数来解码text属性。如果没有指定charset,则requests会尝试使用chardet库来猜测编码。

当你需要访问JSON响应时,可以使用response.json()方法,它会解析text(或content,如果text解析失败)为Python字典。这比手动解析JSON字符串要方便得多。

需要注意的是,如果响应体不是有效的文本(例如,是二进制数据),尝试访问text属性可能会引发错误,因为解码过程可能会失败。在这种情况下,你应该使用content属性。

6.2.3 response对象:相关操作

py 复制代码
r.encoding = 'utf-8'# 设置编码
r.encoding = r.apparent_encoding# 自动解码
r.raise_for_status()# 失败请求(非200响应)抛出异常
r.json():将 JSON 格式的响应体内容解析为 Python 字典。
相关推荐
En^_^Joy30 分钟前
Nginx 从入门到精通:配置、原理与实战详解
运维·nginx
玖石书1 小时前
WSL2 手动安装 Ubuntu 24.04 到指定磁盘位置
linux·运维·ubuntu·wsl
এ慕ོ冬℘゜1 小时前
前端实战:jQuery实现动态表格渲染与状态切换功能
前端·javascript·jquery
烂蜻蜓1 小时前
Flask入门教程(十二):表单处理——从基础到Flask-WTF完整实践
后端·python·flask
随便做点啥2 小时前
32卡-64G-910B4-16后端-(Qwen3.8-27B-W8A8)集群部署报告
运维·服务器·经验分享·docker·vllm
jay神2 小时前
【计算机毕业设计】基于Flask+Vue的电影数据可视化与智能推荐系统
前端·vue.js·python·信息可视化·flask·毕业设计·课程设计
满怀冰雪2 小时前
24-PaddleClas 模型评估、导出与推理部署入门
大数据·人工智能·python·深度学习·paddle
FreeTinker8 小时前
HTML本地存储技术解析:localStorage与sessionStorage的原理、差异与应用场景
前端·html
qq_452396238 小时前
第十二篇:《全链路监控与可观测性:前端错误追踪与性能分析》
前端
2601_962218478 小时前
万象生鲜系统区块链溯源技术帮助生鲜企业搭建食品安全数字化体系
大数据·运维·微服务·云原生·架构