python--requests下载图片

来源:互联网 发布:周立功单片机使用方法 编辑:程序博客网 时间:2024/05/16 01:56

转载自http://stackoverflow.com/questions/13137817/how-to-download-image-using-requests

You can either use the response.raw file object, or iterate over the response.

To use the response.raw file-like object will not, by default, decode compressed responses (with GZIP or deflate). You can force it to decompress for you anyway by setting the decode_contentattribute to True (requests sets it to False to control decoding itself). You can then use shutil.copyfileobj() to have Python stream the data to a file object:

import requestsimport shutilr = 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)        

To iterate over the response use a loop; iterating like this ensures that data is decompressed by this stage:

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)

This'll read the data in 128 byte chunks; if you feel another chunk size works better, use the Response.iter_content() method with a custom chunk size:

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)

Note that you need to open the destination file in binary mode to ensure python doesn't try and translate newlines for you. We also set stream=True so that requests doesn't download the whole image into memory first.

0 0
原创粉丝点击