Я пытаюсь проанализировать некоторый HTML-контент с помощью html5lib
с помощью lxml
построителя дерева. Примечание. Я использую библиотеку requests
для захвата содержимого, а содержимое HTML5 (пробовал с XHTML - тот же результат).
Когда я просто вывожу исходный код HTML, все выглядит нормально:
response = requests.get(url)
return response.text
возвращается
<html xmlns:foo="http://www.example.com/ns/foo">
Но когда я на самом деле анализирую его с помощью html5lib, происходит что-то странное:
tree = html5lib.parse(response.text, treebuilder = 'lxml', namespaceHTMLElements = True)
html = tree.getroot()
return lxml.etree.tostring(html, pretty_print = False)
возвращается
<html:html xmlns:html="http://www.w3.org/1999/xhtml" xmlnsU0003Afoo="http://www.example.com/ns/foo">
Обратите внимание на xmlnsU0003Afoo
вещь.
Кроме того, html.nsmap
dict не содержит пространства имен foo
, только html
.
Кто-нибудь знает, что происходит и как я могу это исправить?
Позднее редактирование:
Кажется, это ожидаемое поведение:
Если используемый XML API ограничивает допустимые символы в локальных именах элементов и атрибутов, то инструмент может сопоставить все локальные имена элементов и атрибутов [...] с набором разрешенных имен, заменив любой символ, который не не поддерживается с заглавной буквой U и шестью цифрами кода Unicode символа [...] - Приведение HTML DOM к информационному набору