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

如何合并两个循环元素,解决游戏ID重复输出的问题?

问题解决思路与代码示例

你遇到的问题根源是分开的两个循环导致游戏ID与信息无法对应,且如果在第二个循环中直接使用外部的game_id变量,该变量会被最后一次循环赋值覆盖,最终所有行都显示最后一个ID。

核心解决方法是:在同一个循环里,基于单个游戏的父节点,同时提取对应的ID、标题、官方价和最低价——因为HTML结构中,每个游戏的所有信息必然嵌套在同一个容器节点下,无需拆分两次遍历。

具体实现代码

假设你的games.html中,每个游戏的结构类似这样(实际结构可根据你的HTML调整选择器):

<div class="game-item" data-id="1001">
  <h3>游戏A</h3>
  <span class="official-price">¥199</span>
  <span class="lowest-price">¥129</span>
</div>
<div class="game-item" data-id="1002">
  <h3>游戏B</h3>
  <span class="official-price">¥299</span>
  <span class="lowest-price">¥199</span>
</div>

对应的Python代码:

from bs4 import BeautifulSoup

# 读取并解析HTML文件
with open('games.html', 'r', encoding='utf-8') as f:
    soup = BeautifulSoup(f, 'html.parser')

# 找到所有游戏的容器节点
game_containers = soup.find_all('div', class_='game-item')

# 遍历每个游戏容器,一次性提取所有信息
for container in game_containers:
    # 提取游戏ID(根据实际HTML结构调整,比如从属性或子节点获取)
    game_id = container.get('data-id')
    # 提取标题
    game_title = container.find('h3').get_text(strip=True)
    # 提取官方价
    official_price = container.find('span', class_='official-price').get_text(strip=True)
    # 提取最低价
    lowest_price = container.find('span', class_='lowest-price').get_text(strip=True)
    
    # 一行输出对应信息
    print(f"ID: {game_id} | 标题: {game_title} | 官方价: {official_price} | 最低价: {lowest_price}")

关键说明

  • 如果你的游戏ID不是存在于父节点的data-id属性,而是嵌套在某个子节点(比如<span class="game-id">1001</span>),只需把game_id的提取代码改为:game_id = container.find('span', class_='game-id').get_text(strip=True)即可。
  • 始终确保所有信息的提取都基于同一个游戏容器节点,这样就能保证ID与游戏信息严格一一对应,不会出现错位或重复最后一个ID的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:05:33