解析请求响应时应该使用 .text 还是 .content?

问题描述 投票:0回答:2

我偶尔使用

res.content
res.text
来解析来自 Requests 的响应。在我的用例中,我使用哪个选项似乎并不重要。

使用

.content
.text
解析 HTML 的主要区别是什么?例如:

import requests 
from lxml import html
res = requests.get(...)
node = html.fromstring(res.content)

在上述情况下,我应该使用

res.content
还是
res.text
?何时使用每种方法的良好经验法则是什么?

python python-requests lxml
2个回答
15
投票

来自文档

当您提出请求时,Requests 会对请求做出有根据的猜测 基于 HTTP 标头的响应编码。文本编码 访问

r.text
时使用 Requests 猜测。你可以了解一下 请求正在使用什么编码,并使用
r.encoding
更改它 属性:

>>> r.encoding
'utf-8'
>>> r.encoding = 'ISO-8859-1'

如果更改编码,请求将使用新值

r.encoding
每当您致电
r.text
时。您可能想在任何情况下执行此操作 您可以应用特殊逻辑来计算出什么情况 内容的编码将是。例如,HTTP 和 XML 有 能够在其主体中指定其编码。在类似的情况下 这个,你应该使用
r.content
找到编码,然后设置
r.encoding
。这将使您可以使用正确的编码来使用
r.text

因此,当服务器返回二进制数据或虚假编码标头时,会使用

r.content
来尝试在元标记内找到正确的编码。


0
投票

我认为

res.content
res.text
没有可比性,您应该使用哪一个取决于您的用例。使用
res.text
进行文本响应,使用
res.content
进行图像或 PDF 等二进制文件。

所有互联网内容均以字节形式接收。为了防止将其转换为 Unicode 格式,Requests 提供了

text
属性。假设
text
content
的糖衣版本。

import requests
res = requests.get("https://httpbin.org/get")
res.text == res.content.decode(encoding == res.encoding)
True
© www.soinside.com 2019 - 2024. All rights reserved.