'content'和'text'之间有什么区别

dot*_*hen 98 python python-requests

我正在使用极好的Python Requests库.我注意到,精美的文档中有许多如何在不解释原因的情况下做某事的例子.举例来说,无论是r.textr.content显示为实例如何获取服务器响应.但它在哪里解释了这些属性的作用?例如,我何时会选择一个而不是另一个?我看到thar 有时会r.text返回一个unicode对象,我认为非文本响应会有所不同.但所有这些记录在哪里?请注意,链接的文档确实说明:

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

但接下来它将展示文本响应的示例!我只能假设上面的引用意味着non-text responses代替non-text requests,因为非文本请求在HTTP中没有意义.

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

Gar*_*err 121

开发接口进行了详细介绍:

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

  • 你什么时候选择其中一个? (39认同)
  • @multigoodverse:大概是`r.text`对于文本响应(例如HTML或XML文档)是首选,而`r.content`对于"二进制"文件类型(例如图像或PDF文件)是首选. (7认同)
  • @dotancohen HTML和XML使用数据中的声明来进行自己的解码,因此它们应该被提供原始的`r.content`,而不是被转换的`r.text`. (4认同)
  • 为什么 python 解释器将 `r.text` 和 `r.content` 显示为文本。为什么不将“r.content”显示为文本,将“r.text”显示为位(如果这就是它的本质)? (2认同)

PyN*_*bie 11

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

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

 >>> r.content
Run Code Online (Sandbox Code Playgroud)

如果您在页面下方进一步阅读,它会解决例如图像文件

  • 谢谢.我现在看到第一个例子前面的小`b`和文本"for non-text requests",这意味着该对象是一个bytes对象.目前尚不清楚为什么字节显示为文本,也许这是另一个Python'精确',但它在这种情况下令人困惑.谢谢. (2认同)
  • 这似乎对 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'` (2认同)