Analizadores en Python:
analizar simplemente significa dividir una gota de texto en partes más pequeñas y significativas. Este desglose depende de ciertas reglas y factores que define un analizador particular. Estos analizadores pueden variar desde métodos nativos de string de análisis línea por línea hasta bibliotecas como html5lib
las que pueden analizar casi todos los elementos de un documento HTML, dividiéndolo en diferentes etiquetas y piezas que se pueden filtrar para varios casos de uso.
Los dos analizadores en los que nos centraremos en este artículo son html5lib
y lxml
. Entonces, antes de profundizar en sus ventajas, desventajas y diferencias, echemos un vistazo a estas dos bibliotecas.
html5lib: una biblioteca de Python puro para analizar HTML. Está diseñado para cumplir con la especificación HTML de WHATWG, tal como lo implementan los principales navegadores web.
lxml: un enlace Pythonic maduro para las bibliotecas C libxml2
y libxslt
. Es único en el sentido de que combina la velocidad y la integridad de las funciones XML de estas bibliotecas con la simplicidad de una API nativa de Python, en su mayoría compatible pero superior a la conocida ElementTree
API.
Punto clave:
dado que html5lib
es una biblioteca de Python puro, tiene una dependencia de Python externa, mientras lxml
que un enlace para ciertas bibliotecas de C tiene una dependencia de C externa.
Pros y contras:
html5lib :
- Implementa el algoritmo de análisis HTML5 que está fuertemente influenciado por los navegadores actuales, lo que significa que obtienes el mismo texto analizado que en el navegador.
- Dado que utiliza el algoritmo de análisis de HTML5, incluso corrige muchos HTML rotos y agrega varias etiquetas que faltan para completar el texto y hacer que parezca un documento HTML.
- Extremadamente indulgente.
- Muy lento. ¿Por qué? Porque está respaldado por mucho código Python .
lxml:
- Muy rapido. ¿Por qué? Porque está respaldado por un montón de código Cython .
- Corrige algunos HTML rotos, pero no funciona lo suficiente como para presentarlo como un documento HTML completo.
- Bastante indulgente.
Diferencias con Beautifulsoup:
solo para resaltar la diferencia entre los dos analizadores en términos de cómo funcionan y hacen que el árbol corrija el documento que no está perfectamente formado, tomaremos el mismo ejemplo y se lo enviaremos a los dos analizadores.
<li></p>
html5lib
:
from bs4 import BeautifulSoup soup_html5lib = BeautifulSoup("<li></p>", "html5lib") print(soup_html5lib)
Producción:
<html><head></head><body><li><p></p></li></body></html>
Lo que encontramos:
html
Etiquetas de apertura y cierre .- Etiquetas de apertura y cierre
head
(vacías). body
Etiquetas de apertura y cierre .- Etiqueta de apertura para apoyar la etiqueta
p
de cierrep
- Etiqueta de cierre
li
para apoyar la etiqueta de aperturali
. - No se eliminó ninguna etiqueta en el texto final del objeto de sopa.
lxml
:
from bs4 import BeautifulSoup soup_lxml = BeautifulSoup("<li></p>", "lxml") print(soup_lxml)
Producción:
<html><body><li></li></body></html>
Lo que encontramos:
html
Etiquetas de apertura y cierre .- Sin
head
etiquetas body
Etiquetas de apertura y cierre .- Etiqueta de cierre
li
para apoyar la etiqueta de aperturali
. - Falta
p
la etiqueta.
Podemos observar fácilmente las diferencias entre las dos bibliotecas en términos de la formación del árbol final o el análisis del documento recibido y detectar la integridad html5lib
que proporciona al texto analizado final.
Publicación traducida automáticamente
Artículo escrito por vibhu4agarwal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA