【问题标题】:Should I use .text or .content when parsing a Requests response?解析请求响应时应该使用 .text 还是 .content ?
【发布时间】:2017-03-02 23:29:15
【问题描述】:

我偶尔使用res.contentres.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


    【解决方案1】:

    来自documentation

    当您提出请求时,Requests 会做出有根据的猜测 基于 HTTP 标头的响应编码。文本编码 当您访问 r.text 时使用 Requests 猜测的。你可以了解 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 在服务器返回二进制数据或伪造的编码标头时使用,以尝试在元标记中找到正确的编码。

    【讨论】:

    • 进一步阅读,如果响应是 binary 而不是文本,您还可以使用 .content
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 2019-12-12
    相关资源
    最近更新 更多