Python urllib不';请不要给我正确的文件类型

Python urllib不';请不要给我正确的文件类型,python,image,url,urllib,Python,Image,Url,Urllib,我正在使用urllib python模块从外部URL获取图像。 它工作得很好,但是有一些图像给我带来了这样的问题: 我的代码如下 import urllib img = urllib.urlretrieve("https://cdn.tutsplus.com/wp/uploads/2014/01/grunt-logo-400.png") 当我打印img时,它会显示: “/tmp/tmpbuhfUW.png” 但如果我打印img[1],请键入它提供的信息: “文本/html” 因此,文件类型不

我正在使用urllib python模块从外部URL获取图像。 它工作得很好,但是有一些图像给我带来了这样的问题:

我的代码如下

import urllib
img = urllib.urlretrieve("https://cdn.tutsplus.com/wp/uploads/2014/01/grunt-logo-400.png")
当我打印img时,它会显示: “/tmp/tmpbuhfUW.png”

但如果我打印img[1],请键入它提供的信息: “文本/html”

因此,文件类型不正确

有什么解决办法吗


PS:我检查了下载图像的/tmp文件夹,发现图像是空白的。 PS2:我也试过使用urllib2.urlopen(“cdn.tutsplus.com/wp/uploads/2014/01/grunt-logo-400.png”),但它给出了错误403

更新: 最后,我通过以下方法解决了这个问题:

class MyOpener(urllib.FancyURLopener):
    version = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11'

myopener = MyOpener()
i = myopener.retrieve("https://cdn.tutsplus.com/wp/uploads/2014/01/grunt-logo-400.png")

现在它将文件类型打印为“image/png”

据我所知,您没有做错任何事情。Urllib只是错误地猜测mime类型。我不知道你到底想做什么,但你可以说

filetype = img[0].split('.')[1]

检索文件类型,然后检查它是否包含在不同图像文件类型的数组中,以确定它是否是指向图像的链接。

我检查了下载图像的/tmp文件夹,发现该图像为空。是否每个无法正确识别的图像都会出现这种情况?我也尝试了urllib2.urlopen(“)但是它给了我错误403是的。大多数图像工作正常,但有些图像给了我不同的文件类型。错误403是当您不允许访问网站中的文件时出现的错误。通常,当您试图直接从url访问网站中的位置时(这基本上就是您正在做的事情)会出现此错误。他们这样做是为了阻止人们访问他们不应该访问的文件或目录,因此他们可能只是不希望您访问您尝试下载的映像。我可能会让它单独运行。关于: