2009-05-24 13 views
14

Ich muss den DOM-Baum eines geparsten HTML-Dokuments durchsuchen.Wie fehlerhafte HTML in Python zu analysieren

ich utidylib bin mit, bevor die Zeichenfolge mit lxml Parsen

a = tidy.parseString (html_code, Optionen) dom = etree.fromstring (str (a))

manchmal bekomme ich einen Fehler Es scheint, dass Tidylib nicht in der Lage ist, fehlerhafte HTML zu reparieren.

Wie kann ich jede HTML-Datei analysieren, ohne einen Fehler zu bekommen (nur Teile von Dateien analysieren, die nicht repariert werden können)?

Antwort

24

Beautiful Soup macht einen guten Job mit ungültigen/gebrochen 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

Da Sie bereits lxml verwenden, haben Sie lxml'sElementSoup Modul versucht?

Wenn ElementSoup den HTML-Code nicht reparieren kann, müssen Sie wahrscheinlich zuerst eigene Filter anwenden, die auf Ihren eigenen Beobachtungen basieren, wie die Daten fehlerhaft sind.

+0

+1, ElementSoup ist hier eine ausgezeichnete Alternative. –

+0

Links waren kaputt; bearbeitet sie. Hoffentlich enthalten die neuen Standorte den gleichen Inhalt, auf den Sie ursprünglich hinwiesen. – tripleee

+0

Wenn du keine schöne Suppe installiert hast, brauchst du sie vielleicht für Element Soup. Einfach 'pip installieren beautifulsoup' – BobTuckerman