0

このスクリプトは、Web サイトからファイルをダウンロードします。大きなファイルでは、失われたパケットによりダウンロードが停止するため、問題が発生します... コードは次のとおりです。

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()

大きなファイルをダウンロードする方法はありますか?

4

1 に答える 1

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)
于 2013-04-23T13:19:38.330 に答える