如何使用BeautifulSoup精准定位带ac:name="gliffy"的自定义HTML标签
解决方案
工具选择
不需要更换库,BeautifulSoup原生支持带命名空间的非标准标签、属性查询,使用内置的html.parser或者lxml解析器均可正常工作。
精准定位实现
你只需要在查询时将带命名空间的属性通过字典参数传入,即可过滤出符合ac:name="gliffy"条件的宏标签,完全排除其他类型宏的干扰。
完整代码示例
from bs4 import BeautifulSoup # 替换为你实际获取的Confluence页面源码 page_html = """ <p>Lorem ipsum dolor sit amet</p> <p>Figure: Consectetur adipiscing elit</p> <p> <ac:structured-macro ac:macro-id="a9ab423b-b68c-4836-bffa-cdf1c5b95392" ac:name="gliffy" ac:schema-version="1"> <ac:parameter ac:name="displayName">Sed do eiusmod</ac:parameter> <ac:parameter ac:name="name">Tempor incididunt ut</ac:parameter> <ac:parameter ac:name="pagePin">2</ac:parameter> </ac:structured-macro> </p> <p><br/></p> """ # 解析页面 soup = BeautifulSoup(page_html, "html.parser") # 精准匹配所有gliffy宏标签 gliffy_list = soup.find_all("ac:structured-macro", {"ac:name": "gliffy"}) # 后续可对匹配到的宏做进一步操作,例如提取宏ID、内部参数 for gliffy in gliffy_list: # 打印宏ID print("宏ID:", gliffy.get("ac:macro-id")) # 提取displayName参数值 display_name = gliffy.find("ac:parameter", {"ac:name": "displayName"}).text print("图表名称:", display_name)
补充说明
如果你更习惯使用XPath语法,也可以切换到lxml库实现同样的效果,对应查询语句为//ac:structured-macro[@ac:name='gliffy'],无需做额外的命名空间声明即可直接查询。
内容的提问来源于stack exchange,提问作者ChinaMahjongKing
相关产品推荐
相关产品推荐

