...
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脚本中,我包含了这一行: 导入comparePages 在pageCrawler文件中,我包含了以下两行代码: 从bs4导入BeautifulSoup 从urllib2导入urlopen

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


当前回答

我使用的是Python 3.6,在这篇文章中我有同样的原始错误。在我运行命令后:

python3 -m pip install lxml

它解决了我的问题

其他回答

我怀疑这与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默认情况下需要HTML文档。因此,它将XML文档解析为HTML文档。在构造函数中传递features="xml"作为参数。它解决了我的问题。

pip安装lxml,然后将xml保存在soup = BeautifulSoup(URL, "xml")在Mac上完成了这项工作。

运行这三个命令来确保你已经安装了所有相关的软件包:

pip install bs4
pip install html5lib
pip install lxml

然后,如果需要,重新启动您的Python IDE。

这样就可以解决所有与这个问题有关的问题了。

我的解决方案是从conda中删除lxml,然后用pip重新安装它。