Скачивается только один образ из 5 и вылетает ошибка - PullRequest

Ответы [ 2 ]

0 голосов
/ 19 июня 2020

Проблема в том, что одно из изображений вызывает проблемы с байтовыми данными, возвращаемыми requests.get(url, stream=True).raw, я не уверен, но я предполагаю, что данные третьего изображения являются недопустимыми байтовыми данными, поэтому вместо получения необработанных данных мы можем просто получить содержимое, а затем, используя BytesIO, мы можем исправить байтовые данные.

Я исправил еще одну вещь из вашего исходного кода, я добавил нумерацию к вашим изображениям, чтобы каждое можно было сохранить под другим именем.

from io import BytesIO

def img():
    for count, url in enumerate(url_shoes_for_choice):
        image = requests.get(url, stream=True)

        with BytesIO(image.content) as f:
            with Image.open(f) as out:
                # out.show()  # See the images 
                out.save('image/image{}.jpg'.format(count))

(Хотя это отлично работает, но я Я не уверен, в чем была основная проблема. Если кто-то точно знает, в чем проблема, прокомментируйте и объясните.)

0 голосов
/ 19 июня 2020

Я открыл первую ссылку в моем браузере и сохранил изображение. На самом деле это файл webp.

$ file Unisex_OUTDOOR_SANDALS_CM7531_1.webp
Unisex_OUTDOOR_SANDALS_CM7531_1.webp: RIFF (little-endian) data, Web/P image, VP8 encoding, 500x500, Scaling: [none]x[none], YUV color, decoders should clamp

Вы явно указываете библиотеке изображений, что она должна ожидать jpg. Когда вы удаляете этот параметр и позволяете ему разобраться самостоятельно, используя out.save('image/image.jpg'), первое изображение успешно загружается для меня.


Первые два изображения работают таким образом, если вы убедитесь, что сохранили каждое под другое имя:

def img():
    i = 0
    for url in url_shoes_for_choice:
        i+=1
        image = requests.get(url, stream=True).raw
        out = Image.open(image)
        out.save('image{}.jpg'.format(i))

третий - допустимый файл jpeg, а также четвертый, но с использованием JFIF standard 1.01, о котором я слышу впервые. Я почти уверен, что вам придется разобраться в поддержке различных таких типов файлов.

Стоит отметить, что если я загружу изображения в chrome и открою их с python, ничего не выйдет. Итак, chrome может добавлять информацию в файл.


В документации PIL / pillow здесь объясняется, что вам нужна достаточно новая версия для анимированные изображения, но это не ваша проблема.

Поддержка анимированных файлов WebP будет включена только в том случае, если версия системной библиотеки WebP v0.5.0 или новее. Вы можете проверить поддержку веб-анимации во время выполнения, вызвав features.check («webp_anim»).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...