You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Beautiful Soup提取span标签的class及对应Wikidata值

使用BeautifulSoup提取span标签的class与对应Wikidata值

需求说明

给定如下HTML内容:

<p id="01">... EU legislation and the <em>monetary power</em> of the<span class="institution" Wikidata="Q8901" name="European Central Bank">ECB</span>.</p><p id="02"><span class="person" Wikidata="Q563217">Guido Carli</span>, Governor of the<span class="institution" Wikidata="Q806176">Bank of Italy</span> ...</p>

需要生成格式如下的Python字典:

{'institution': ['Q8901', 'Q806176'], 'person': ['Q563217']}

即提取所有<span>标签的class属性值作为键,对应的Wikidata属性值组成列表作为值。

实现步骤(使用bs4)

  1. 先确保安装bs4库:pip install beautifulsoup4
  2. 编写Python代码完成提取:
from bs4 import BeautifulSoup

# 原始HTML内容
html_content = '''<p id="01">... EU legislation and the <em>monetary power</em> of the<span class="institution" Wikidata="Q8901" name="European Central Bank">ECB</span>.</p><p id="02"><span class="person" Wikidata="Q563217">Guido Carli</span>, Governor of the<span class="institution" Wikidata="Q806176">Bank of Italy</span> ...</p>'''

# 解析HTML
soup = BeautifulSoup(html_content, 'html.parser')

# 初始化结果字典
result = {}

# 遍历所有带class和Wikidata属性的span标签
for span in soup.find_all('span', attrs={'class': True, 'Wikidata': True}):
    class_name = span['class'][0]  # 假设每个span仅含一个class
    wikidata_id = span['Wikidata']
    
    # 按class分组收集Wikidata值
    if class_name in result:
        result[class_name].append(wikidata_id)
    else:
        result[class_name] = [wikidata_id]

print(result)

代码说明

  • soup.find_all('span', attrs={'class': True, 'Wikidata': True}):精准筛选同时包含class和Wikidata属性的<span>标签,排除无效标签。
  • 由于bs4返回的class属性是列表类型,这里用span['class'][0]取唯一的class值(适配示例场景)。
  • 通过判断键是否存在,实现同一class下的Wikidata值批量追加。

内容的提问来源于stack exchange,提问作者abbassix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 20:25:46