Beautifulsoup 上下文中 lxml 和 html5lib 的区别

Posted

技术标签:

【中文标题】Beautifulsoup 上下文中 lxml 和 html5lib 的区别【英文标题】:difference between lxml and html5lib in the context of beautifulsoup 【发布时间】:2013-09-06 02:40:04 【问题描述】:

在 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 仍然看到同样的问题。在运行 3.0.x 的 mac 上,相同的页面正在被正确解析。有问题的网站是 www.olivegarden.com

【问题讨论】:

您可以在 lxml 中使用 html5lib 解析器和 BeautifulSoup 解析器。见lxml.de/elementsoup.html & lxml.de/html5parser.html 【参考方案1】:

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

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

【讨论】:

以上是关于Beautifulsoup 上下文中 lxml 和 html5lib 的区别的主要内容,如果未能解决你的问题,请参考以下文章

Jupyter 笔记本中的 BeautifulSoup 和 lxml

python模块--BeautifulSoup4 和 lxml

BeautifulSoup 和 lxml.html - 更喜欢啥? [复制]

BeautifulSoup - lxml 和 html5lib 解析器抓取差异

python中的beautifulsoup和xpath有啥异同点

lxml / BeautifulSoup 解析器警告