wake-up-neo.com

bs4.FeatureNotFound: Es wurde kein Baumersteller mit den angeforderten Funktionen gefunden: lxml Müssen Sie eine Parserbibliothek installieren?

...
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?

Die obigen Ausgaben auf meinem Terminal. Ich bin unter Mac OS 10.7.x. Ich habe Python 2.7.1 und folgte diesem Tutorial , um Beautiful Soup und lxml zu erhalten, die beide erfolgreich installiert wurden und mit einer separaten Testdatei arbeiten - hier . In dem Python-Skript, das diesen Fehler verursacht, habe ich folgende Zeile eingefügt: from pageCrawler import comparePages Und in die pageCrawler-Datei habe ich die folgenden zwei Zeilen eingefügt: from bs4 import BeautifulSoupfrom urllib2 import urlopen

Jede Hilfe, um herauszufinden, was das Problem ist und wie es gelöst werden kann, wäre sehr willkommen.

117
user3773048

Ich habe den Verdacht, dass dies mit dem Parser zusammenhängt, den BS zum Lesen des HTML-Codes verwenden wird. Sie Dokument ist hier , aber wenn Sie wie ich (unter OSX) sind, stecken Sie vielleicht bei etwas, das etwas Arbeit erfordert:

Sie werden feststellen, dass auf der BS4-Dokumentationsseite oben darauf hingewiesen wird, dass BS4 standardmäßig den in Python integrierten HTML-Parser verwendet. Wenn Sie sich in OSX befinden, ist die von Apple mitgelieferte Version von Python 2.7.2, die für die Formatierung von Zeichen nicht nachteilig ist. Ich habe das gleiche Problem gefunden, also habe ich meine Version von Python aktualisiert, um sie zu umgehen. Wenn Sie dies in einer virtuellen Umgebung tun, wird die Unterbrechung anderer Projekte minimiert.

Wenn sich das wie ein Schmerz anhört, können Sie zum LXML-Parser wechseln:

pip install lxml

Und dann versuche es:

soup = BeautifulSoup(html, "lxml")

Je nach Szenario kann dies gut genug sein. Ich fand das nervig genug, um ein Upgrade meiner Python-Version zu gewährleisten. Mit virtualenv ist Sie können Ihre Pakete migrieren ziemlich einfach.

126
James Errico

Für einsatzbereite Python mit installiertem bs4 können Sie Ihre XML-Datei mit verarbeiten

soup = BeautifulSoup(html, "html5lib")

Wenn Sie jedoch formatter = 'xml' verwenden möchten, müssen Sie dies tun 

pip3 install lxml

soup = BeautifulSoup(html, features="xml")
34
Tim Seed

Ich habe den eingebauten Python-HTML-Parser vorgezogen und keine Abhängigkeiten installiert.

12
Ernst

Ich benutze Python 3.6 und hatte in diesem Beitrag den gleichen ursprünglichen Fehler. Nachdem ich den Befehl ausgeführt habe:

python3 -m pip install lxml

es hat mein Problem gelöst

6
Bashar

Ich bin auf das gleiche Problem gestoßen. Ich fand den Grund darin, dass ich ein etwas veraltetes Python-Six-Paket hatte.

>>> 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

Ein Upgrade Ihres sechs Pakets löst das Problem:

Sudo pip install six=1.10.0
4
Qiao Yang

Die Parser-Bibliothek ist auf Ihrem Computer nicht installiert oder wurde nicht gefunden. 

Versuchen Sie diesen Befehl von cmd:

pip install lxml

3

Obwohl BeautifulSoup den HTML-Parser standardmäßig unterstützt Wenn Sie andere Python-Parser von Drittanbietern verwenden möchten, müssen Sie diesen externen Parser wie (lxml) installieren.

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

Wenn Sie jedoch keinen Parser als Parameter angegeben haben, erhalten Sie eine Warnung, dass kein Parser angegeben wurde.

soup_object= BeautifulSoup(markup) #Warnning

Um einen anderen externen Parser verwenden zu können, müssen Sie ihn installieren und dann angeben. mögen

pip install lxml

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

Externe Parser haben Abhängigkeit von c und Python, was einige Vor- und Nachteile haben kann.

2
Projesh Bhoumik

Ich habe diesen Fehler durch ein Upgrade meiner Lxml-Distribution behoben:

pip install -U lxml

2
duhaime

Anstelle von lxml use html.parser können Sie diesen Code verwenden:

soup = BeautifulSoup(html, 'html.parser')
1
Yogesh
conda install lxml 

arbeitete für mich aus der virtuellen Umgebung.
Dies war unter Windows 10.

0
blackholes
  1. python -m pip install lxml (in cmd)

  2. lxml importieren (in Ihrem Code/Projekt)

0
SAyantan GHosh

Verwenden Sie in einigen Referenzen die zweite anstelle der ersten:

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