Как правильно загрузить изображение из Интернета с помощью urllib.request в Python 3.7?

Я попытался загрузить изображение из Интернета, используя Python 3.7. Но у меня есть какая-то ошибка в моем коде, и я не могу понять, что не так в моем коде и как это исправить. Я использую PyCharm 3.4 и MacOS X:

Мой код:

import urllib.request
urllib.request.urlretrieve("http://www.digimouth.com/news/media/2011/09/google-logo.jpg", "local-filename.jpg")

Ошибка

urllib.error.URLError: <urlopen error [Errno 65] No route to host>

person indrajit    schedule 04.02.2019    source источник


Ответы (2)


Ваш подход правильный. Однако сама ссылка не работает; отсюда и ошибка.

Просто используйте urllib.request.urlretrieve(url=link, filename=output), ваш подход правильный. Если url является изображением, вы загружаете изображение. Если url является файлом HTML, вы загружаете файл HTML.

Ваша ошибка urllib.error.URLError: <urlopen error [Errno 65] No route to host> связана с тем, что ваша ссылка не работает. urlretrieve работает только для небитых ссылок. Кроме того, считается, что urlretrieve относится к устаревшему интерфейсу.

К сожалению, вы ничего не можете сделать, чтобы исправить URL "http://www.digimouth.com/news/media/2011/09/google-logo.jpg", и теперь это также кажется подозрительным.

person Ṃųỻịgǻňạcểơửṩ    schedule 23.07.2019

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

import urllib.request
urllib.request.urlretrieve("https://www.google.com/url?sa=i&source=images&cd=&cad=rja&uact=8&ved=2ahUKEwi7nsiIqqXgAhUnuqQKHY6uDa4QjRx6BAgBEAU&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FGiraffe&psig=AOvVaw1g8lkjuT8Ly2FxVhGp1vp6&ust=1549481373274429", "giraffe.jpg")

Проблема с вашей ссылкой, так как http://www.digimouth.com/news/media/2011/09/google-logo.jpg кажется мертвым. Даже wget http://www.digimouth.com/news/media/2011/09/google-logo.jpg не работает в терминале, и Chrome не может правильно открыть эту ссылку. Поэтому я предлагаю выбрать другое изображение.

Об ошибке SSL см.: https://stackoverflow.com/a/28052583/8565438

person zabop    schedule 05.02.2019
comment
,,,Я копирую и вставляю вашу ссылку в свой код, но на этот раз произошла следующая ошибка: urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1045)> - person indrajit; 06.02.2019
comment
Нет, код не может загружать изображения с данного веб-сайта: я добавил следующее: import ssl context = ssl._create_unverified_context() - person indrajit; 06.02.2019