Bs4.FeatureNotFound: Не удалось найти конструктор дерева с запрошенными функциями: lxml. Вам нужно установить библиотеку парсера?
...
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?
Вышеуказанные выходы на моем терминале. Я нахожусь в Mac OS 10.7.x. У меня есть Python 2.7.1 и следуйте этому учебнику, чтобы получить Beautiful Soup и lxml, которые успешно установлены и работают с отдельным тестовым файлом расположенный здесь. В Python script, который вызывает эту ошибку, я включил эту строку: from pageCrawler import comparePages
И в файле pageCrawler я включил следующие две строки: from bs4 import BeautifulSoup
from urllib2 import urlopen
Любая помощь в выяснении того, что проблема и как ее можно решить, будет очень оценена.
Ответы
Ответ 1
У меня есть подозрение, что это связано с анализатором, который BS будет использовать для чтения HTML. Они документируют здесь, но если вы похожи на меня (на OSX), вы можете застревать с чем-то, что требует немного работы:
Вы заметите, что на странице документации BS4 выше они указывают, что по умолчанию BS4 будет использовать встроенный анализатор Python HTML. Предполагая, что вы находитесь в OSX, версия Python для Apple является 2.7.2, которая не подходит для форматирования символов. Я столкнулся с этой же проблемой, поэтому я обновил свою версию Python, чтобы обойти ее. Выполнение этого в virtualenv сведет к минимуму нарушение других проектов.
Если это звучит как боль, вы можете переключиться на анализатор LXML:
pip install lxml
А затем попробуйте:
soup = BeautifulSoup(html, "lxml")
В зависимости от вашего сценария, это может быть достаточно хорошо. Я нашел это достаточно раздражающим, чтобы оправдать обновление моей версии Python. Используя virtualenv, вы можете довольно легко перенести ваши пакеты.
Ответ 2
Для базового из python с установленным bs4 вы можете обработать свой xml с помощью
soup = BeautifulSoup(html, "html5lib")
Если вы хотите использовать formatter = 'xml', вам нужно
pip3 install lxml
soup = BeautifulSoup(html, features="xml")
Ответ 3
Я предпочел встроенный синтаксический анализатор python html, без установки и без зависимостей
soup = BeautifulSoup(s, "html.parser")
Ответ 4
Я использую Python 3.6, и у меня была та же самая оригинальная ошибка в этом посте. После того, как я запустил команду:
python3 -m pip install lxml
это решило мою проблему
Ответ 5
Вместо использования lxml используйте html.parser, вы можете использовать этот фрагмент кода:
soup = BeautifulSoup(html, 'html.parser')
Ответ 6
Хотя BeautifulSoup по умолчанию поддерживает анализатор HTML. Если вы хотите использовать любые другие сторонние анализаторы Python, вам необходимо установить этот внешний анализатор, например (lxml).
soup_object= BeautifulSoup(markup,"html.parser") #Python HTML parser
Но если вы не указали парсер в качестве параметра, вы получите предупреждение, что парсер не указан.
soup_object= BeautifulSoup(markup) #Warnning
Чтобы использовать любой другой внешний парсер, вам необходимо установить его, а затем указать его. лайк
pip install lxml
soup_object= BeautifulSoup(markup,'lxml') # C dependent parser
Внешний парсер имеет зависимость от c и python, что может иметь некоторые преимущества и недостатки.
Ответ 7
Я столкнулся с той же проблемой. Я обнаружил, что причина в том, что у меня был немного устаревший пакет python six.
>>> 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
Модернизация вашего шести пакетов решит проблему:
sudo pip install six=1.10.0
Ответ 8
Библиотека Parser не установлена на вашем компьютере или не найдена.
Попробуйте эту команду из cmd:
pip install lxml
Ответ 9
Я решил эту ошибку, обновив свой дистрибутив lxml:
pip install -U lxml
Ответ 10
conda install lxml
работал для меня из виртуальной среды.
Это было на Windows 10.
Ответ 11
-
python -m pip install lxml
(в cmd)
-
импортировать lxml
(в ваш код/проект)
Ответ 12
Все та же ошибка продолжается
Ответ 13
В некоторых ссылках используйте второе вместо первого:
soup_object= BeautifulSoup(markup,'html-parser')
soup_object= BeautifulSoup(markup,'html.parser')