【问题标题】:difference between lxml and html5lib in the context of beautifulsoupBeautifulsoup 上下文中 lxml 和 html5lib 的区别
【发布时间】:2023-03-17 11:15:01
【问题描述】:

在 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

【问题讨论】:

标签: python beautifulsoup lxml html5lib


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2018-01-11
    • 2011-04-11
    • 2014-05-06
    • 2012-06-12
    • 2014-02-14
    • 2020-01-19
    • 2012-09-02
    • 2017-12-03
    相关资源
    最近更新 更多