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

2025-04-15 09:19:00
admin
原创
65
摘要:问题描述:... soup = BeautifulSoup(html, "lxml") File "/Library/Python/2.7/site-packages/bs4/__init__.py", line 152, in __init__ % ",&q...

问题描述:

...
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然后继续xmlsoup = 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”。以下是我所做的:


  1. 转到文件->设置

  2. 选择“Python解释器”,在设置的左侧菜单栏中选择“Python解释器”。

  3. 单击包列表上的“+”图标。

  4. 搜索“lxml”。

  5. 单击“可用包”窗口左下方的“安装包”。

解决方案 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
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   3938  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   2732  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Freshdesk、ClickUp、nTask、Hubstaff、Plutio、Productive、Targa、Bonsai、Wrike。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在项目管理过程中面临着诸多痛点,如任务分配不...
项目管理系统   72  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Monday、TeamGantt、Filestage、Chanty、Visor、Smartsheet、Productive、Quire、Planview。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多项目经理和团队在管理复杂项目时,常...
开源项目管理工具   79  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Smartsheet、GanttPRO、Backlog、Visor、ResourceGuru、Productive、Xebrio、Hive、Quire。在当今快节奏的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在选择项目管理工具时常常面临困惑:...
项目管理系统   66  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用