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

  1. python -m pip install lxml (в cmd)

  2. импортировать lxml (в ваш код/​​проект)

Ответ 12

Все та же ошибка продолжается

Ответ 13

В некоторых ссылках используйте второе вместо первого:

soup_object= BeautifulSoup(markup,'html-parser')
soup_object= BeautifulSoup(markup,'html.parser')