html5lib报错 No se pudo encontrar un generador de árboles con las características que solicitó: html5lib

Ayer encontré un problema muy difícil al usar Python para analizar archivos HTML. Estoy usando la biblioteca html5lib, pero al analizar el archivo HTML aparece un error: "No se pudo encontrar un generador de árboles con las características que solicitó: html5lib". En este artículo compartiré mi solución.

Primero, debemos comprender la causa de este error. Este error se debe al hecho de que html5lib necesita confiar en uno de los tres TreeBuilders: lxml, beautifulsoup4 o el propio TreeBuilder de html5lib (sin dependencias adicionales) al analizar archivos HTML. Sin embargo, en mi entorno, estos TreeBuilders no se encontraron.

Para resolver el problema, podemos intentar instalar las dos bibliotecas dependientes lxml y beautifulsoup4. Utilice el siguiente comando para instalar:

pip install lxml
pip install beautifulsoup4

Si su entorno no puede conectarse a Internet, puede intentar descargar manualmente el archivo whl de la biblioteca dependiente del sitio web oficial (https://pypi.org/) para su instalación.

Si el error aún no se puede resolver después de instalar estas dos bibliotecas dependientes, entonces podemos considerar cambiar a otro TreeBuilder. Por ejemplo, si usamos TreeBuilder que viene con html5lib, podemos usar el siguiente código:

import html5lib
from html5lib.treebuilders import getTreeBuilder

parser = html5lib.HTMLParser(
   tree=getTreeBuilder("dom")
)

El "dom" aquí se refiere a analizar HTML en un árbol DOM. Si desea analizar otros tipos de árboles, puede pasar los parámetros correspondientes en el método getTreeBuilder().

Además de instalar manualmente bibliotecas dependientes y cambiar a otros TreeBuilders, también podemos obtener más información consultando la documentación de html5lib. En la documentación podemos ver esta frase:

"De forma predeterminada, si no se encuentra ningún TreeBuilder compatible, html5lib intentará utilizar la biblioteca html.parser que viene con la biblioteca estándar de Python".

Luego podemos intentar modificar el programa y usar la biblioteca html.parser que viene con la biblioteca estándar de Python para analizar y resolver el error. El procedimiento de modificación es el siguiente:

from html.parser import HTMLParser

parser = HTMLParser()
with open("example.html", "r") as f:
    html_text = f.read()
    parser.feed(html_text)
    dom = parser.close()

Aquí usamos la biblioteca html.parser para analizar, puede ver que este código es muy simple. Primero importamos la clase HTMLParser y luego usamos su analizador de objetos instanciados para el análisis. Usamos la función open() en la biblioteca estándar de Python para leer el archivo HTML local, pasar el contenido leído al método feed() del analizador para su análisis y usar el método close() para obtener el árbol DOM analizado.

En general, el error TreeBuilder no encontrado puede ocurrir por muchas razones diferentes. Las soluciones que comparto aquí son sólo algunas y es posible que no funcionen en todas las situaciones. Cuando se encuentre con este tipo de problema, se recomienda verificar el archivo de registro a tiempo y combinarlo con la documentación oficial para encontrar una solución, solucionar el problema paso a paso y encontrar una solución gradualmente.

Supongo que te gusta

Origin blog.csdn.net/liuqingup/article/details/131299796
Recomendado
Clasificación