使用请求下载图像
使用 Python 的 requests 模块从网络下载图像可能是一项简单的任务。然而,当从 urllib2 切换到 requests 时,了解用于检索图像数据的属性的差异至关重要。
最初,使用 urllib2 的代码使用 img.read() 读取图像,而所需的图像请求方法有 img = r.raw.read()。这是错误的,因为 r.raw 是一个文件对象,而不是实际的图像数据。
要解决此问题,有两种可行的解决方案:
使用Response.raw 文件对象:
将decode_content 设置为True 以强制解压缩压缩响应。这允许您使用 Shutil.copyfileobj() 将数据流式传输到文件对象。
import requests import shutil r = requests.get(url, stream=True) if r.status_code == 200: with open(path, 'wb') as f: r.raw.decode_content = True shutil.copyfileobj(r.raw, f)
迭代响应:
此方法可确保数据解压缩。
r = requests.get(url, stream=True) if r.status_code == 200: with open(path, 'wb') as f: for chunk in r: f.write(chunk)
或者,您可以指定使用 Response.iter_content() 自定义块大小。
r = requests.get(url, stream=True) if r.status_code == 200: with open(path, 'wb') as f: for chunk in r.iter_content(1024): f.write(chunk)
请记住以二进制模式('wb')打开目标文件以防止换行符被翻译。另外,设置stream=True可以防止整个图像被下载到内存中。
以上是如何使用Python的Requests库高效下载图片?的详细内容。更多信息请关注PHP中文网其他相关文章!