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

如何提取Div内节点并关联父/子节点值且无重复?附Python代码

问题修正与实现方案

看起来你现在的代码和提供的HTML结构不匹配,而且存在遍历逻辑的问题(比如循环里用soup.find只会拿到第一个匹配项),我来帮你调整代码,实现关联父节点、提取每场比赛信息并去重的需求。

第一步:修正HTML结构

你提供的HTML有多余的闭合标签,先整理成正确的结构(假设这些.matches节点都在.league-data父节点下,对应你代码里的campeonato变量):

<div class="league-data">
  <div class="matches">
    <div class="conf">Brazil vs. Colombia</div>
    <div class="targetHour">08:00 pm</div>
  </div>
  <div class="matches">
    <div class="conf">Chile vs. Argentina</div>
    <div class="targetHour">08:00 pm</div>
  </div>
</div>

第二步:修正Python代码

你的原代码里在循环内部使用soup.find会导致始终只获取第一个匹配元素,而且和你提供的HTML里的.matches类不对应,下面是修正后的代码,实现关联父节点、提取信息并去重:

from bs4 import BeautifulSoup

# 替换成你的实际HTML内容
html_content = '''
<div class="league-data">
  <div class="matches">
    <div class="conf">Brazil vs. Colombia</div>
    <div class="targetHour">08:00 pm</div>
  </div>
  <div class="matches">
    <div class="conf">Chile vs. Argentina</div>
    <div class="targetHour">08:00 pm</div>
  </div>
  <!-- 模拟重复的比赛,测试去重 -->
  <div class="matches">
    <div class="conf">Brazil vs. Colombia</div>
    <div class="targetHour">08:00 pm</div>
  </div>
</div>
'''

soup = BeautifulSoup(html_content, 'html.parser')
# 使用集合自动去重
unique_results = set()

# 遍历每个联赛数据节点
for league_node in soup.find_all('div', class_='league-data'):
    # 获取父节点(联赛)的文本,若没有可自定义标识
    campeonato = league_node.text.strip() if league_node.text.strip() else "Unknown League"
    # 遍历当前联赛下的所有比赛节点
    for match_node in league_node.find_all('div', class_='matches'):
        # 提取对阵信息和时间
        match_conf = match_node.find('div', class_='conf').text.strip()
        match_hour = match_node.find('div', class_='targetHour').text.strip()
        # 组合成关联父节点的字符串,加入集合去重
        result_line = f"{campeonato}|{match_conf}|{match_hour}"
        unique_results.add(result_line)

# 输出去重后的结果
for line in unique_results:
    print(line)

关键改进点

  • 关联父节点:通过league_node.find_all确保只遍历当前联赛节点下的比赛,而不是全局查找,保证父节点和子节点的对应关系。
  • 自动去重:使用Python的set集合存储结果,自动过滤重复的比赛信息。
  • 文本清理:用.strip()去除文本中的多余空格和换行,让输出更整洁。
  • 容错处理:如果联赛节点没有文本,默认使用"Unknown League"作为标识,避免空值问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:06:09