Как мне разобрать HTML, который включает именованные объекты ISO-8859-1 с Python? - PullRequest
2 голосов
/ 13 октября 2011

Подводя итог: минидому не нравится 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 ...

Как мне ответить?Могу ли я

  • заменить именованные объекты соответствующими литеральными константами?
  • Использовать парсер кроме минидома?Который?
  • Каким-то образом (с присвоением кодировки?) Убедить минидома в том, что эти именованные сущности крутые?

Не возможно убедить автора (X) HTML отказаться от именованных сущностей.

1 Ответ

10 голосов
/ 13 октября 2011

xml.dom.minidom - это синтаксический анализатор XML, а не анализатор HTML. Следовательно, он не знает никаких сущностей HTML (только те, которые являются общими для XML и HTML: &quot;, &amp;, &lt;, &gt; и &apos;).

Попробуйте BeautifulSoup .

...