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

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

Susan Sarandon
发布: 2024-12-11 18:06:17
原创
738 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板