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文件中,我加了以下两行:
from bs4 import BeautifulSoup
from urllib2 import urlopen
这个问题该怎么解决呢?
22 个回答
其实其他人提到的三个选项都有效。
# 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
运行这三个命令,确保你安装了所有相关的软件包:
pip install bs4
pip install html5lib
pip install lxml
然后,如果需要的话,重启你的Python开发环境。
这样就可以解决与这个问题相关的所有内容了。
如果你刚安装了Python和bs4库,那么你可以用下面的代码来处理你的XML文件。
soup = BeautifulSoup(html, "html5lib")
不过,如果你想使用formatter='xml'这个选项,那么你需要做一些额外的设置。
pip3 install lxml
soup = BeautifulSoup(html, features="xml")
我更喜欢使用Python自带的HTML解析器,这样不用安装任何东西,也没有额外的依赖。
soup = BeautifulSoup(s, "html.parser")
我怀疑这和BS用来读取HTML的解析器有关。他们的文档在这里,但如果你像我一样用的是OSX,可能会遇到一些麻烦:
你会注意到在上面的BS4文档页面中,他们提到默认情况下,BS4会使用Python自带的HTML解析器。如果你在OSX上,苹果自带的Python版本是2.7.2,这个版本对字符格式的要求比较严格。我也遇到了同样的问题,所以我升级了我的Python版本来解决这个问题。在虚拟环境中进行这个操作,可以减少对其他项目的影响。
如果觉得这样做很麻烦,你可以换成LXML解析器:
pip install lxml
然后试试:
soup = BeautifulSoup(html, "lxml")
根据你的具体情况,这可能就足够了。我觉得这个问题挺烦人的,所以决定升级我的Python版本。使用虚拟环境的话,你可以很容易地迁移你的包。