#python #python_3x #urllib
Как правильно использовать urlib.request для получения кода страницы, при условии, что в URL есть кириллица UPD. Есть функция: def get_html(url): return urllib.request.urlopen(url).read() Она отдает html-код страницы по URL (да-да, кэп). Она работает ровно до того момента как в заголовке появляется кириллица и интерпретатор отдает ошибку: UnicodeEncodeError: 'ascii' codec can't encode characters in position 10-18: ordinal not in range(128)
Ответы
Ответ 1
В рамках протокола HTTP не-ASCII символы в URI не допускаются. Например кириллица может быть введена и отображена в адресной строке браузера, но браузер переводит эту строку запроса (в виде IRI) в правильный, с точки зрения протокола HTTP URI. Соответственно для имени хоста применяется Punycode, а для остальных компонентов URL-кодирование. В вашем случае можно воспользоваться дополнительной функцией для перевода из кириллического IRI в ASCII URI from urllib.parse import quote, urlsplit, urlunsplit def iri_to_uri(iri): parts = urlsplit(iri) uri = urlunsplit(( parts.scheme, parts.netloc.encode('idna').decode('ascii'), quote(parts.path), quote(parts.query, '='), quote(parts.fragment), )) return uri И вызывать вашу функцию так: content = get_html(iri_to_uri(url))
Комментариев нет:
Отправить комментарий