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

如何抓取Steam统计页中同class名下的两组玩家数据?

Steam热门游戏玩家数据抓取问题解决

问题说明

需要抓取Steam平台热门游戏的当前玩家数和今日峰值玩家数,目标页面的表格中这两组数据对应的HTML元素使用了相同的class名currentServers。现有代码中使用find()方法仅能获取第一个数值(当前玩家数),无法提取第二个数值(今日峰值)。

页面单条游戏数据的HTML结构示例:

<tr class="player_count_row" style="">
    <td align="right">
        <span class="currentServers">403,791</span>
    </td>
    <td align="right">
        <span class="currentServers">882,486</span>
    </td>
    <td width="20">&nbsp;</td>
    <td>
        <a class="gameLink" onmouseover="GameHover( this, event, 'global_hover' {&quot;type&quot;:&quot;app&quot;,&quot;id&quot;:730,&quot;public&quot;:1,&quot;v6&quot;:1} );" onmouseout="HideGameHover( this, event, 'global_hover' )" href="https://store.steampowered.com/app/730/CounterStrike_Global_Offensive/">Counter-Strike: Global Offensive</a>
    </td>
</tr>

现有问题代码:

import requests
from bs4 import BeautifulSoup

url = 'https://store.steampowered.com/stats/'

page = requests.get(url)
soup = BeautifulSoup(page.content, "html.parser")
results = soup.find(id="detailStats")
row = results.find_all('tr', class_='player_count_row')

for data in row:
    player = data.find('span', class_='currentServers')
    name = data.find('a', class_='gameLink')
    print(player.text)
    print(name.text)
    print()

解决方法

find()方法只会返回第一个匹配到的元素,而find_all()会返回所有匹配元素的列表。只需将获取玩家数据的代码改为find_all(),再从列表中分别提取第一个(当前玩家数)和第二个(今日峰值)元素的文本内容即可。

修改后的完整代码:

import requests
from bs4 import BeautifulSoup

url = 'https://store.steampowered.com/stats/'

page = requests.get(url)
soup = BeautifulSoup(page.content, "html.parser")
results = soup.find(id="detailStats")
rows = results.find_all('tr', class_='player_count_row')

for data in rows:
    # 获取所有class为currentServers的span元素,返回列表
    player_stats = data.find_all('span', class_='currentServers')
    game_name = data.find('a', class_='gameLink')
    
    # 提取当前玩家数和今日峰值
    current_players = player_stats[0].text
    peak_today = player_stats[1].text
    
    print(f"游戏名称:{game_name.text}")
    print(f"当前玩家数:{current_players}")
    print(f"今日峰值玩家数:{peak_today}")
    print("-" * 30)

代码说明

  • 使用find_all('span', class_='currentServers')获取当前行内所有的玩家数据元素,得到一个包含两个元素的列表。
  • 通过索引[0]和[1]分别提取当前玩家数和今日峰值的文本内容。
  • 优化了输出格式,让数据展示更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 02:09:13