lxml无法解析任何包含字符
下面的python代码无法通过xpath找到html元素。此外,etree.tostring(root)
的结果包含许多额外的空白。
代码:
from lxml import html, etree
text = """<div id="content">
𝐱
</div>
"""
root = html.document_fromstring(text)
print(etree.tostring(root))
content = root.xpath("//div[@id='content']")
print(content)
输出:
b'<html><body><p>d i v i d = " c o n t e n t " > n 1x14/p></body></html>'
[]
更新:我认为这是由于一个lxml错误。它已在lxml 4.4.3中修复。然而,在检查了lxml的变更日志&在4.4.2-4.4.3之间的提交历史,我仍然不知道根本原因。
下面基于ElementTree的工作解决方案
import xml.etree.ElementTree as ET
parser = ET.XMLParser()
parser.entity["#119857"] = 'x'
html = '''<html><body><p><div id='content'>𝐱</div></p></body></html>'''
root = ET.fromstring(html)
content = root.find('.//div[@id="content"]')
print(content.text)
输出x