Python第三方requests库Response对象详解(4/6)
Response对象
requests.Response
用于表示从远程服务器收到的响应。
当你用request.get()、requests.post()等HTTP请求时,这些方法会返回一个Response对象,该对象包含了服务器返回的所有信息。
Response对象方法
1、json(**kwargs)
用于解析响应内容为JSON格式的方法。
它将响应内容解析为Python字典或列表,具体的数据结构取决于JSON内容的格式。
该方法的参数 **kwargs 允许你传递额外的参数,这些参数会传递给 json.loads() 函数,用于自定义 JSON 解析过程。这包括但不限于:
encoding: 指定 JSON 字符串的编码。默认为 None,表示自动检测编码。
cls: 用于指定一个自定义的 JSON 解码器类。
object_hook: 如果提供,它将被用于将 JSON 对象转换为 Python 对象。
parse_float, parse_int, parse_constant: 用于指定如何处理 JSON 中的浮点数、整数和特殊常量。
引发:如果响应内容不包含json格式内容将引发ValueError错误.
例:
import requests
url = ‘https://jsonplaceholder.typicode.com/todos/1’
response = requests.get(url)
# 解析响应内容为 JSON
json_data = response.json()
# 输出解析后的数据
print(“JSON Data:”)
print(json_data)
# 获取特定键的值
title = json_data.get(‘title’, ‘N/A’)
print(“Title:”, title)
输出:
JSON Data:
{‘userId’: 1, ‘id’: 1, ‘title’: ‘delectus aut autem’, ‘completed’: False}
Title: delectus aut autem
在这个例子中,response.json()方法将响应内容解析为JSON格式,返回一个对应的Python字典。然后,可以通过字典操作获取特定键的值。
请注意,如果响应的内容不是合法的JSON格式(必须整个response内容都是json格式),或者无法解析为字典或列表,response.json()方法可能会抛出json.JSONDecodeError异常。
2、iter_content(chunk_size=1, decode_unicode=False)
用于逐块迭代响应内容的方法。这个方法适用于处理大型响应内容,例如下载文件时。
当在请求上设置stream=True时,这可以防止内容一次性读取到内存中。
参数:
chunk_size:这个参数定义了每次迭代返回的数据块的大小(以字节为单位)。设置较小的chunk_size可以有效地处理大型文件,因为它允许你逐步加载文件而不会一次性加载整个文件到内存中。
decode_unicode:这个参数用于控制是否对字节数据进行解码成Unicode。如果设置为False,返回的数据将是原始的字节数据;如果设置为True,则requests将尝试将字节数据解码成Unicode。
示例:
import requests
url = ‘ https://tms.cheoa.cn/assets/images/login_bg_small.jpeg’
response = requests.get(url, stream=True)
# 按块迭代响应内容
chunk_size = 1024 # 1KB
for chunk in response.iter_content(chunk_size=chunk_size, decode_unicode=False):
# 处理每个数据块,这里只是简单地输出块大小
print(f”Received chunk of size {len(chunk)} bytes”)
# 关闭连接
response.close()
输出:
Received chunk of size 1024 bytes
Received chunk of size 1024 bytes
…略
Received chunk of size 1024 bytes
Received chunk of size 305 bytes
3、iter_lines(chunk_size=512, decode_unicode=None, delimiter=None)
用于按行迭代响应内容。
这个方法适用于处理文本响应,允许你逐行处理响应内容,而不必将整个响应加载到内存中。
当在请求上设置stream=True时,这可以防止内容一次性读取到内存中。
参数:
chunk_size: 这个参数定义了每次迭代返回的数据块的大小(以字节为单位)。设置较小的 chunk_size 可以有效地处理大型文本响应,因为它允许你逐步加载内容而不会一次性加载整个响应到内存中。
decode_unicode: 这个参数用于控制是否对字节数据进行解码成 Unicode。如果设置为 False,返回的数据将是原始的字节数据;如果设置为 True,则 requests 将尝试将字节数据解码成 Unicode。如果设置为 None(默认值),requests 将根据响应头中的编码信息自动解码。
delimiter: 这个参数用于指定行的分隔符。如果不提供分隔符,iter_lines 将使用默认的分隔符,即 ‘\n’。
注解
This method is not reentrant safe.
示例:
import requests
url = ‘https://www.example.com/large_text_file.txt’
response = requests.get(url, stream=True)
# 按行迭代响应内容
for line in response.iter_lines(chunk_size=512, decode_unicode=True):
# 处理每行数据,这里只是简单地输出每行内容
print(line)
# 关闭连接
response.close()
作者:坑里技术员