Как разобрать искаженный HTML в Python - PullRequest
15 голосов
/ 25 мая 2009

Мне нужно просмотреть дерево DOM разобранного документа HTML.

Я использую uTidyLib перед синтаксическим анализом строки с помощью lxml

a = tidy.parseString (html_code, параметры) dom = etree.fromstring (str (a))

иногда я получаю сообщение об ошибке, кажется, что tidylib не может восстановить искаженный HTML.

как я могу проанализировать каждый HTML-файл без ошибки (парсинг только некоторых частей файлов, которые не могут быть восстановлены)?

Ответы [ 2 ]

25 голосов
/ 25 мая 2009

Beautiful Soup хорошо работает с недействительным / разбитым HTML

>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup("<htm@)($*><body><table <tr><td>hi</tr></td></body><html")
>>> print soup.prettify()
<htm>
 <body>
  <table>
   <tr>
    <td>
     hi
    </td>
   </tr>
  </table>
 </body>
</htm>
13 голосов
/ 25 мая 2009

Поскольку вы уже используете lxml, пробовали ли вы lxml's ElementSoup модуль?

Если ElementSoup не может восстановить HTML, то вам, вероятно, сначала нужно применить свои собственные фильтры, основанные на ваших собственных наблюдениях за тем, как данные повреждены.

...