analizadores html5lib y lxml en Python

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 html5liblas 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 html5liby 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 libxml2y 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 ElementTreeAPI.

Punto clave:
dado que html5libes una biblioteca de Python puro, tiene una dependencia de Python externa, mientras lxmlque 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:

  • htmlEtiquetas de apertura y cierre .
  • Etiquetas de apertura y cierre head(vacías).
  • bodyEtiquetas de apertura y cierre .
  • Etiqueta de apertura para apoyar la etiqueta pde cierrep
  • Etiqueta de cierre lipara apoyar la etiqueta de apertura li.
  • 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:

  • htmlEtiquetas de apertura y cierre .
  • Sin headetiquetas
  • bodyEtiquetas de apertura y cierre .
  • Etiqueta de cierre lipara apoyar la etiqueta de apertura li.
  • Falta pla 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 html5libque 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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *