Вы можете использовать заголовки content-type
import urllib
request = urllib.request.urlretrieve('https://www.jhsph.edu/sebin/j/k/public-health-on-call.jpg')
request[1].__dict__
. Вы увидите, что метод urlretrieve возвращает кортеж, второй элемент:
{'_charset': None,
'_default_type': 'text/plain',
'_headers': [('Server', 'nginx/1.17.6'),
('Date', 'Sat, 04 Apr 2020 22:00:21 GMT'),
('Content-Type', 'image/jpeg'),
('Content-Length', '129747'),
('Connection', 'close'),
('Last-Modified', 'Wed, 04 Mar 2020 15:26:43 GMT'),
('ETag', '"3632864f39f2d51:0"'),
('X-Powered-By', 'ASP.NET'),
('Accept-Ranges', 'bytes')],
'_payload': '',
'_unixfrom': None,
'defects': [],
'epilogue': None,
'policy': Compat32(),
'preamble': None}
Content-Type сообщает, что это изображение и тип изображения. Итак, исходя из этого, вы можете решить, как его сохранить и что делать.