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,您可以非常轻松地迁移软件包.
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)
Pik*_*er2 33
运行这三个命令以确保您安装了所有相关的软件包:
pip install bs4
pip install html5lib
pip install lxml
Run Code Online (Sandbox Code Playgroud)
如果需要,然后重新启动 Python IDE。
这应该处理与此问题相关的任何事情。
小智 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)
小智 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)
它解决了我的问题
虽然 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 依赖,这可能有一些优点和缺点。
您可以使用以下代码来代替使用lxml和html.parser:
soup = BeautifulSoup(html, 'html.parser')
Run Code Online (Sandbox Code Playgroud)
就我而言,我有一个过时的软件包版本lxml。所以我刚刚更新了它并解决了这个问题。
sudo python3 -m pip install lxml --upgrade
Run Code Online (Sandbox Code Playgroud)