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

2025-04-15 09:19:00
admin
原创
33
摘要:问题描述:... 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大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2482  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1533  
  PLM(产品生命周期管理)项目对于企业优化产品研发流程、提升产品质量以及增强市场竞争力具有至关重要的意义。然而,在项目推进过程中,范围蔓延是一个常见且棘手的问题,它可能导致项目进度延迟、成本超支以及质量下降等一系列不良后果。因此,有效避免PLM项目范围蔓延成为项目成功的关键因素之一。以下将详细阐述三大管控策略,助力企业...
plm系统   0  
  PLM(产品生命周期管理)项目管理在企业产品研发与管理过程中扮演着至关重要的角色。随着市场竞争的加剧和产品复杂度的提升,PLM项目面临着诸多风险。准确量化风险优先级并采取有效措施应对,是确保项目成功的关键。五维评估矩阵作为一种有效的风险评估工具,能帮助项目管理者全面、系统地评估风险,为决策提供有力支持。五维评估矩阵概述...
免费plm软件   0  
  引言PLM(产品生命周期管理)开发流程对于企业产品的全生命周期管控至关重要。它涵盖了从产品概念设计到退役的各个阶段,直接影响着产品质量、开发周期以及企业的市场竞争力。在当今快速发展的科技环境下,客户对产品质量的要求日益提高,市场竞争也愈发激烈,这就使得优化PLM开发流程成为企业的必然选择。缺陷管理工具和六西格玛方法作为...
plm产品全生命周期管理   0  
热门文章
项目管理软件有哪些?
曾咪二维码

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

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

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用