bs4.FeatureNotFound:找不到符合您请求功能的树构建器:lxml。您需要安装解析器库吗?
- 2025-04-15 09:19:00
- admin 原创
- 34
问题描述:
...
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
这个问题该如何解决?
解决方案 1:
我怀疑这与 BS 用来读取 HTML 的解析器有关。相关文档在这里,但如果你像我一样(在 OSX 上),可能会遇到一些需要一些工作的事情:
您会注意到,在上面的 BS4 文档页面中,他们指出 BS4 默认使用 Python 内置的 HTML 解析器。假设您使用的是 OSX 系统,Apple 捆绑的 Python 版本是 2.7.2,它对字符格式的要求并不严格。我也遇到了同样的问题,所以我升级了我的 Python 版本来解决这个问题。在虚拟环境中执行此操作可以最大限度地减少对其他项目的干扰。
如果这样做听起来很麻烦,您可以切换到 LXML 解析器:
pip install lxml
然后尝试:
soup = BeautifulSoup(html, "lxml")
根据你的情况,这可能就足够了。我发现这很烦人,有必要升级我的 Python 版本。使用 virtualenv,你可以相当轻松地迁移你的软件包。
解决方案 2:
我更喜欢内置的 python html 解析器,无需安装,无需依赖
soup = BeautifulSoup(s, "html.parser")
解决方案 3:
运行这三个命令以确保已安装所有相关软件包:
pip install bs4
pip install html5lib
pip install lxml
然后,如果需要,重新启动 Python IDE。
这应该可以解决与该问题相关的所有问题。
解决方案 4:
对于安装了 bs4 的基本开箱即用的 Python,您可以使用
soup = BeautifulSoup(html, "html5lib")
但是如果你想使用formatter='xml'那么你需要
pip3 install lxml
soup = BeautifulSoup(html, features="xml")
解决方案 5:
实际上是其他作品中提到的 3 个选项。
# 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
解决方案 6:
在python环境中安装LXML解析器。
pip install lxml
您的问题将得到解决。您也可以使用内置的 Python 包来实现相同的目的:
soup = BeautifulSoup(s, "html.parser")
注意:Python3 中的“HTMLParser”模块已重命名为“html.parser”
解决方案 7:
我使用的是Python 3.6,也遇到了和本文相同的错误。运行以下命令后:
python3 -m pip install lxml
它解决了我的问题
解决方案 8:
除了使用 lxml 之外,您还可以使用 html.parser,以下代码片段如下:
soup = BeautifulSoup(html, 'html.parser')
解决方案 9:
虽然 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 依赖性,这可能有一些优点和缺点。
解决方案 10:
pip install lxml
然后继续xml
在soup = BeautifulSoup(URL, "xml")
Mac 上工作。
解决方案 11:
我的情况是,这个软件包的版本太旧了lxml
。所以我更新了一下,问题就解决了。
sudo python3 -m pip install lxml --upgrade
解决方案 12:
我也遇到了同样的问题。我发现原因是我的 Python Six 包有点过时了。
>>> 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
解决方案 13:
BS4 默认接收 HTML 文档。因此,它会将 XML 文档解析为 HTML 文档。将其features="xml"
作为参数传入构造函数。这解决了我的问题。
解决方案 14:
Jupyternotebook 用户须知:如果您决定使用 lxml 解析器,请确保在使用 安装后重启 jupyternotebook 内核pip install lxml
。否则,由于解析器尚未正确初始化,您将无法找到它。您可以通过 jupyternotebook web/pycharm/vscode 图形用户界面重启内核。
解决方案 15:
在一些参考文献中,使用第二个而不是第一个:
soup_object= BeautifulSoup(markup,'html-parser')
soup_object= BeautifulSoup(markup,'html.parser')
解决方案 16:
错误是由于您使用的解析器引起的。通常,如果您有 HTML 文件/代码,则需要使用(文档可在此处html5lib
找到);如果您有 XML 文件/数据,则需要使用(文档可在此处找到)。您也可以使用 HTML 文件/代码,但有时会出现上述错误。因此,最好根据数据/文件的类型明智地选择软件包。您也可以使用内置模块。但是,有时这种方法也行不通。lxml
`lxml`html_parser
有关何时使用哪个包的更多详细信息,您可以在此处查看详细信息
解决方案 17:
空白参数将导致最佳可用警告。soup
= BeautifulSoup(html)
---------------/用户警告:由于未明确指定解析器,因此我使用了本系统可用的最佳 HTML 解析器(“html5lib”)。这通常不会造成问题,但如果您在其他系统或不同的虚拟环境中运行此代码,它可能会使用不同的解析器并导致不同的行为。-----------/
python --version Python 3.7.7
PyCharm 19.3.4 CE
解决方案 18:
lxml
我的解决方案是从 conda 中删除它并使用 pip 重新安装它。
解决方案 19:
我在 Pycharm 中使用 Python 3.8。我假设你在开始工作之前没有安装“lxml”。以下是我所做的:
转到文件->设置
选择“Python解释器”,在设置的左侧菜单栏中选择“Python解释器”。
单击包列表上的“+”图标。
搜索“lxml”。
单击“可用包”窗口左下方的“安装包”。
解决方案 20:
我修复了以下更改
变更前
soup = BeautifulSoup(r.content, 'html5lib' )
print (soup.prettify())
变更后
soup = BeautifulSoup(r.content, features='html')
print(soup.prettify())
我的代码运行正常
解决方案 21:
如果您安装了多个版本的 Python,您可能需要仔细检查您是否使用了正确的解释器。
一旦我选择了正确的 Python 版本,就找到了 lxml。
解决方案 22:
这个方法对我来说很有效。我更愿意提一下,我是在虚拟环境中尝试的。首先:
pip install --upgrade bs4
其次,我使用了:
html.parser
而不是
html5lib
扫码咨询,免费领取项目管理大礼包!