如何使用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)
- 先确保安装
bs4库:pip install beautifulsoup4 - 编写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
相关产品推荐
相关产品推荐

