Skip to content

Instantly share code, notes, and snippets.

@ratchetwrench
Created August 15, 2017 23:23
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ratchetwrench/27786944ddd1036f9cf5b95828221909 to your computer and use it in GitHub Desktop.
Save ratchetwrench/27786944ddd1036f9cf5b95828221909 to your computer and use it in GitHub Desktop.
download image using requests and shutil
"""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_content attribute 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 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)
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment