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

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


当前回答

BS4默认情况下需要HTML文档。因此,它将XML文档解析为HTML文档。在构造函数中传递features="xml"作为参数。它解决了我的问题。

其他回答

不要使用lxml,而是使用html。解析器,你可以使用这段代码:

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

在我的例子中,我有一个过时版本的lxml包。所以我更新了它,这就解决了这个问题。

sudo python3 -m pip install lxml --upgrade

我也遇到过同样的问题。我发现原因是我有一个稍微过时的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

我的解决方案是从conda中删除lxml,然后用pip重新安装它。

出现错误是因为您使用的解析器。一般来说,如果你有HTML文件/代码,那么你需要使用html5lib(文档可以在这里找到)&如果你有XML文件/数据,那么你需要使用lxml(文档可以在这里找到)。你也可以使用lxml的HTML文件/代码,但有时它会给出一个错误如上所示。因此,最好根据数据/文件的类型明智地选择包。你也可以使用内置模块html_parser。但是,这有时也不起作用。

有关何时使用哪个包的详细信息,您可以在这里查看详细信息