如何用Python解析包含命名ISO-8859-1实体的HTML?
我来总结一下:minidom似乎不喜欢8859这种命名实体;那该怎么解决呢?
这里有段代码可以说明我的情况:
sample = """
<html>
<body>
<h1>Un ejemplo</h1>
<p>Me llamo Juan Fulano y Hernández.</p>
</body>
</html>
"""
sample2 = sample.replace("á", "á")
import xml.dom.minidom
dom2 = xml.dom.minidom.parseString(sample2)
dom = xml.dom.minidom.parseString(sample)
简单来说:当HTML中包含像'á'这样的字符,并以命名实体的形式表示时,minidom会发出警告。
... xml.parsers.expat.ExpatError: undefined entity ...
我该怎么处理呢?我是不是应该:
- 把命名实体换成对应的字面常量?
- 使用其他解析器,而不是minidom?用哪个呢?
- 通过某种方式(比如设置编码)让minidom相信这些命名实体是可以的?
不可行的是说服(X)HTML的作者不使用命名实体。
1 个回答
10
xml.dom.minidom
是一个用来解析 XML 的工具,而不是解析 HTML 的工具。所以,它对 HTML 中的一些特殊符号(也叫实体)并不了解(它只知道一些在 XML 和 HTML 中都常见的符号,比如 "
、&
、<
、>
和 '
)。
你可以试试 BeautifulSoup。