...
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
問題が何であるか、そしてそれをどのように解決できるかを理解する上で助けがあれば大いに感謝されるでしょう。
私はこれが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を使用すると、 パッケージをかなり簡単に移行できます 。
Bs4がインストールされた状態での基本的なPythonの場合は、次のコマンドでXMLを処理できます。
soup = BeautifulSoup(html, "html5lib")
ただし、formatter = 'xml'を使用する場合は、
pip3 install lxml
soup = BeautifulSoup(html, features="xml")
私はPythonのhtmlパーサを内蔵していることを好みました。
私はPython 3.6を使っていますが、この記事でも同じエラーがありました。コマンドを実行した後:
python3 -m pip install lxml
それは私の問題を解決しました
パーサーライブラリがあなたのマシンにインストールされていないか、見つかりません。
Cmdからこのコマンドを試してください。
pip install lxml
私は同じ問題に遭遇しました。私はその理由が私がやや時代遅れの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
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の依存関係があり、それぞれ長所と短所があります。
私はlxmlディストリビューションをアップグレードすることでこのエラーを解決しました:
pip install -U lxml
Lxmlを使う代わりにhtml.parserを使うと、このコードを使うことができます。
soup = BeautifulSoup(html, 'html.parser')
conda install lxml
仮想環境内から私のために働いた。
これはWindows 10のものです。
python -m pip install lxml
(cmd単位)
lxml
をインポートする(あなたのコード/プロジェクト内)
一部の参考文献では、最初のものではなく2番目のものを使用します。
soup_object= BeautifulSoup(markup,'html-parser')
soup_object= BeautifulSoup(markup,'html.parser')