检查HTML标签是否自闭合 - HTML解析器 - Python

1 投票
2 回答
2532 浏览
提问于 2025-04-18 13:20

有没有办法用HTML解析器检查一个标签是否是自闭合标签?

我知道自闭合标签是通过内置函数 handle_startendtag() 来处理的。

不过,这个函数只会处理那些明确闭合的标签,比如 <img src="x.jpg"/>

而不会处理像 <img src="x.jpg"> 这样的标签。

我正在做一个程序,它会读取一个HTML文件,然后输出一个Sass模板。

我想在输出文件中把那些在HTML文件里没有明确闭合的img标签加上闭合标记。

谢谢!

2 个回答

0

简单的解决办法是使用BeautifulSoup这个工具。

In [76]: from bs4 import BeautifulSoup

In [77]: BeautifulSoup('<img src="x.jpg">')
Out[77]: <img src="x.jpg"/>

你还可以检查一个标签是否是自闭合的。

from bs4 import BeautifulSoup
from bs4.element import Tag

soup = BeautifulSoup(html)
tags = [tag for tag in soup if isinstacne(tag, Tag)
self_closing = [tag for tag in tags if tag.isSelfClosing]

每个Tag元素都有一个isSelfClosing属性。所以,你可以通过这个属性来筛选它们。

3

这不是一个专门针对Python的解决方案,但如果你想知道哪些标签具有“自闭合特性”,可以查看官方的HTML5规范:这些标签正式被称为空元素

area, base, br, col, embed, hr, img, input, keygen, link, menuitem,
meta, param, source, track, wbr

严格来说,空元素根本没有闭合标签,但允许在>之前加一个额外的/

撰写回答