2009-05-24 6 views
14

Potrzebuję przeglądać drzewo DOM parsowanego dokumentu HTML.Jak parsować zniekształcony HTML w pytonie

Używam uTidyLib przed parsowania ciąg z lxml

a = tidy.parseString (html_code, opcje) dom = etree.fromstring (STR (a))

czasami pojawia się błąd , wydaje się, że tidylib nie jest w stanie naprawić źle sformułowanego html.

Jak mogę analizować każdy plik HTML bez otrzymania błędu (parsowanie tylko niektórych części plików, których nie można naprawić)?

Odpowiedz

24

Beautiful Soup ma dobrą pracę z nieprawidłowymi/zerwanie HTML

>>> from BeautifulSoup import BeautifulSoup 
>>> soup = BeautifulSoup("<[email protected])($*><body><table <tr><td>hi</tr></td></body><html") 
>>> print soup.prettify() 
<htm> 
<body> 
    <table> 
    <tr> 
    <td> 
    hi 
    </td> 
    </tr> 
    </table> 
</body> 
</htm> 
13

Skoro już używasz lxml, próbowałeś lxml'sElementSoup moduł?

Jeśli ElementSoup nie może naprawić kodu HTML, prawdopodobnie konieczne będzie najpierw zastosowanie własnych filtrów opartych na własnych obserwacjach, w jaki sposób dane są zrywane.

+0

+1, ElementSoup to doskonała alternatywa. –

+0

Linki zostały zerwane; edytowali je. Mam nadzieję, że nowe lokalizacje zawierają tę samą treść, na którą pierwotnie wskazywałeś. – tripleee

+0

Jeśli nie masz zainstalowanej pięknej zupy, możesz potrzebować jej do zupy elementów. Po prostu zrób 'pip install beautifulsoup' – BobTuckerman