¿Cuál es mejor y más útil para html malformado?
No encuentro cómo usar libxml2.¿Cuál de lxml y libxml2 es mejor para analizar html malformado en Python?
Gracias.
¿Cuál es mejor y más útil para html malformado?
No encuentro cómo usar libxml2.¿Cuál de lxml y libxml2 es mejor para analizar html malformado en Python?
Gracias.
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 BeautifulSoup
lxml
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.
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/)
Prueba beutifulsoup en su lugar. Está dirigido a analizar datos mal estructurados.
BeautifulSoup es buena para analizar el html. Puede verificar su ejemplo y descubrir que es bueno en comparación con los demás.