我偶尔使用
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
?何时使用每种方法的良好经验法则是什么?
来自文档:
当您提出请求时,Requests 会对请求做出有根据的猜测 基于 HTTP 标头的响应编码。文本编码 访问
时使用 Requests 猜测。你可以了解一下 请求正在使用什么编码,并使用r.text
更改它 属性:r.encoding
>>> r.encoding
'utf-8'
>>> r.encoding = 'ISO-8859-1'
如果更改编码,请求将使用新值
每当您致电r.encoding
时。您可能想在任何情况下执行此操作 您可以应用特殊逻辑来计算出什么情况 内容的编码将是。例如,HTTP 和 XML 有 能够在其主体中指定其编码。在类似的情况下 这个,你应该使用r.text
找到编码,然后设置r.content
。这将使您可以使用正确的编码来使用r.encoding
。r.text
因此,当服务器返回二进制数据或虚假编码标头时,会使用
r.content
来尝试在元标记内找到正确的编码。
我认为
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