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

urlopen没有实现上下文管理器,因此您不能在with块中使用它。这是错误报告

您可以使用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

urlopen不是 Python 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 回答