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.