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

use*_*048 175 python lxml beautifulsoup python-2.7

...
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?
Run Code Online (Sandbox Code Playgroud)

以上输出在我的终端上.我在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

任何有关确定问题是什么以及如何解决问题的帮助都将不胜感激.

Jam*_*ico 187

我怀疑这与BS将用于读取HTML的解析器有关.他们的文档在这里,但是如果你像我一样(在OSX上)你可能会遇到需要做一些工作的事情:

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

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

pip install lxml
Run Code Online (Sandbox Code Playgroud)

然后尝试:

soup = BeautifulSoup(html, "lxml")
Run Code Online (Sandbox Code Playgroud)

根据您的情况,这可能足够好.我觉得这很烦人,需要升级我的Python版本.使用virtualenv,您可以非常轻松地迁移软件包.

  • 谢谢它现在正在工作.我用`html5lib`. (10认同)
  • 在我的虚拟环境中,我需要在“BeautifulSoup”解析我的网页内容之前安装“requests”、“bs4”和“lxml”。 (3认同)
  • 在 pip install 之后进行测试:`python -c'import requests; 从 bs4 导入 BeautifulSoup ;r = requests.get("https://www.allrecipes.com/recipes/96/salad/"); 汤 = BeautifulSoup(r.text, "lxml") '` (2认同)
  • 呃!疯狂的 Mac,我不知道什么时候我才能不再后悔购买 Mac 的决定! (2认同)
  • 第一次运行 lxml 时,我在脚本中添加了“import lxml”行,然后它就运行了 (2认同)

Tim*_*eed 43

对于安装了bs4的基本开箱即用的python,你可以用你的xml处理

soup = BeautifulSoup(html, "html5lib")
Run Code Online (Sandbox Code Playgroud)

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

pip3 install lxml

soup = BeautifulSoup(html, features="xml")
Run Code Online (Sandbox Code Playgroud)

  • 在新启动的远程服务器上,html5lib 对我来说不能开箱即用。我仍然需要执行“pip install html5lib”,之后一切正常。 (6认同)
  • 不适合我:`bs4.FeatureNotFound:找不到具有您请求的功能的树生成器:html5lib。您需要安装解析器库吗?如果我将其更改为“html.parser”,它就可以工作 (2认同)

Pik*_*er2 33

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

pip install bs4
pip install html5lib
pip install lxml
Run Code Online (Sandbox Code Playgroud)

如果需要,然后重新启动 Python IDE。

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

  • 对我来说,关键是重新启动 IDE,从而触发这一切成功工作 (4认同)
  • 这是实际的解决方案。 (3认同)

小智 31

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

1.

soup_object= BeautifulSoup(markup,"html.parser") #Python HTML parser
Run Code Online (Sandbox Code Playgroud)
pip install lxml

soup_object= BeautifulSoup(markup,'lxml') # C dependent parser 
Run Code Online (Sandbox Code Playgroud)
pip install html5lib

soup_object= BeautifulSoup(markup,'html5lib') # C dependent parser 
Run Code Online (Sandbox Code Playgroud)


小智 22

我更喜欢内置python html解析器,没有安装没有依赖汤= BeautifulSoup(s,"html.parser")

  • 谢谢,这适用于AWS Lambda. (6认同)

小智 13

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

pip install lxml
Run Code Online (Sandbox Code Playgroud)

您的问题将得到解决。您还可以使用内置的 python 包,如下所示:

soup = BeautifulSoup(s,  "html.parser")
Run Code Online (Sandbox Code Playgroud)

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


小智 10

我正在使用Python 3.6,我在这篇文章中有同样的原始错误.运行命令后:

python3 -m pip install lxml
Run Code Online (Sandbox Code Playgroud)

它解决了我的问题

  • 在 Docker 中还需要`apt install python-lxml` (4认同)

Pro*_*mik 6

虽然 BeautifulSoup 默认支持 HTML 解析器,如果你想使用任何其他第三方 Python 解析器,你需要安装外部解析器,如 (lxml)。

soup_object= BeautifulSoup(markup,"html.parser") #Python HTML parser
Run Code Online (Sandbox Code Playgroud)

但是如果你没有指定任何解析器作为参数,你会得到一个没有指定解析器的警告。

soup_object= BeautifulSoup(markup) #Warnning
Run Code Online (Sandbox Code Playgroud)

要使用任何其他外部解析器,您需要安装它,然后需要指定它。喜欢

pip install lxml

soup_object= BeautifulSoup(markup,'lxml') # C dependent parser 
Run Code Online (Sandbox Code Playgroud)

外部解析器有 c 和 python 依赖,这可能有一些优点和缺点。


zab*_*bop 6

pip install lxml然后继续xmlsoup = BeautifulSoup(URL, "xml")Mac 上完成工作。


Yog*_*esh 5

您可以使用以下代码来代替使用lxml和html.parser:

soup = BeautifulSoup(html, 'html.parser')
Run Code Online (Sandbox Code Playgroud)

  • vendor.bs.bs4.FeatureNotFound:找不到具有您要求的功能的树生成器:html.parser。您需要安装解析器库吗? (2认同)

bli*_*izz 5

就我而言,我有一个过时的软件包版本lxml。所以我刚刚更新了它并解决了这个问题。

sudo python3 -m pip install lxml --upgrade
Run Code Online (Sandbox Code Playgroud)