...
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脚本中,我包含了这一行:
导入comparePages
在pageCrawler文件中,我包含了以下两行代码:
从bs4导入BeautifulSoup
从urllib2导入urlopen
任何帮助找出问题是什么以及如何解决都将不胜感激。
我怀疑这与BS将用于读取HTML的解析器有关。他们的文档在这里,但如果你像我一样(在OSX上),你可能会被一些需要一些工作的东西困住:
您会注意到,在上面的BS4文档页面中,他们指出BS4默认将使用Python内置HTML解析器。假设你使用的是OSX, Python的apple捆绑版本是2.7.2,它对字符格式化并不宽容。我遇到了同样的问题,所以我升级了我的Python版本来解决它。在virtualenv中这样做可以最大限度地减少对其他项目的干扰。
如果这样做听起来很痛苦,你可以切换到LXML解析器:
pip install lxml
然后试试:
soup = BeautifulSoup(html, "lxml")
根据您的情况,这可能已经足够好了。我觉得这很烦人,所以升级了我的Python版本。使用virtualenv,您可以相当容易地迁移您的包。
我也遇到过同样的问题。我发现原因是我有一个稍微过时的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
尽管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,这可能有一些优点和缺点。