bs4.FeatureNotFound:找不到您请求的树构建器:lxml。需要安装解析库吗?

435 投票
22 回答
750910 浏览
提问于 2025-04-18 10:57
...
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文件中,我加了以下两行: from bs4 import BeautifulSoup from urllib2 import urlopen

这个问题该怎么解决呢?

22 个回答

49

其实其他人提到的三个选项都有效。

# 1. 
soup_object= BeautifulSoup(markup,"html.parser") #Python HTML parser

# 2. 
pip install lxml
soup_object= BeautifulSoup(markup,'lxml') # C dependent parser 

# 3.
pip install html5lib
soup_object= BeautifulSoup(markup,'html5lib') # C dependent parser 
61

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

pip install bs4
pip install html5lib
pip install lxml

然后,如果需要的话,重启你的Python开发环境。

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

65

如果你刚安装了Python和bs4库,那么你可以用下面的代码来处理你的XML文件。

soup = BeautifulSoup(html, "html5lib")

不过,如果你想使用formatter='xml'这个选项,那么你需要做一些额外的设置。

pip3 install lxml

soup = BeautifulSoup(html, features="xml")
119

我更喜欢使用Python自带的HTML解析器,这样不用安装任何东西,也没有额外的依赖。

soup = BeautifulSoup(s, "html.parser")

459

我怀疑这和BS用来读取HTML的解析器有关。他们的文档在这里,但如果你像我一样用的是OSX,可能会遇到一些麻烦:

你会注意到在上面的BS4文档页面中,他们提到默认情况下,BS4会使用Python自带的HTML解析器。如果你在OSX上,苹果自带的Python版本是2.7.2,这个版本对字符格式的要求比较严格。我也遇到了同样的问题,所以我升级了我的Python版本来解决这个问题。在虚拟环境中进行这个操作,可以减少对其他项目的影响。

如果觉得这样做很麻烦,你可以换成LXML解析器:

pip install lxml

然后试试:

soup = BeautifulSoup(html, "lxml")

根据你的具体情况,这可能就足够了。我觉得这个问题挺烦人的,所以决定升级我的Python版本。使用虚拟环境的话,你可以很容易地迁移你的包

撰写回答