How to download a file using python in a 'smarter' way?

前端 未结 5 1597
盖世英雄少女心
盖世英雄少女心 2020-11-27 10:04

I need to download several files via http in Python.

The most obvious way to do it is just using urllib2:

import urllib2
u = urllib2.urlopen(\'http:/         


        
5条回答
  •  一生所求
    2020-11-27 10:43

    Based on comments and @Oli's anwser, I made a solution like this:

    from os.path import basename
    from urlparse import urlsplit
    
    def url2name(url):
        return basename(urlsplit(url)[2])
    
    def download(url, localFileName = None):
        localName = url2name(url)
        req = urllib2.Request(url)
        r = urllib2.urlopen(req)
        if r.info().has_key('Content-Disposition'):
            # If the response has Content-Disposition, we take file name from it
            localName = r.info()['Content-Disposition'].split('filename=')[1]
            if localName[0] == '"' or localName[0] == "'":
                localName = localName[1:-1]
        elif r.url != url: 
            # if we were redirected, the real file name we take from the final URL
            localName = url2name(r.url)
        if localFileName: 
            # we can force to save the file as specified name
            localName = localFileName
        f = open(localName, 'wb')
        f.write(r.read())
        f.close()
    

    It takes file name from Content-Disposition; if it's not present, uses filename from the URL (if redirection happened, the final URL is taken into account).

提交回复
热议问题