435 Stimmen

Bs4.FeatureNotFound: Es konnte kein Baumeigenschaftssucher mit den von Ihnen angeforderten Funktionen gefunden werden: lxml. Müssen Sie eine Parser-Bibliothek installieren?

...
soup = BeautifulSoup(html, "lxml")
Datei "/Library/Python/2.7/site-packages/bs4/__init__.py", Zeile 152, in __init__
% ",".join(features))
bs4.FeatureNotFound: Konnte keinen Baumersteller mit den angeforderten Funktionen finden: lxml. Müssen Sie eine Parser-Bibliothek installieren?

Die oben genannte Ausgabe erscheint auf meinem Terminal. Ich benutze Mac OS 10.7.x. Ich habe Python 2.7.1 und bin diesem Tutorial gefolgt, um Beautiful Soup und lxml zu installieren, die beide erfolgreich installiert wurden und mit einer separaten Testdatei hier gefunden werden können. Im Python-Skript, das diesen Fehler verursacht, habe ich folgende Zeile eingefügt: from pageCrawler import comparePages Und in der Datei pageCrawler habe ich die folgenden beiden Zeilen eingefügt: from bs4 import BeautifulSoup from urllib2 import urlopen

Wie kann dieses Problem gelöst werden?

457voto

James Errico Punkte 4966

Ich habe den Verdacht, dass dies mit dem Parser zusammenhängt, den BS zum Lesen des HTML verwenden wird. Das Dokument befindet sich hier, aber wenn Sie wie ich sind (auf OSX), könnten Sie mit etwas feststecken, das etwas Arbeit erfordert:

Sie werden feststellen, dass auf der oben genannten BS4-Dokumentationsseite darauf hingewiesen wird, dass BS4 standardmäßig den in Python integrierten HTML-Parser verwendet. Angenommen, Sie sind auf OSX, dann ist die von Apple gebündelte Version von Python 2.7.2, die nicht nachsichtig für Zeichenformatierung ist. Mir ist dasselbe passiert, also habe ich meine Python-Version aktualisiert, um das Problem zu umgehen. Wenn Sie dies in einem virtualenv durchführen, wird die Beeinträchtigung anderer Projekte minimiert.

Wenn das zu umständlich klingt, können Sie auf den LXML-Parser umsteigen:

pip install lxml

Und dann versuchen Sie es:

soup = BeautifulSoup(html, "lxml")

Je nach Situation könnte das ausreichen. Mir war das Ärgernis groß genug, um meine Python-Version zu aktualisieren. Mit virtualenv können Sie Ihre Pakete migrieren recht einfach.

118voto

Ernst Punkte 1223

Ich würde den integrierten Python-HTML-Parser bevorzugen, keine Installation, keine Abhängigkeiten

soup = BeautifulSoup(s, "html.parser")

65voto

Tim Seed Punkte 4633

Für grundlegendes Python out of the box mit bs4 installiert, können Sie dann Ihr XML mit verarbeiten

soup = BeautifulSoup(html, "html5lib")

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

pip3 install lxml

soup = BeautifulSoup(html, features="xml")

61voto

Pikamander2 Punkte 5745

Führen Sie diese drei Befehle aus, um sicherzustellen, dass Sie alle relevanten Pakete installiert haben:

pip install bs4
pip install html5lib
pip install lxml

Starten Sie dann bei Bedarf Ihre Python-IDE neu.

Das sollte alles in Bezug auf dieses Problem erledigen.

49voto

33Anika33 Punkte 611

Tatsächlich funktionieren 3 der von anderen genannten Optionen.

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

# 2. 
pip install lxml
soup_object= BeautifulSoup(markup,'lxml') # C-abhängiger Parser 

# 3.
pip install html5lib
soup_object= BeautifulSoup(markup,'html5lib') # C-abhängiger Parser

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X