Python爬虫之requests中处理响应内容:text 与 content 的选择

✨ 在使用 Python 的 requests 库进行 HTTP 请求时,我们经常需要从响应中获取返回的内容。requests.get() 方法会返回一个 Response 对象,而其中的内容通常可以通过 Response 对象的 text 或 content 属性来访问。虽然这两个属性都可以用来获取响应的内容,但它们各自的用途和行为存在重要差异。

一、Response.text:解码后的响应内容

🌾 概述

text 属性返回的是 解码后的响应内容,其类型通常是一个字符串。requests 会自动根据服务器响应头中的 Content-Type 或 charset 参数来推测并进行字符解码,常见的编码方式有 UTF-8ISO-8859-1 等。

🌾 适用场景

text 适用于你已经知道响应内容是 文本数据,如 HTML 页面、JSON 格式数据或普通文本等。

🌾 工作原理

当你通过 requests.get() 获取 HTTP 响应时,服务器会根据 Content-Type 头部告诉客户端内容的类型(例如:text/html、application/json 等),而 requests 会根据这些信息选择合适的编码方式来解码返回的字节数据。如果响应中包含了字符集(charset),它将按照字符集进行解码。

🌾 使用示例:

假设我们访问一个 HTML 页面,并想要获取其中的内容:

#🌾:导入 requests 请求工具
import requests

#🌾:爬取数据
response = requests.get('https://ssr1.scrape.center/',verify=False)
#🌾 应头中的 Content-Type 或 charset 参数来推测并进行字符解码,得到网页内容。
print(type(response.text)) # <class 'str'> 字符串
print(response.text) 

在这个例子中,response.text 会返回解码后的 HTML 内容。假设网页的内容是 UTF-8 编码的,requests 会自动按 UTF-8 解码它。

💡 注意事项

1. 如果服务器返回的内容编码不正确或无法识别,requests 可能无法正确解码,导致乱码或错误。
2. 如果你确定返回内容是纯文本,text 非常方便,因为它已经处理了字符编码的问题。

二、Response.content:原始字节内容

🌾 概述

content 属性返回的是 原始字节数据,无论响应是什么格式,它都不会对内容进行解码。这意味着它返回的仍然是 HTTP 响应的原始字节流数据。

🌾 适用场景

content 适用于处理 二进制数据,例如图片、视频、PDF 文件、音频文件等,或者当你需要完全控制响应数据的编码和解码时。

🌾 工作原理

content 属性不会进行字符解码,因此它可以用于获取任何类型的响应数据(无论是文本还是二进制)。例如,如果响应是一个 PDF 文件或图片,content 将返回其原始字节流,你可以直接保存到文件中或进一步处理。

🌾 使用示例

假设你要下载一个图片文件并将其保存到本地:

#🌾:导入 requests 请求工具
import requests
#🌾:爬取数据
response = requests.get('https://www.baidu.com/favicon.ico',verify=False)
#🌾 获取原始字节内容并保存为图片
with open('image.jpg','wb') as file:
    file.write(response.content)

在这个例子中,response.content 返回的是图片的原始字节数据。我们使用 'wb' 模式打开文件,表示我们要以二进制模式写入文件,因此不会对数据进行任何解码或修改。

💡 注意事项
1. 由于 content 返回的是字节串,你需要自行处理文件的保存或其他二进制数据操作。
2. 如果你试图将二进制数据作为字符串处理(例如尝试用 print(response.content)),结果可能会显示为不可读的字符或乱码。

三、text 与 content 的比较

 

 

四、何时选择使用 text 或 content?

🌾 选择 text

当你知道响应内容是 文本格式,如 HTML、JSON、XML 或纯文本时。

当响应中包含字符集信息(如 UTF-8 或 ISO-8859-1),你希望 requests 自动处理字符解码时。

适用于获取网页内容或解析 JSON 格式的 API 响应。

🌾 选择 content

当你处理 二进制数据,如图片、视频、音频、PDF 等时。

当你需要手动处理编码或保存文件而不希望进行字符解码时。

适用于下载文件或处理任何非文本数据。

五、总结

  • text 是处理 文本数据 的首选,它会自动解码响应内容并返回一个字符串。适用于 HTML 页面、JSON 数据、XML 文档等。
  • content 适用于获取 原始字节数据,特别是对于二进制内容(如图片、音频、视频或文件下载)非常有用。它不会进行任何解码,因此可以完整地保留数据。

根据具体的需求选择适合的属性,可以帮助你更有效地处理 HTTP 响应,确保程序的稳定性和正确性。

posted on 2024-12-16 17:22  梁飞宇  阅读(1324)  评论(0)    收藏  举报