我正在尝试html5lib
使用lxml
treebuilder 解析一些 HTML 内容。注意:我正在使用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 强制转换为信息集