如何用BeautifulSoup将带aria-level的div替换为对应层级h标签并清除多余属性
优化后实现代码
你可以一次查询所有符合要求的标题类div,动态生成对应层级的h标签,同时直接清空元素的所有属性即可:
import bs4 html = '''<div id="container"> <div role="heading" aria-level="1">The main page heading</div> <p>This article is about showing a page structure.</p> <div role="heading" aria-level="2">Introduction</div> <p>An introductory text.</p> <div role="heading" aria-level="2">Chapter 1</div> <p>Text</p> <div role="heading" aria-level="3">Chapter 1.1</div> <p>More text in a sub section.</p> </div>''' soup = bs4.BeautifulSoup(html, "html.parser") # 一次查询所有带aria-level属性、role为heading的div for header_div in soup.find_all("div", {"role": "heading", "aria-level": True}): # 获取标题层级 level = header_div["aria-level"] # 替换标签名 header_div.name = f"h{level}" # 清空所有原有属性 header_div.attrs = {} print(soup)
实现说明
- 没有写死固定的h1/h2/h3三层查询,不管是h4还是更高层级的标题都能自动适配,代码更简洁灵活
- BeautifulSoup元素的
attrs属性存储了该标签的所有属性,直接赋值为空字典即可一次性清除所有冗余属性,无需逐个删除 - 额外增加了
role="heading"的匹配条件,避免误改其他带aria-level属性的非标题div
内容的提问来源于stack exchange,提问作者quadratecode
相关产品推荐
相关产品推荐

