【问题标题】:urllib doesn't give me correct filetypeurllib 没有给我正确的文件类型
【发布时间】:2014-05-10 05:28:25
【问题描述】:

我正在使用 urllib python 模块从外部 URL 获取图像。 它运作良好,但有些图像给我带来了这样的问题: https://cdn.tutsplus.com/wp/uploads/2014/01/grunt-logo-400.png

我的代码如下

import urllib
img = urllib.urlretrieve("https://cdn.tutsplus.com/wp/uploads/2014/01/grunt-logo-400.png")

当我打印 img 时,它会显示: "/tmp/tmpbuhfUW.png"

但如果我打印 img[1].type 它会给我: “文本/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”

【问题讨论】:

标签: python image url urllib


【解决方案1】:

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

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

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

【讨论】:

  • 我检查了下载图像的 /tmp 文件夹,发现图像是空白的。
  • 每张未正确识别的图像都会发生这种情况吗?
  • 我也试过 urllib2.urlopen("cdn.tutsplus.com/wp/uploads/2014/01/grunt-logo-400.png") 但它给了我错误 403
  • 是的。大多数图像都能正常工作,但有些图像给了我不同的文件类型
  • 好吧,错误 403 是您在不允许访问网站内的文件时遇到的错误。通常,当您尝试直接从 url 访问网站中的位置时会出现此错误(这基本上就是您正在做的事情)。他们这样做是为了阻止人们访问他们不应该访问的文件或目录,因此他们可能只是不希望您访问您尝试下载的图像。我可能会不管它。
猜你喜欢
  • 2018-07-08
  • 1970-01-01
  • 2021-10-26
  • 1970-01-01
  • 2011-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多