“内容”和“文本”有什么区别


122

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

对于非文本请求,您还可以字节形式访问响应主体:

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

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


Answers:


144

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

r.text是Unicode中响应的内容,并且r.content是字节中响应的内容。


46
您什么时候选择其中一个?
multigoodverse

13
@multigoodverse:大概r.text对于文本响应(例如HTML或XML文档)r.content是首选的,而对于“二进制”文件类型(例如图像或PDF文件)的首选。
dotancohen

5
@dotancohen HTML和XML使用数据中的声明进行自己的解码,因此应将其馈入原始数据r.content,而不是隐蔽数据r.text
tdelaney

更一般而言,单个响应可能包含嵌套或多部分内容(例如带有附件的电子邮件),并且每个部分都可能以不同的方式编码。如果不访问字节流就无法处理此类响应,但是与通常只需要正确解码的Unicode文本的情况相比,这还有很长的路要走。
holdenweb

为什么python解释器同时显示r.textr.content作为文本。为什么不显示r.content为文本和r.text位(如果本质上就是这样)?
阿恩布(Arnb)

11

从文档中可以明显看出,r.content

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

 >>> r.content

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


2
谢谢。现在,我b在第一个示例之前看到小写的文字“非文本请求”,这意味着该对象是一个字节对象。目前尚不清楚为什么字节被显示为文本,也许这是另一个Python的“漂亮”,但是在这种情况下它令人困惑。谢谢。
dotancohen

1
与python 2.x相比,python 3.x似乎更重要;使用requests在上page.content蟒3给出了这样的错误: if 'rss' in page.content:- >TypeError: a bytes-like object is required, not 'str'
马克Maxmeister
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.