[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: <RequestsCookieJar[Cookie(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 [301]>]

响应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 字典。
相关推荐
普马萨特3 小时前
GPS、WiFi、基站定位:为什么在 Agent 时代不仅不受影响,反而更重要
linux·运维·服务器
喵手3 小时前
Python爬虫实战:京东/淘宝搜索多页爬虫实战 - 从反爬对抗到数据入库的完整工程化方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·京东淘宝页面数据采集·反爬对抗到数据入库·采集结果csv导出
B站_计算机毕业设计之家4 小时前
猫眼电影数据可视化与智能分析平台 | Python Flask框架 Echarts 推荐算法 爬虫 大数据 毕业设计源码
python·机器学习·信息可视化·flask·毕业设计·echarts·推荐算法
2501_941982054 小时前
别再手动发群消息了!企业微信外部群自动化推送的架构设计与实现
运维·自动化·企业微信
PPPPPaPeR.4 小时前
光学算法实战:深度解析镜片厚度对前后表面折射/反射的影响(纯Python实现)
开发语言·python·数码相机·算法
REDcker4 小时前
埋点系统设计:从成熟工具到自建方案
运维·服务器·网络·用户分析·埋点·埋点系统
JaydenAI4 小时前
[拆解LangChain执行引擎] ManagedValue——一种特殊的只读虚拟通道
python·langchain
程序员Agions4 小时前
useMemo、useCallback、React.memo,可能真的要删了
前端·react.js
先做个垃圾出来………4 小时前
SSH密钥管理最佳实践
运维·ssh
滕青山4 小时前
Vue项目BMI计算器技术实现
前端·vue.js