0

1kバイトの画像しかダウンロードしない理由を誰か教えてもらえますか(を使用した場合と同じ問題urlretrieve())? 画像のサイズはそれよりもはるかに大きいです。

f = open('00000001.gif','wb')
f.write(urllib.urlopen('http://gifs.gifbin.com/082013/tn_1378920172_decapitated_snake_bites_itself.gif').read())
f.close()
4

2 に答える 2

0

ネットワークまたは取得しようとしている URL を確認する必要があります。Python は EOF に達するまで結果ソケットから読み取ります。そのため、予想よりも少ないデータが得られた場合は、不完全な応答が送信されたか、ネットワークが応答を短くしたか (プロキシ サーバー、ファイアウォール、what-have-you)、またはあなたの仮定のいずれかです。その URL に対してサーバーが送信する内容が間違っています。

shutil.copyfileobj()また、あなたのために読書をするために使用したい:

from shutil import copyfileobj

im = urllib.urlopen('http://gifs.gifbin.com/082013/tn_1378920172_decapitated_snake_bites_itself.gif')
with open('00000001.gif', 'wb') as out:
    copyfileobj(im, out)

これにより、チャンクでのデータの読み取りが処理されるだけでなく、ブートするバイナリ データの大きなブロブでメモリがいっぱいになるのを回避できます。このwithステートメントは、ファイル オブジェクトを閉じる処理を行います。

于 2013-09-13T09:02:03.513 に答える