@V-ampre

Есть ли решение для загрузки ссылок с кириллицей через urlopen?

Сделал скрипт который создает карту сайта. Изначально для загрузки страниц использовал urlopen(url), но когда в url появлялся адрес типа "адрес-сайта.рф" появлялась ошибка UnicodeEncodeError: 'ascii' codec can't encode characters in position 23-26: ordinal not in range(128). Пробовал и urllib.quote_plus и urllib.quote, в этом случае было ValueError: unknown url type: 'http%3A%2F%2F....'

В общем проблему решил тем, что вместо urllib использовал requests, там при requests.get(url) все загрузилось без проблем.
Просто интересно, как решается эта проблема в urllib?
  • Вопрос задан
  • 103 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Sovetnikov
технический директор pulsprodaj.ru
Имя домена надо кодировать в idna и передавать в urlopen уже в utf8
from urllib.parse import urlunparse, urlparse
from urllib.request import urlopen
url = 'http://сайт.рф'
scheme, netloc, path, params, query, fragment = urlparse(url)
url = urlunparse((scheme, netloc.encode('idna').decode('utf8'), path, params, query, fragment))
r = urlopen(url)
print(r.read()[0:50])
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы