beautifulsoup 上下文中 lxml 和 html5lib 的区别

问题描述 投票:0回答:2

在 beautifulsoup 的上下文中,lxml 和 html5lib 解析器的功能有区别吗?我正在尝试学习使用 BS4 并使用以下代码构造 --

ret = requests.get('http://www.olivegarden.com')
soup = BeautifulSoup(ret.text, 'html5lib')
for item in soup.find_all('a'): 
    print item['href']

我开始使用 lxml 作为解析器,但注意到对于某些网站,即使页面中存在有效链接,也永远不会输入 for 循环。同一页面可与 html5ib 解析器一起使用。是否有任何特定类型的页面可能无法使用 lxml?

我在 Ubuntu 上使用 python-lxml 2.3.2-1 和 libxml2 2.7.8.dfsg-5.1ubunt 和 html5lib-1.0b3

编辑:我更新到 lxml 3.1.2,但仍然看到同样的问题。在 Mac 上,尽管运行 3.0.x,但同一页面可以正确解析。相关网站是 www.olivegarden.com

python beautifulsoup lxml html5lib
2个回答
12
投票

html5lib 使用 HTML 规范中定义的 HTML 解析算法,并在所有主要浏览器中实现。 lxml 使用 libxml2 的 HTML 解析器 - 这最终是基于他们的 XML 解析器,并且不遵循任何其他地方使用的无效 HTML 的错误处理。

大多数 Web 开发人员只使用 Web 浏览器进行测试 - 标准是该死的 - 因此,如果您想获得页面作者的意图,您可能需要使用与当前浏览器匹配的 html5lib 之类的东西,


0
投票

您可以完全删除lxml

pip uninstall lxml
© www.soinside.com 2019 - 2024. All rights reserved.