如何使用请求下载图像

如何使用请求下载图像

我正在尝试用python的requests模块。

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

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

下面是使用requests:

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?


守着星空守着你
浏览 677回答 3
3回答

繁星点点滴滴

您可以使用response.raw文件对象,或者迭代响应。使用response.raw默认情况下,类似文件的对象不会解码压缩的响应(用GZIP或放气).您可以通过设置decode_content属性为True (requests把它设置为False来控制解码本身)。然后你可以用shutil.copyfileobj()要让Python将数据流到文件对象:import requestsimport 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个字节块读取数据;如果感觉另一个块大小更好,请使用Response.iter_content()方法具有自定义块大小: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不会先把整个图像下载到内存中。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python