首页 >后端开发 >Python教程 >如何使用Python的'requests”模块正确下载图像?

如何使用Python的'requests”模块正确下载图像?

Susan Sarandon
Susan Sarandon原创
2024-12-11 18:06:17694浏览

How to Properly Download Images Using Python's `requests` Module?

使用 Python 的 requests 模块下载图像

尝试使用 Python 的 requests 模块从互联网下载图像时,与使用 urllib2 的 urlopen 相比,您可能会遇到代码问题方法。本文解决了这些挑战并提供了解决方案。

原始代码供参考

img = urllib2.urlopen(settings.STATICMAP_URL.format(**data))
with open(path, 'w') as f:
    f.write(img.read())

新代码供参考

r = requests.get(settings.STATICMAP_URL.format(**data))
if r.status_code == 200:
    img = r.raw.read()
    with open(path, 'w') as f:
        f.write(img)

问题

问题使用 requests 时会出现此问题,因为包含图像数据的响应中的属性与 urlopen 中的属性不同urllib2.

解决方案

要从请求响应中检索图像数据,有两个选项:

  1. 使用response.raw文件对象: 此方法需要将decode_content设置为True,然后将数据流式传输到文件对象:
r = requests.get(settings.STATICMAP_URL.format(**data), stream=True)
if r.status_code == 200:
    with open(path, 'wb') as f:
        r.raw.decode_content = True
        shutil.copyfileobj(r.raw, f)        
  1. 迭代响应:此方法确保请求在迭代期间解码数据:
r = requests.get(settings.STATICMAP_URL.format(**data), stream=True)
if r.status_code == 200:
    with open(path, 'wb') as f:
        for chunk in r:
            f.write(chunk)

通过在请求调用中设置stream=True,可以防止一次将整个图像下载到内存中。该文件应以二进制模式打开以避免错误。

以上是如何使用Python的'requests”模块正确下载图像?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn