如何合并两个循环元素,解决游戏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
相关产品推荐
相关产品推荐

