下载web图像w / urlopen / shutil:error __exit__

时间:2013-05-15 20:04:48

标签: python downloading urlopen shutil webimage

我正在尝试使用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__

3 个答案:

答案 0 :(得分:2)

urlopen未实现上下文管理器,因此您无法在with块中使用它。这是bug report

您可以使用contextlib.closing来包装它,尽管上面的错误报告也提到了一些问题。

注意:这仅适用于Python< 3.2

答案 1 :(得分:2)

试试这个:

import urllib
urllib.urlretrieve("http://url/img.jpg", "img.jpg")

答案 2 :(得分: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)

它以块的形式读/写,可以让你干净地下载大文件。