web-dev-qa-db-ja.com

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スクリプトに、この行を含めました。from pageCrawler import comparePagesそして、pageCrawlerファイルに、次の2行を含めました。from bs4 import BeautifulSoupfrom urllib2 import urlopen

問題が何であるか、そしてそれをどのように解決できるかを理解する上で助けがあれば大いに感謝されるでしょう。

140
user3773048

私はこれが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を使用すると、 パッケージをかなり簡単に移行できます

150
James Errico

Bs4がインストールされた状態での基本的なPythonの場合は、次のコマンドでXMLを処理できます。

soup = BeautifulSoup(html, "html5lib")

ただし、formatter = 'xml'を使用する場合は、

pip3 install lxml

soup = BeautifulSoup(html, features="xml")
38
Tim Seed

私はPythonのhtmlパーサを内蔵していることを好みました。

14
Ernst

私はPython 3.6を使っていますが、この記事でも同じエラーがありました。コマンドを実行した後:

python3 -m pip install lxml

それは私の問題を解決しました

8
Bashar

パーサーライブラリがあなたのマシンにインストールされていないか、見つかりません。

Cmdからこのコマンドを試してください。

pip install lxml

3

私は同じ問題に遭遇しました。私はその理由が私がやや時代遅れのpython 6パッケージを持っていたことであることがわかりました。

>>> 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

6つのパッケージをアップグレードすると問題が解決します。

Sudo pip install six=1.10.0
3
Qiao Yang

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の依存関係があり、それぞれ長所と短所があります。

3
Projesh Bhoumik

私はlxmlディストリビューションをアップグレードすることでこのエラーを解決しました:

pip install -U lxml

2
duhaime

Lxmlを使う代わりにhtml.parserを使うと、このコードを使うことができます。

soup = BeautifulSoup(html, 'html.parser')
1
Yogesh
conda install lxml 

仮想環境内から私のために働いた。
これはWindows 10のものです。

0
blackholes
  1. python -m pip install lxml(cmd単位)

  2. lxmlをインポートする(あなたのコード/プロジェクト内)

0
SAyantan GHosh

一部の参考文献では、最初のものではなく2番目のものを使用します。

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