gpt4 book ai didi

python - 如何使用请求下载图像

转载 作者:太空宇宙 更新时间:2023-11-03 21:24:38 26 4
gpt4 key购买 nike

我正在尝试使用 python 的 requests 模块从网络下载并保存图像。

这是我使用的(工作)代码:

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)

您能帮助我了解要从请求使用响应中的哪些属性吗?

最佳答案

您可以使用 response.raw file object ,或迭代响应。

默认情况下,使用 response.raw 文件对象不会解码压缩响应(使用 GZIP 或 deflate)。您可以通过将 decode_content 属性设置为 True 强制它为您解压缩(requests 将其设置为 False控制解码本身)。然后您可以使用 shutil.copyfileobj()让 Python 将数据流式传输到文件对象:

import requests
import shutil

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)

要迭代响应,请使用循环;像这样的迭代可确保数据在此阶段解压缩:

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)

这将以 128 字节 block 的形式读取数据;如果您觉得其他 block 大小效果更好,请使用 Response.iter_content() method使用自定义 block 大小:

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.iter_content(1024):
f.write(chunk)

请注意,您需要以二进制模式打开目标文件,以确保 python 不会尝试为您翻译换行符。我们还设置了 stream=True,以便 requests 不会首先将整个图像下载到内存中。

关于python - 如何使用请求下载图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53937986/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com