URL с национальными символами, дающими UnicodeEncodeError

Я пытаюсь извлечь словарный словарь:

url = 'http://www.lingvo.ua/uk/Interpret/uk-ru/вікно' # parsed_url = urlparse(url) # parameters = parse_qs(parsed_url.query) # url = parsed_url._replace(query=urlencode(parameters, doseq=True)).geturl() page = urllib.request.urlopen(url) pageWritten = page.read() pageReady = pageWritten.decode('utf-8') xmldata = lxml.html.document_fromstring(pageReady) text = xmldata.xpath(//div[@class="js-article-html g-card"]) 

либо с комментариями строк вкл или выкл, он продолжает получать ошибку:

 UnicodeEncodeError: 'ascii' codec can't encode characters in position 24-28: ordinal not in range(128) 

Ваша проблема в том, что у вас есть символы, отличные от ASCII, в вашем пути к URL, который должен быть правильно закодирован с использованием urllib.parse.quote (string) в Python 3 или urllib.quote (string) в Python 2.

 # Python 3 import urllib.parse url = 'http://www.lingvo.ua' + urllib.parse.quote('/uk/Interpret/uk-ru/вікно') # Python 2 import urllib url = 'http://www.lingvo.ua' + urllib.quote(u'/uk/Interpret/uk-ru/вікно'.encode('UTF-8')) 

ПРИМЕЧАНИЕ. Согласно Какому правилу можно кодировать символы Юникода? , URL-адреса должны быть закодированы как UTF-8. Тем не менее, это не исключает процент кодирования полученных символов, отличных от ASCII, UTF-8.