【问题标题】:What is the difference between 'content' and 'text'“内容”和“文本”有什么区别
【发布时间】:2013-06-05 08:52:09
【问题描述】:

我正在使用很棒的 Python Requests 库。我注意到fine documentation 有很多如何 做某事的例子,而没有解释为什么。例如,r.textr.content 都显示为如何 获取服务器响应的示例。 但它在哪里解释了这些属性的作用?例如,我什么时候会选择一个而不是另一个?我看到 thar r.text 返回一个 unicode 对象有时,我想非文本响应会有所不同。但是所有这些记录在哪里?请注意,链接的文档确实声明:

对于非文本请求,您还可以按字节访问响应正文:

然后它继续显示文本响应的示例!我只能假设上面引用的意思是说non-text responses而不是non-text requests,因为非文本请求在HTTP中没有意义。

简而言之,与 Python Requests 网站上的(优秀的)教程相比,该库的正确文档在哪里?

【问题讨论】:

  • “简而言之,与 Python 请求站点上的(优秀)教程相反,库的正确文档在哪里?”可能是侧边栏上的“API 参考”链接?
  • @KarlKnechtel:谢谢。八年前提出这个问题时,Python Requests 网站的组织方式很可能有所不同!

标签: python python-requests


【解决方案1】:

requests.Responsedocumentation 有更多详细信息:

r.text 是响应的 Unicode 内容,r.content 是响应的内容,以字节为单位。

【讨论】:

  • 你什么时候选择其中一个?
  • @multigoodverse:可能r.text 更适合文本响应,例如 HTML 或 XML 文档,r.content 更适合“二进制”文件类型,例如图像或 PDF 文件.
  • @dotancohen HTML 和 XML 使用数据中的声明来进行自己的解码,因此它们应该被提供原始的 r.content,而不是隐藏的 r.text
  • 更一般地说,单个响应可能包含嵌套或多部分内容(如带有附件的电子邮件),并且每个部分可能以不同的方式编码。如果不访问字节流,就不可能处理这样的响应,但这与您只需要正确解码的 Unicode 文本的常见情况相去甚远。
  • 为什么python解释器将r.textr.content都显示为文本。为什么不将r.content 显示为文本,将r.text 显示为位(如果它本来就是这样的话)?
【解决方案2】:

从文档中可以清楚地看出 r.content

You can also access the response body as bytes, for non-text requests:

 >>> r.content

如果您进一步阅读页面,它会处理例如图像文件

【讨论】:

  • 谢谢。我现在看到第一个示例前面的小 b 带有文本“用于非文本请求”,这意味着该对象是字节对象。目前尚不清楚为什么字节被显示为文本,也许这是另一个 Python 的“好”,但在这种情况下它是令人困惑的。谢谢。
  • 这似乎对 python 3.x 比 python 2.x 更重要;在 page.content 上的 python 3 中使用 requests 会出现此错误:if 'rss' in page.content: --> TypeError: a bytes-like object is required, not 'str'
猜你喜欢
  • 1970-01-01
  • 2011-12-03
  • 2021-01-24
  • 2019-08-18
  • 1970-01-01
  • 1970-01-01
  • 2022-08-12
  • 1970-01-01
相关资源
最近更新 更多