...
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?
Powyższe dane wyjściowe na moim terminalu. Korzystam z systemu Mac OS 10.7.x. Mam Python 2.7.1 i postępowałem zgodnie z tym samouczkiem, aby uzyskać Beautiful Soup i lxml, które oba zostały pomyślnie zainstalowane i działają z osobnym plikiem testowym znajdującym się tutaj . W skrypcie Python, który powoduje ten błąd, umieściłem ten wiersz:
from pageCrawler import comparePages
A w pliku pageCrawler zawarłem następujące dwa wiersze:
from bs4 import BeautifulSoup
from urllib2 import urlopen
Doceniamy wszelką pomoc w ustaleniu, na czym polega problem i jak można go rozwiązać.
python
python-2.7
beautifulsoup
lxml
użytkownik3773048
źródło
źródło
html
adres URL lub zawartość HTML?Odpowiedzi:
Podejrzewam, że jest to związane z analizatorem składni, którego BS użyje do odczytania HTML. Oni dokument jest tutaj , ale jeśli jesteś podobny do mnie (na OSX) może być zatrzymany z czymś, co wymaga trochę pracy:
Zauważysz, że na powyższej stronie dokumentacji BS4 wskazują one, że domyślnie BS4 będzie używać wbudowanego analizatora HTML Pythona. Zakładając, że jesteś w OSX, wersja Pythona w pakiecie Apple to 2.7.2, która nie jest łagodna do formatowania znaków. Wystąpił ten sam problem, więc zaktualizowałem swoją wersję Pythona, aby go obejść. Wykonanie tego w virtualenv zminimalizuje zakłócenia w innych projektach.
Jeśli to brzmi jak ból, możesz przełączyć się na parser LXML:
A następnie spróbuj:
W zależności od scenariusza może to być wystarczająco dobre. Uznałem to za wystarczająco denerwujące, aby uzasadnić aktualizację mojej wersji Pythona. Korzystając z virtualenv, możesz dość łatwo migrować swoje pakiety .
źródło
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
alxml
przedBeautifulSoup
analizą zawartości mojej strony internetowej.Dla podstawowego, gotowego do użycia Pythona z zainstalowanym BS4, możesz przetwarzać swój plik XML za pomocą
Jeśli jednak chcesz użyć formatter = 'xml' , musisz to zrobić
źródło
pip install html5lib
, po czym wszystko działało dobrze.bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: html5lib. Do you need to install a parser library?
jeśli zmienię to nahtml.parser
to działaWolałem wbudowany parser HTML Python, bez instalacji brak zależności
soup = BeautifulSoup(s, "html.parser")
źródło
Używam Pythona 3.6 i miałem ten sam oryginalny błąd w tym poście. Po uruchomieniu polecenia:
rozwiązało mój problem
źródło
apt install python-lxml
Uruchom te trzy polecenia, aby upewnić się, że masz zainstalowane wszystkie odpowiednie pakiety:
Następnie uruchom ponownie Python IDE, jeśli to konieczne.
To powinno załatwić wszystko związane z tym problemem.
źródło
Zamiast używać lxml użyj html.parser, możesz użyć tego fragmentu kodu:
źródło
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?
Chociaż BeautifulSoup domyślnie obsługuje analizator składni HTML Jeśli chcesz używać innych analizatorów składni Pythona innych firm, musisz zainstalować zewnętrzny analizator składni, taki jak (lxml).
Ale jeśli nie określisz żadnego parsera jako parametru, otrzymasz ostrzeżenie, że żaden parser nie został określony.
Aby użyć innego zewnętrznego analizatora składni, musisz go zainstalować, a następnie określić. lubić
Zewnętrzny parser ma zależność c i python, co może mieć pewne zalety i wady.
źródło
Napotkałem ten sam problem. Znalazłem przyczynę tego, że miałem nieco nieaktualny pakiet Pythona Six.
Uaktualnienie sześciu pakietów rozwiąże problem:
źródło
sudo pip install six==1.10.0
Zainstaluj parser LXML w środowisku python.
Twój problem zostanie rozwiązany. Możesz także użyć wbudowanego pakietu python dla tego samego, co:
Uwaga: Nazwa modułu „HTMLParser” została zmieniona na „html.parser” w Python3
źródło
W niektórych odniesieniach użyj drugiego zamiast pierwszego:
źródło
Błąd nadchodzi z powodu używanego analizatora składni. Ogólnie rzecz biorąc, jeśli masz plik / kod HTML, musisz go użyć
html5lib
(dokumentacja znajduje się tutaj ), aw przypadku, gdy masz plik / dane XML, musisz go użyćlxml
(dokumentacja znajduje się tutaj ). Możesz także użyćlxml
pliku / kodu HTML, ale czasami daje to błąd jak wyżej. Lepiej więc wybrać pakiet mądrze w oparciu o typ danych / pliku. Możesz także użyćhtml_parser
wbudowanego modułu. Ale to też czasem nie działa.Aby uzyskać więcej informacji na temat tego, kiedy użyć pakietu, zobacz szczegóły tutaj
źródło
Pusty parametr spowoduje wyświetlenie ostrzeżenia o najlepszym dostępnym.
zupa = BeautifulSoup (html)
--------------- / UserWarning: Nie określono jawnie żadnego analizatora składni, więc używam najlepszego dostępnego analizatora składni HTML dla tego systemu („html5lib”). Zwykle nie stanowi to problemu, ale jeśli uruchomisz ten kod w innym systemie lub w innym środowisku wirtualnym, może on używać innego analizatora składni i zachowywać się inaczej .--------------- ------- /
python --wersja Python 3.7.7
PyCharm 19.3.4 CE
źródło