2009-05-24 23 views
14

Necesito buscar el árbol DOM de un documento HTML analizado.Cómo analizar HTML mal formado en python

estoy usando uTidyLib antes de analizar la cadena con lxml

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

a veces me sale un error , parece que tidylib no puede reparar html malformado.

¿cómo puedo analizar todos los archivos HTML sin obtener un error (analizando solo algunas partes de los archivos que no se pueden reparar)?

Respuesta

24

Beautiful Soup hace un buen trabajo con inválida/HTML roto

>>> 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

Dado que ya está utilizando lxml, has lxml'sElementSoup módulo?

Si ElementSoup no puede reparar el código HTML, es probable que deba aplicar primero sus propios filtros basados ​​en sus propias observaciones de cómo se rompen los datos.

+0

+1, ElementSoup es una excelente alternativa aquí. –

+0

Los enlaces estaban rotos; los editó. Es de esperar que las nuevas ubicaciones contengan el mismo contenido al que originalmente apuntabas. – tripleee

+0

Si no tiene una hermosa sopa instalada, es posible que la necesite para Element Soup. Simplemente haz 'pip install beautifulsoup' – BobTuckerman

Cuestiones relacionadas