...
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 BeautifulSoup
from urllib2 import urlopen
Jede Hilfe, um herauszufinden, was das Problem ist und wie es gelöst werden kann, wäre sehr willkommen.
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.
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")
Ich habe den eingebauten Python-HTML-Parser vorgezogen und keine Abhängigkeiten installiert.
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
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
Die Parser-Bibliothek ist auf Ihrem Computer nicht installiert oder wurde nicht gefunden.
Versuchen Sie diesen Befehl von cmd:
pip install lxml
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.
Ich habe diesen Fehler durch ein Upgrade meiner Lxml-Distribution behoben:
pip install -U lxml
Anstelle von lxml use html.parser können Sie diesen Code verwenden:
soup = BeautifulSoup(html, 'html.parser')
conda install lxml
arbeitete für mich aus der virtuellen Umgebung.
Dies war unter Windows 10.
python -m pip install lxml
(in cmd)
lxml
importieren (in Ihrem Code/Projekt)
Verwenden Sie in einigen Referenzen die zweite anstelle der ersten:
soup_object= BeautifulSoup(markup,'html-parser')
soup_object= BeautifulSoup(markup,'html.parser')