-1

Я знаю, что вопросов много, но я думаю, что нет ига (я думаю). У меня есть массив URL-адресов изображения, и я хочу его загрузить. Но когда я пытаюсь сохранить изображения, я получаю эту ошибку. Я не знаю, как это сделать.Python, IOError: не удается определить файл изображения

Это мой код:

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 

Я решил проблему URL-адрес, используя ответ на sleeplessnerd на вопрос this StackOverflow в. Проблема заключалась в том, что я должен был включить файлы cookie на urllib2.

+1

Второй URL-адрес дает вам ошибку 500 при загрузке с помощью 'urllib', а тело ответа пуст. Проверяйте свои ответы, прежде чем пытаться читать данные. –

+0

Последовательность '% 3F' является закодированным знаком вопроса. Он не должен быть частью пути URL, у вас есть параметр запроса (вероятно, кеш-кеш), закодированный в URL-адрес. Последний URL-адрес имеет то же самое. –

+0

Но, если я позвоню своему второму URL-адресу на http://www.livescience.com/images/i/000/048/264/original/disgusted-101130-02.jpg, он все еще не работает. Что происходит? Спасибо за вашу помощь. – Caaarlos

ответ

1

Я переключился на urllib2 и изменил ваш код, как показано, чтобы предоставить дополнительную информацию об ошибке. Кажется, что большинство ваших URL-адресов изображений не являются хорошими.

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)) 
+0

Спасибо, мартино, ваш код намного лучше моего. Одна вещь, которую я не понял, почему я получаю эти ошибки? Если я открою URL-адреса в браузере, это покажет мне изображение. Что происходит? – Caaarlos

+0

@Caaarlos: Спасибо, что приняли мой ответ, хотя я и не знал о необходимости включения файлов cookie для работы URL. – martineau

+0

Нет проблем, вы учите и помогаете мне !! = D – Caaarlos

Смежные вопросы