Python. Фото скачивается, но оно сломано

Python. Фото скачивается, но оно сломано, то есть вместо изображения знак сломанной картинки. Что делать? Код:

import requests
url = "https://thiscatdoesnotexist.com/?1582681489783=1/document.jpg"
res = requests.get(url).content
with open(url.split('/')[-1].split('?')[0], 'wb') as f:
    f.write(res)

Ответы (2 шт):

Автор решения: nomnoms12

Добавьте заголовок User-Agent.

Пример:

import requests


URL = 'https://thiscatdoesnotexist.com/?1582681489783=1/document.jpg'
HEADERS =  {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.136 YaBrowser/20.2.3.213 Yowser/2.5 Safari/537.36',
}


def main():
    photo = requests.get(URL, headers=HEADERS).content

    filename = URL.split('/')[-1]
    with open(filename, 'wb') as f:
        f.write(photo)


if __name__ == '__main__':
    main()
→ Ссылка
Автор решения: Михаил Муругов

При res = requests.get(url) код ответа 520. Это значит, что на удалённом сервере произошла какая-то внутренняя ошибка.


Первая догадка: сервер не ожидал в заголовке User-Agent увидеть значение python-requests/2.22.0 (такой User-Agent отправляется по умолчанию, если его явно не указали). Можно попробовать отправить User-Agent какого-нибудь браузера. Например, Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36

res = requests.get(
    url, 
    headers={
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36"
    }
)

В таком случае код ответа 200. Это говорит о том, что всё хорошо. Можно записывать content ответа в файл

with open(url.split('/')[-1].split('?')[0], 'wb') as f:
    f.write(res.content)
→ Ссылка