[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 字典。
相关推荐
N***77885 小时前
【玩转全栈】----Django模板语法、请求与响应
数据库·python·django
qq_22589174665 小时前
基于Python+Django豆瓣图书数据可视化分析推荐系统 可视化 协同过滤算法 情感分析 爬虫
爬虫·python·算法·信息可视化·数据分析·django
程序员spped5 小时前
分享一套非常不错的基于Python的Django图书馆(自习室)座位预约管理系统
开发语言·python·座位预约
QQ_1880838005 小时前
基于Python和django的贫困地区儿童在线帮扶系统
开发语言·python·django
zzzsde5 小时前
【Linux】基础开发工具(6):版本控制器git&&调试器gdb/cgdb
linux·运维·服务器
计算机毕业设计开发5 小时前
django高校公寓管理系统--附源码64226
java·c++·spring boot·python·spring cloud·django·php
one____dream5 小时前
【算法】移除链表元素与反转链表
数据结构·python·算法·链表
忧郁的Mr.Li5 小时前
Linux下MySQL8的密码忘记之后重置密码
linux·运维·mysql
叫我辉哥e15 小时前
### Linux命令创意组合大赛技术文章大纲
linux·运维·服务器
Volunteer Technology5 小时前
文本数据分析(二)
python·数据挖掘·数据分析