bs4.FeatureNotFound:找不到具有您请求的功能的树生成器:lxml。您需要安装解析器库吗?

Posted

技术标签:

【中文标题】bs4.FeatureNotFound:找不到具有您请求的功能的树生成器:lxml。您需要安装解析器库吗?【英文标题】:bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: lxml. Do you need to install a parser library? 【发布时间】:2017-02-28 05:25:52 【问题描述】:
...
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,并按照 this tutorial 获得 Beautiful Soup 和 lxml,它们都成功安装并使用单独的测试文件 located here。在导致此错误的 Python 脚本中,我包含了这一行: from pageCrawler import comparePages 在 pageCrawler 文件中,我包含了以下两行: from bs4 import BeautifulSoup from urllib2 import urlopen

任何帮助找出问题是什么以及如何解决问题将不胜感激。

【问题讨论】:

看到这个答案 - ***.com/questions/17766725/how-to-re-install-lxml html 是 url 还是 html 内容? 【参考方案1】:

我在 pycharm 中使用 python 3.8。我假设您在开始工作之前没有安装“lxml”。这就是我所做的:


    转到文件 -> 设置 在设置左侧菜单栏选择“Python解释器”,选择“Python解释器”。 点击软件包列表上方的“+”图标。 搜索“lxml”。 点击“可用包”窗口左下方的“安装包”。

【讨论】:

【参考方案2】:

虽然 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 依赖,这可能有一些优点和缺点。

【讨论】:

【参考方案3】:

我的解决方案是从 conda 中删除 lxml 并使用 pip 重新安装。

【讨论】:

【参考方案4】:

我更喜欢内置的python html解析器,不安装不依赖

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

【讨论】:

虽然这个答案没有直接回答问题,但它确实提供了一个更好的选择。我对 xmlml 没有偏好,我将所有内容都更改为 html.parser 并且它起作用了。我宁愿继续使用开箱即用的东西,也不愿拖累不必要的技术债务。【参考方案5】:

实际上其他工作提到的3个选项。

1.

soup_object= BeautifulSoup(markup,"html.parser") #Python HTML parser
pip install lxml

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

soup_object= BeautifulSoup(markup,'html5lib') # C dependent parser 

【讨论】:

在我的情况下,lxml 曾经可以工作,但是当我切换到 html.parser 时,它就冻结了。【参考方案6】:

在 python 环境中安装 LXML 解析器。

pip install lxml

您的问题将得到解决。你也可以使用内置的python包:

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

注意:“HTMLParser”模块在 Python3 中已重命名为“html.parser”

【讨论】:

【参考方案7】:

运行这三个命令以确保您已安装所有相关软件包:

pip install bs4
pip install html5lib
pip install lxml

然后重新启动您的 Python IDE(如果需要)。

这应该处理与此问题相关的任何事情。

【讨论】:

这是实际的解决方案。【参考方案8】:

空白参数将导致最佳可用警告。 汤 = BeautifulSoup(html)

---------------/UserWarning: 没有明确指定解析器,所以我正在使用适用于该系统的最佳可用 HTML 解析器(“html5lib”)。这通常不是问题,但是如果您在另一个系统或不同的虚拟环境中运行此代码,它可能会使用不同的解析器并且行为不同。--------------- --------/

python --version Python 3.7.7

PyCharm 19.3.4 CE

【讨论】:

【参考方案9】:

由于您使用的解析器而出现错误。一般来说,如果你有 HTML 文件/代码,那么你需要使用html5lib(可以找到文档here)如果你有 XML 文件/数据,那么你需要使用lxml(可以找到文档here)。您也可以将lxml 用于 HTML 文件/代码,但有时会出现上述错误。因此,最好根据数据/文件的类型明智地选择包。您也可以使用内置模块html_parser。但是,这有时也行不通。

有关何时使用哪个包的更多详细信息,您可以查看详细信息here

【讨论】:

【参考方案10】:

我怀疑这与 BS 用于读取 HTML 的解析器有关。他们document is here,但如果你和我一样(在 OSX 上),你可能会遇到一些需要做一些工作的事情:

您会注意到,在上面的 BS4 文档页面中,他们指出默认情况下 BS4 将使用 Python 内置的 HTML 解析器。假设您在 OSX 中,Apple 捆绑的 Python 版本是 2.7.2,它对字符格式不宽容。我遇到了同样的问题,所以我升级了我的 Python 版本来解决它。在 virtualenv 中执行此操作将最大限度地减少对其他项目的干扰。

如果这样做听起来很痛苦,您可以切换到 LXML 解析器:

pip install lxml

然后试试:

soup = BeautifulSoup(html, "lxml")

根据您的情况,这可能已经足够了。我发现这很烦人,需要升级我的 Python 版本。使用 virtualenv,you can migrate your packages 相当容易。

【讨论】:

在 pip install 后进行测试:python -c 'import requests ; from bs4 import BeautifulSoup ; r = requests.get("https://www.allrecipes.com/recipes/96/salad/") ; soup = BeautifulSoup(r.text, "lxml") ' 在我的虚拟环境中,我需要安装requestsbs4lxml,然后BeautifulSoup 才能解析我的网页内容。 嘘! Mad Mac,我不知道我什么时候才能不再后悔购买 Mac 的决定! 第一次运行 lxml 时,我在脚本中添加了 import lxml 行,然后它运行了【参考方案11】:

在某些参考文献中,使用第二个而不是第一个:

soup_object= BeautifulSoup(markup,'html-parser')
soup_object= BeautifulSoup(markup,'html.parser')

【讨论】:

您应该在回答中提供更多细节【参考方案12】:

不用lxml使用html.parser,可以使用这段代码:

soup = BeautifulSoup(html, 'html.parser')

【讨论】:

vendor.bs.bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: html.parser. Do you need to install a parser library?【参考方案13】:

我使用的是 Python 3.6,我在这篇文章中遇到了同样的原始错误。运行命令后:

python3 -m pip install lxml

它解决了我的问题

【讨论】:

在 Docker 中也需要apt install python-lxml【参考方案14】:

我遇到了同样的问题。我发现原因是我有一个稍微过时的python 6包。

>>> 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

【讨论】:

sudo pip install six==1.10.0【参考方案15】:

对于安装了 bs4 的开箱即用的基本 python,您可以使用

处理您的 xml
soup = BeautifulSoup(html, "html5lib")

如果你想使用 formatter='xml' 那么你需要

pip3 install lxml

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

【讨论】:

在一个新启动的远程服务器上,html5lib 对我来说不能开箱即用。我仍然必须做一个pip install html5lib,之后一切正常。 对我不起作用:bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: html5lib. Do you need to install a parser library? 如果我将其更改为 html.parser 它会起作用

以上是关于bs4.FeatureNotFound:找不到具有您请求的功能的树生成器:lxml。您需要安装解析器库吗?的主要内容,如果未能解决你的问题,请参考以下文章

bs4.FeatureNotFound:找不到具有您请求的功能的树生成器:lxml。您需要安装解析器库吗?

bs4.FeatureNotFound: ... lxml 与 MacOS 和 Conda / Python 3

bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: lxml. Do you

运行爬虫遇到奇葩的问题 bs4.FeatureNotFound: Couldn‘t find a tree builder with the features you requested: lxml.

bs4使用lxml报错

如何重新安装lxml?