有人能更详细地解释一下像html.parser和html5lib这样的解析器之间的区别吗?我遇到了一个奇怪的行为,在使用html.parser时,它忽略了特定位置的所有标记。看看这段代码:
from bs4 import BeautifulSoup
html = """
<html>
<head></head>
<body>
<!--[if lte IE 8]> <!-- data-module-name="test"--> <![endif]-->
<![endif]-->
<a href="test"></a>
<a href="test"></a>
<a href="test"></a>
<a href="test"></a>
<!--[if lte IE 8]>
<![endif]-->
</body>
</html>
"""
soup = BeautifulSoup(html, 'html.parser')
tags = soup.find_all('a')
print(tags)
使用HTML解析器时,这将返回一个空列表,而使用html5lib时,期望的"a"标签会如预期般返回。
有人知道原因吗?我已经阅读了文档,但关于不同解析器的解释还是很模糊。
另外,我注意到html5lib会忽略无效的标签,例如嵌套的表单标签,有没有办法使用html5lib来避免html.parser的上述行为,并同时获取无效的标签,如嵌套的表单标签?(使用html5lib解析时,其中一个表单标签被删除)
提前感谢。