...
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 oben genannten Ausgänge auf meinem Terminal. Ich bin unter Mac OS 10.7.x. Ich habe Python 2.7.1 und habe dieses Tutorial befolgt , um Beautiful Soup und lxml zu erhalten, die beide erfolgreich installiert wurden und mit einer separaten Testdatei arbeiten, die sich hier befindet . In das Python-Skript, das diesen Fehler verursacht, habe ich diese Zeile from pageCrawler import comparePages
eingefügt :
Und in die pageCrawler-Datei habe ich die folgenden zwei Zeilen eingefügt:
from bs4 import BeautifulSoup
from urllib2 import urlopen
Jede Hilfe, um herauszufinden, was das Problem ist und wie es gelöst werden kann, wäre sehr dankbar.
python
python-2.7
beautifulsoup
lxml
user3773048
quelle
quelle
html
eine URL oder ein HTML-Inhalt?Antworten:
Ich habe den Verdacht, dass dies mit dem Parser zusammenhängt, mit dem BS den HTML-Code liest. Das Dokument ist hier , aber wenn Sie wie ich (unter OSX) sind, stecken Sie möglicherweise in etwas fest, das ein wenig Arbeit erfordert:
Sie werden feststellen, dass auf der obigen BS4-Dokumentationsseite darauf hingewiesen wird, dass BS4 standardmäßig den in Python integrierten HTML-Parser verwendet. Angenommen, Sie befinden sich in OSX, ist die von Apple gebündelte Version von Python 2.7.2, was für die Zeichenformatierung nicht nachsichtig ist. Ich bin auf dasselbe Problem gestoßen und habe meine Python-Version aktualisiert, um es zu umgehen. Wenn Sie dies in einer virtuellen Umgebung tun, werden Störungen bei anderen Projekten minimiert.
Wenn dies schmerzhaft klingt, können Sie zum LXML-Parser wechseln:
Und dann versuchen Sie:
Abhängig von Ihrem Szenario könnte dies gut genug sein. Ich fand das ärgerlich genug, um ein Upgrade meiner Python-Version zu rechtfertigen. Mit virtualenv können Sie Ihre Pakete relativ einfach migrieren .
quelle
python -c 'import requests ; from bs4 import BeautifulSoup ; r = requests.get("https://www.allrecipes.com/recipes/96/salad/") ; soup = BeautifulSoup(r.text, "lxml") '
requests
,bs4
undlxml
vorBeautifulSoup
meiner Webseite Inhalt analysieren würde.Für grundlegende sofort einsatzbereite Python-Versionen mit installiertem BS4 können Sie Ihre XML-Datei mit verarbeiten
Wenn Sie jedoch formatter = 'xml' verwenden möchten, müssen Sie dies tun
quelle
pip install html5lib
, danach hat alles gut funktioniert.bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: html5lib. Do you need to install a parser library?
Wenn ich es ändere,html.parser
funktioniert esIch bevorzugte eingebauten Python-HTML-Parser, keine Installation, keine Abhängigkeiten
soup = BeautifulSoup(s, "html.parser")
quelle
Ich verwende Python 3.6 und hatte den gleichen ursprünglichen Fehler in diesem Beitrag. Nachdem ich den Befehl ausgeführt habe:
es hat mein Problem gelöst
quelle
apt install python-lxml
Führen Sie diese drei Befehle aus, um sicherzustellen, dass alle relevanten Pakete installiert sind:
Starten Sie dann bei Bedarf Ihre Python-IDE neu.
Das sollte sich um alles kümmern, was mit diesem Problem zu tun hat.
quelle
Anstatt lxml mit html.parser zu verwenden, können Sie diesen Code verwenden:
quelle
vendor.bs.bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: html.parser. Do you need to install a parser library?
Obwohl BeautifulSoup standardmäßig den HTML-Parser unterstützt Wenn Sie andere Python-Parser von Drittanbietern verwenden möchten, müssen Sie diesen externen Parser wie (lxml) installieren.
Wenn Sie jedoch keinen Parser als Parameter angegeben haben, wird eine Warnung angezeigt, dass kein Parser angegeben wurde.
Um einen anderen externen Parser zu verwenden, müssen Sie ihn installieren und dann angeben. mögen
Externe Parser haben c- und Python-Abhängigkeiten, die einige Vor- und Nachteile haben können.
quelle
Ich bin auf das gleiche Problem gestoßen. Ich fand den Grund, dass ich ein etwas veraltetes Python-Six-Paket hatte.
Ein Upgrade Ihres Six-Pakets löst das Problem:
quelle
sudo pip install six==1.10.0
Installieren Sie den LXML-Parser in einer Python-Umgebung.
Ihr Problem wird gelöst. Sie können das integrierte Python-Paket auch für Folgendes verwenden:
Hinweis: Das Modul "HTMLParser" wurde in Python3 in "html.parser" umbenannt
quelle
Verwenden Sie in einigen Referenzen die zweite anstelle der ersten:
quelle
Der Fehler tritt aufgrund des von Ihnen verwendeten Parsers auf. Wenn Sie über eine HTML-Datei / einen HTML-Code verfügen, müssen Sie diese im Allgemeinen verwenden
html5lib
(Dokumentation finden Sie hier ). Falls Sie über eine XML-Datei / Daten verfügen, müssen Sie diese verwendenlxml
(Dokumentation finden Sie hier ). Sie können auchlxml
für HTML-Datei / Code verwenden, aber manchmal gibt es einen Fehler wie oben. Wählen Sie das Paket also besser mit Bedacht aus, basierend auf dem Typ der Daten / Dateien. Sie können auchhtml_parser
das eingebaute Modul verwenden. Dies funktioniert aber auch manchmal nicht.Weitere Informationen dazu, wann Sie welches Paket verwenden sollen, finden Sie hier
quelle
Der leere Parameter führt zu einer Warnung für die bestmögliche Verfügbarkeit.
suppe = BeautifulSoup (html)
--------------- / UserWarning: Es wurde kein Parser explizit angegeben, daher verwende ich den besten verfügbaren HTML-Parser für dieses System ("html5lib"). Dies ist normalerweise kein Problem, aber wenn Sie diesen Code auf einem anderen System oder in einer anderen virtuellen Umgebung ausführen, verwendet er möglicherweise einen anderen Parser und verhält sich anders .--------------- ------- /
python --version Python 3.7.7
PyCharm 19.3.4 CE
quelle