如何使用Python解析包含命名的ISO-8859-1实体的HTML?

时间:2011-10-13 15:47:07

标签: python html-parsing xhtml

我总结一下:minidom似乎不喜欢8859个命名实体;什么是合适的解决方案?

以下代码说明了我的情况:

sample = """
  <html>
    <body>
      <h1>Un ejemplo</h1>
      <p>Me llamo Juan Fulano y Hern&aacute;ndez.</p>
    </body>
  </html>
"""
sample2 = sample.replace("&aacute;", "&#225;")

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 个答案:

答案 0 :(得分:10)

xml.dom.minidom是一个XML解析器,而不是HTML解析器。因此,它不知道任何HTML实体(仅限于XML和HTML共有的那些实体:&quot;&amp;&lt;&gt;和{{1} })。

尝试BeautifulSoup