0

非推奨のため、shutil/urlopen で画像をダウンロードしようとしていますか? 非推奨かどうかはわかりませんが、urlretrieve はファイルをダウンロードせず、代わりに画像名のフォルダーを作成するだけです。他の質問を見た後、このコードを提供するものを見ましたが、これでもエラーが発生します。

from urllib2 import urlopen
from shutil import copyfileobj


url = 'http://www.watchcartoononline.com/thumbs/South-Park-Season-14-Episode-11-Coon-2-Hindsight.jpg'
path = 'image.jpg'

with urlopen(url) as in_stream, open(path, 'wb') as out_file:
    copyfileobj(in_stream, out_file)

出力

with urlopen(url) as in_stream, open(path, 'wb') as out_file:
AttributeError: addinfourl instance has no attribute '__exit__
4

3 に答える 3

2

urlopenwithはコンテキスト マネージャーを実装していないため、ブロック内では使用できません。ここにバグレポートがあります。

contextlib.closing上記のバグレポートでは、それに関するいくつかの問題についても言及されていますが、ラップするために使用できます。

注: これは Python < 3.2 にのみ適用されます

于 2013-05-15T20:07:09.913 に答える
2

これを試して:

import urllib
urllib.urlretrieve("http://url/img.jpg", "img.jpg")
于 2013-05-15T20:07:31.517 に答える
1

urlopenPython 2 のコンテキスト マネージャーではありません (3 については知りません)。手動で開いて閉じる必要があります。

in_stream = urlopen(url)

with open(path, 'wb') as out_file:
    copyfileobj(in_stream, out_file)

in_stream.close()

次を使用することもできますurllib.urlretrieve

import urllib

urllib.urlretrieve(url, path)

チャンクで読み取り/書き込みを行うため、大きなファイルをきれいにダウンロードできます。

于 2013-05-15T20:09:23.703 に答える