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-lxmlhtml
是 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") '
在我的虚拟环境中,我需要安装requests
、bs4
和lxml
,然后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,您可以使用
处理您的 xmlsoup = 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.