Python urllib2未完成的下载文件

时间:2013-04-23 12:48:12

标签: python download urllib2

此脚本从网站下载文件,在大文件中存在问题,因为丢失的数据包导致停止下载...以下是代码:

def download(self):

    adres = r"http://example.com/100_MbFile.zip"
    local = adres.split('/')[-1].split('#')[0].split('?')[0]

    try:
        print "Przygotowanie do zapisania pliku " + local
        u = urllib2.urlopen(adres)
        f = open(local, 'wb')
        meta = u.info()
        file_size = int(meta.getheaders("Content-Length")[0])
        print("Downloading: {0} Bytes: {1}".format(adres, file_size))

        file_size_dl = 0
        block_sz = 8192
        while True:
            buffer = u.read(block_sz)
            if not buffer:
                break

            file_size_dl += len(buffer)
            f.write(buffer)
            p = float(file_size_dl) / file_size
            status = r"{0}  [{1:.2%}]".format(file_size_dl, p)
            status = status + chr(8)*(len(status)+1)
            sys.stdout.write(status)


        if file_size_dl == file_size:
            f.close()

如何下​​载大文件?

1 个答案:

答案 0 :(得分:0)

在Python 2中下载和保存文件,你有几个选择......

您可以使用urllibhttp://docs.python.org/2/library/urllib.html#urllib.urlretrieve

这基本上是你正在尝试的:

import urllib

filename = '100_MbFile.zip'
url = 'http://example.com/' + filename

urllib.urlretrieve(url, filename)

...或者您可以使用urllib2,并指定要读取的块大小(如示例代码中所示)。

import urllib2

filename = '100_MbFile.zip'
url = 'http://example.com/' + filename

req = urllib2.urlopen(url)
block_sz = 8192
with open(filename, 'wb') as f:
    while True:
        chunk = req.read(block_sz)
        if not chunk:
            break
        f.write(chunk)