tutorial how from examples beautifulsoup4 python python-2.7 beautifulsoup lxml

python - from - how to use beautifulsoup4



bs4.FeatureNotFound: no se pudo encontrar un generador de árbol con las características que solicitó: lxml. ¿Necesita instalar una biblioteca de analizador? (10)

Aunque BeautifulSoup admite el analizador HTML de manera predeterminada. Si desea utilizar cualquier otro analizador de Python de terceros, debe instalar ese analizador externo como (lxml).

soup_object= BeautifulSoup(markup,"html.parser") #Python HTML parser

Pero si no especifica ningún analizador como parámetro, recibirá una advertencia que no especificó el analizador.

soup_object= BeautifulSoup(markup) #Warnning

Para utilizar cualquier otro analizador externo, debe instalarlo y luego debe especificarlo. me gusta

pip install lxml soup_object= BeautifulSoup(markup,''lxml'') # C dependent parser

El analizador externo tiene dependencia cy python que puede tener alguna ventaja y desventaja.

... soup = BeautifulSoup(html, "lxml") File "/Library/Python/2.7/site-packages/bs4/__init__.py", line 152, in __init__ % ",".join(features)) bs4.FeatureNotFound: Couldn''t find a tree builder with the features you requested: lxml. Do you need to install a parser library?

Las salidas anteriores en mi terminal. Estoy en Mac OS 10.7.x. Tengo Python 2.7.1 y seguí este tutorial para obtener Beautiful Soup y lxml, que se instalaron correctamente y funcionan con un archivo de prueba separado que se encuentra aquí . En el script de Python que causa este error, he incluido esta línea: from pageCrawler import comparePages Y en el archivo pageCrawler he incluido las siguientes dos líneas: from bs4 import BeautifulSoup from urllib2 import urlopen

Será muy útil cualquier ayuda para descubrir cuál es el problema y cómo se puede resolver.


En algunas referencias, use la segunda en lugar de la primera:

soup_object= BeautifulSoup(markup,''html-parser'') soup_object= BeautifulSoup(markup,''html.parser'')


En lugar de usar lxml use html.parser, puede usar este fragmento de código:

soup = BeautifulSoup(html, ''html.parser'')


Estoy usando Python 3.6 y tuve el mismo error original en esta publicación. Después de ejecutar el comando:

python3 -m pip install lxml

resolvió mi problema


La biblioteca del analizador no se instala en su máquina o no se encuentra.

Pruebe este comando desde cmd:

pip install lxml


Me encontré con el mismo problema. Descubrí que el motivo es que tenía un paquete python six algo anticuado.

>>> import html5lib Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/lib/python2.7/site-packages/html5lib/__init__.py", line 16, in <module> from .html5parser import HTMLParser, parse, parseFragment File "/usr/local/lib/python2.7/site-packages/html5lib/html5parser.py", line 2, in <module> from six import with_metaclass, viewkeys, PY3 ImportError: cannot import name viewkeys

La actualización de su paquete de seis resolverá el problema:

sudo pip install six=1.10.0


Para una versión básica de python con bs4 instalado, entonces puede procesar su xml con

soup = BeautifulSoup(html, "html5lib")

Sin embargo, si desea usar formatter = ''xml'', entonces necesita

pip3 install lxml soup = BeautifulSoup(html, features="xml")


Preferí construido en el analizador html python, sin instalar ninguna sopa de dependencias = BeautifulSoup (s, "html.parser")


Resolví este error actualizando mi distribución lxml:

pip install -U lxml


Tengo la sospecha de que esto está relacionado con el analizador sintáctico que BS utilizará para leer el HTML. El documento está aquí , pero si eres como yo (en OSX), es posible que te quedes sin algo que requiera un poco de trabajo:

Notarás que en la página de documentación BS4 arriba, señalan que por defecto BS4 usará el analizador HTML incorporado de Python. Suponiendo que esté en OSX, la versión de Python de Apple está incluida en 2.7.2, que no es indulgente con el formato de caracteres. Llegué al mismo problema, así que actualicé mi versión de Python para solucionarlo. Hacer esto en virtualenv minimizará la interrupción de otros proyectos.

Si hacerlo suena como un dolor, puede pasar al analizador LXML:

pip install lxml

Y luego prueba:

soup = BeautifulSoup(html, "lxml")

Dependiendo de su escenario, eso podría ser suficiente. Encontré esto lo suficientemente molesto para garantizar la actualización de mi versión de Python. Usando virtualenv, puede migrar sus paquetes con bastante facilidad.