我正在尝试使用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__
答案 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)
它以块的形式读/写,可以让你干净地下载大文件。