bs4.FeatureNotFound:找不到具有您请求的function的树生成器:lxml。 你需要安装一个parsing器库吗?

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

上述输出在我的terminal上。 我在Mac OS 10.7.x上。 我有Python 2.7.1,并遵循本教程获得美丽的汤和lxml,这两个都安装成功,并与一个单独的testing文件位于这里工作 。 在导致这个错误的Python脚本中,我已经包含这一行: from pageCrawler import comparePages并在pageCrawler文件中包含了以下两行: from bs4 import BeautifulSoup from urllib2 import urlopen

任何帮助找出问题是什么,以及如何解决将不胜感激。

我怀疑这与BS将用来读取HTML的parsing器有关。 他们在这里logging它,但是如果你像我一样(在OSX上),你可能会遇到一些需要一些工作的东西:

您会注意到,在上面的BS4文档页面中,他们指出,默认情况下,BS4将使用Python内置的HTMLparsing器。 假设你在OSX中,那么Python的Apple捆绑版本是2.7.2,对字符格式不是很宽松。 我遇到了同样的问题,所以我升级了Python的版本来解决它。 在虚拟环境中这样做会最大限度地减less对其他项目的干扰。

如果这样做听起来像一个痛苦,你可以切换到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") 

我首选build立在Python的HTMLparsing器,没有安装没有依赖汤= BeautifulSoup(s,“html.parser”)

我遇到了同样的问题。 我发现原因是我有一个稍微过时的python六包。

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