pythonurldownloadzipurllib

Download Returned Zip file from URL


If I have a URL that, when submitted in a web browser, pops up a dialog box to save a zip file, how would I go about catching and downloading this zip file in Python?


Solution

  • Most people recommend using requests if it is available, and the requests documentation recommends this for downloading and saving raw data from a url:

    import requests 
    
    def download_url(url, save_path, chunk_size=128):
        r = requests.get(url, stream=True)
        with open(save_path, 'wb') as fd:
            for chunk in r.iter_content(chunk_size=chunk_size):
                fd.write(chunk)
    

    Since the answer asks about downloading and saving the zip file, I haven't gone into details regarding reading the zip file. See one of the many answers below for possibilities.

    If for some reason you don't have access to requests, you can use urllib.request instead. It may not be quite as robust as the above.

    import urllib.request
    
    def download_url(url, save_path):
        with urllib.request.urlopen(url) as dl_file:
            with open(save_path, 'wb') as out_file:
                out_file.write(dl_file.read())
    

    Finally, if you are using Python 2 still, you can use urllib2.urlopen.

    from contextlib import closing
    
    def download_url(url, save_path):
        with closing(urllib2.urlopen(url)) as dl_file:
            with open(save_path, 'wb') as out_file:
                out_file.write(dl_file.read())