python - 使用美汤正确解析空html标签

标签 python html beautifulsoup

HTML 有空元素的概念,如 MDN 中所列.然而, BeautifulSoup 似乎并不能妥善处理它们:

import bs4

soup = bs4.BeautifulSoup(
    '<div><input name=the-input><label for=the-input>My label</label></div>',
    'html.parser'
)
print(soup.contents)

我得到:

[<div><input name="the-input"><label for="the-input">My label</label></input></div>]

即输入已经包裹了标签。

问题:有什么办法可以得到漂亮的汤来正确解析这个?还是我还没有找到对这种行为的官方解释?

至少我希望是这样的:

[<div><input name="the-input"></input><label for="the-input">My label</label></div>]

即输入在标签之前自动关闭。

最佳答案

如他们的 documentation 所述html5lib 像 Web 浏览器一样解析文档(在这种情况下就像 lxml)。它会在需要时尝试通过添加/关闭标签来修复您的文档树。

在您的示例中,我使用 lxml 作为解析器,它给出了以下结果:

soup = bs4.BeautifulSoup(
'<div><input name=the-input><label for=the-input>My label</label></div>',
'lxml'
)
print(soup.body.contents)

[<div><input name="the-input"/><label for="the-input">My label</label></div>]

请注意,lxml 添加了 html 和 body 标签,因为它们在源代码中不存在,这就是我打印 body 内容的原因。

关于python - 使用美汤正确解析空html标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43002091/

相关文章:

javascript - 获取被 jQuery 更改后的 HTML 元素的内容

html - 尝试从 a 标签内的 span 元素中抓取文本

python - 如何从 Beautiful Soup 网站抓取的结果中将 Django 模型添加到数据库中?

python - 如何在 python 中实例化类型提示的类?

python - 在 Pandas/Python 中用多个连续的 nan 向后插值?

html - 如何使 &lt;input&gt; 的实际大小为 ="..."?

python - 使用 BeautifulSoup 提取 anchor 标签值

python - 如何在python代码中使用sqoop命令进行增量导入

python - 在 Flask 模板中显示 MQTT 数据

javascript - 单击一个 Div 下拉功能在 iPhone 上不起作用