使用BeautifulSoup按条件从含重复元素的HTML提取球员与国籍数据
问题原因
原代码全局抓取所有带href的元素和所有flaggenrahmen类元素直接zip匹配,没有按行绑定单条球员数据,既会被球队链接等无关href干扰匹配关系,也没有处理同一名球员下多个国籍标签的跳过逻辑,导致对应关系错乱。
解决代码
from bs4 import BeautifulSoup from collections import defaultdict player_dict = defaultdict(list) soup = BeautifulSoup(html, 'html.parser') # 遍历每一行球员数据 for player_tr in soup.select('tbody tr'): # 提取当前行的球员姓名 name_tag = player_tr.select_one('.spielprofil_tooltip') if not name_tag: continue player_name = name_tag.get_text(strip=True) # 提取当前行第一个国籍标签,后续重复的自动忽略 nation_tag = player_tr.select_one('.flaggenrahmen') if nation_tag: player_dict[player_name].append(nation_tag['alt']) # 转成普通字典输出和预期格式一致 print(dict(player_dict))
运行输出
{'Trent Alexander-Arnold': ['England'], 'Achraf Hakimi': ['Morocco'], 'João Cancelo': ['Portugal'], 'Reece James': ['England']}
内容的提问来源于stack exchange,提问作者me.limes
相关产品推荐
相关产品推荐

