2009-05-24 13 views
14

Devo esplorare l'albero DOM di un documento HTML analizzato.Come analizzare HTML malformato in python

sto usando uTidyLib prima di parsing della stringa con lxml

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

a volte ottengo un errore , sembra che tidylib non sia in grado di riparare html malformato.

Come posso analizzare ogni file HTML senza ottenere un errore (analizzando solo alcune parti di file che non possono essere riparate)?

risposta

24

Beautiful Soup fa un buon lavoro con invalida/rotto 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

Dal momento che si sta già utilizzando lxml, hai provato lxml'sElementSoup modulo?

Se ElementSoup non è in grado di riparare l'HTML, sarà probabilmente necessario applicare prima i propri filtri basati sulle proprie osservazioni su come i dati vengono interrotti.

+0

+1, ElementSoup è un'alternativa eccellente qui. –

+0

I collegamenti sono stati interrotti; li ha modificati. Speriamo che le nuove posizioni contengano lo stesso contenuto a cui inizialmente si stava puntando. – tripleee

+0

Se non hai installato una bella zuppa, potresti averne bisogno per la zuppa Element. Basta fare "pip install beautifulsoup" – BobTuckerman