python - beautifulsoup上下文中lxml和html5lib的区别

标签 python beautifulsoup lxml html5lib

在 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

最佳答案

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

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

关于python - beautifulsoup上下文中lxml和html5lib的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18582509/

相关文章:

python - Python 中的 Azure 计费 API - 空响应

python - 导入 django_filters.rest_framework 错误

python - HTML 不反射(reflect) Beautiful Soup 浏览器中的网页内容

python - 使用 beautifulsoup 从 youtube channel 获取链接的问题

python - lxml 在解析时删除 <?xml ...> 标签?

python - 为什么 hash() 在 python3.4 和 python2.7 下比较慢

python - Pymongo返回没有_id的数据

python - 使用 BeautifulSoup 提取特定的嵌套 div

python - lxml XPath-过滤所有文本,包括尾部

python - 在脚本标签内解析 json var