Python, IOError: cannot identify image file

Python, IOError: cannot identify image file

我知道有很多问题类似的问题,但我认为,没有igual(我认为)。我有一组图像的 urls,我想下载它。但是当我尝试保存图像时出现此错误。我不知道如何让它工作。

这是我的代码:

listOfImagesUrl = ['https://cdn.psychologytoday.com/sites/default/files/blogs/1023/2012/09/105928-103553.jpg', 'http://i.livescience.com/images/i/000/048/264/original/disgusted-101130-02.jpg%3F1324346664', 'http://barfblog.com/wp-content/uploads/images/disgust.story.jpg', 'http://cache1.asset-cache.net/gc/148190074-people-making-disgusted-faces-gettyimages.jpg%3Fv%3D1%26c%3DIWSAsset%26k%3D2%26d%3Dww%252BvNwEe%252BXzLnQze1Z2w9KNDivKR%252BEqGJ2cPfDe1oeinIezLX%252B8y1tIG3LNjTbL5']

imageNumber = 1

for imageUrl in listOfImagesUrl:

    file = cStringIO.StringIO(urllib.urlopen(imageUrl).read())
    img = Image.open(file)
    img.save("/tmp/test/" + str(imageNumber) + "." + img.format)
    print "DONE: " + str(imageNumber) + " of " + str(len(listOfImagesUrl))
    imageNumber += 1

我使用 sleeplessnerd 对 this Whosebug 问题的回答解决了 url 问题。问题是我必须在 urllib2.

上启用 cookie

我切换到 urllib2 并如图所示重组您的代码以提供更多错误信息。看来你的大部分图片网址都不好。

from urllib2 import urlopen, URLError
from cStringIO import StringIO
from PIL import Image

listOfImagesUrl = [
    'http://barfblog.com/wp-content/uploads/images/disgust.story.jpg',
    'https://cdn.psychologytoday.com/sites/default/files/blogs/1023/2012/09/105928-103553.jpg',
    'http://i.livescience.com/images/i/000/048/264/original/disgusted-101130-02.jpg%3F1324346664',
    'http://cache1.asset-cache.net/gc/148190074-people-making-disgusted-faces-gettyimages.jpg%3Fv%3D1%26c%3DIWSAsset%26k%3D2%26d%3Dww%252BvNwEe%252BXzLnQze1Z2w9KNDivKR%252BEqGJ2cPfDe1oeinIezLX%252B8y1tIG3LNjTbL5'
]

for imageNumber, imageUrl in enumerate(listOfImagesUrl, start=1):
    try:
        url = urlopen(imageUrl)
    except URLError as e:
        print "skipping {}".format(imageUrl)
        print "  error: {}".format(e)
        continue
    file = StringIO(url.read())
    img = Image.open(file)
    img.save("/tmp/test/" + str(imageNumber) + "." + img.format)
    print "DONE: " + str(imageNumber) + " of " + str(len(listOfImagesUrl))