bs4.FeatureNotFound: 要求した機能を持つツリービルダーが見つかりませんでした: lxml。パーサーライブラリをインストールする必要がありますか? 質問する

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 BeautifulSoup from urllib2 import urlopen

この問題はどうすれば解決できるでしょうか?

ベストアンサー1

これはBSがHTMLを読むために使用するパーサーに関連しているのではないかと思います。文書はこちらしかし、私(OSX 使用者)のような場合は、少し作業が必要な問題に直面するかもしれません。

上記の BS4 ドキュメント ページでは、BS4 はデフォルトで Python 組み込み HTML パーサーを使用することが指摘されています。OSX を使用している場合、Apple バンドルの Python バージョンは 2.7.2 であり、文字のフォーマットに寛容ではありません。私も同じ問題に遭遇したので、回避策として Python のバージョンをアップグレードしました。これを仮想環境で実行すると、他のプロジェクトへの影響を最小限に抑えることができます。

それが面倒に思える場合は、LXML パーサーに切り替えることができます。

pip install lxml

そして、次のことを試してください:

soup = BeautifulSoup(html, "lxml")

シナリオによっては、これで十分かもしれません。私はこれが面倒だと感じ、Pythonのバージョンをアップグレードすることにしました。virtualenvを使用すると、パッケージを移行できますかなり簡単に。

おすすめ記事