2012-02-17 13 views

Respuesta

13

En el libxml2 page se puede ver esta nota:

Tenga en cuenta que algunos de los puristas Python no les gusta el conjunto predeterminado de enlaces Python, en lugar de quejarse sugiero que tienen un vistazo a lxml los enlaces más Pythonic para libxml2 y libxslt y revisa la lista de correo.

y en el lxml página de este otro:

El conjunto de herramientas XML lxml es un Pythonic vinculante para la libxml2 bibliotecas de C y libxslt. Es único en el sentido de que combina la completitud de las características de velocidad y XML de estas bibliotecas con la simplicidad de una API nativa de Python, en su mayoría compatible pero superior a la bien conocida API ElementTree.

Así que, esencialmente, con lxml se obtiene exactamente la misma funcionalidad, pero con aa API Pythonic compatible con la biblioteca ElementTree en la biblioteca estándar (por lo que esto significa que la documentación de la biblioteca estándar será útil para aprender a utilizar lxml) Es por eso que se prefiere lxml a más de libxml2 (incluso cuando la implementación subyacente es la misma).

Editar: Una vez dicho esto, como explican otras respuestas, para analizar HTML malformado, su mejor opción es utilizar BeautifulSoup. Una cosa interesante a destacar es que, si ha instalado lxml, BeautifulSoup lo utilizará como se explica en el documentation para la nueva versión:

Si no se especifica nada, obtendrá el mejor analizador de HTML eso está instalado. Beautiful Soup clasifica el analizador de lxml como el mejor, luego el html5lib, luego el analizador integrado de Python.

De todos modos, incluso si utiliza BeautifulSouplxml bajo el capó, podrás analizar rota html que no se puede analizar con xml directamente.Por ejemplo:

>>> lxml.etree.fromstring('<html>') 
... 
XMLSyntaxError: Premature end of data in tag html line 1, line 1, column 7 

Sin embargo:

>>> bs4.BeautifulSoup('<html>', 'lxml') 
<html></html> 

Por último, tenga en cuenta que lxml también proporciona una interfaz para la versión antigua de BeautifulSoup de la siguiente manera:

>>> lxml.html.soupparser.fromstring('<html>') 
<Element html at 0x13bd230> 

Así que al final de la día, es probable que esté utilizando lxml y BeautifulSoup de todos modos. Lo único que debe elegir es cuál es la API que más le gusta.

0

lxml es el que generalmente se recomienda. Específicamente, lxml.html (si no recuerdo mal).

Creo que hace uso de libxml2 under-the-hood, pero vuelve a beautifulsoup si el html es particularmente desagradable, pero no tome mi palabra, ¡eche un vistazo al sitio web! (http://http://lxml.de/)

1

BeautifulSoup es buena para analizar el html. Puede verificar su ejemplo y descubrir que es bueno en comparación con los demás.

Cuestiones relacionadas