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

使用BeautifulSoup爬取Steam多页特惠数据时每页返回相同内容如何解决

问题排查及修复方案

核心原因

你用的#p=页码是浏览器前端锚点参数,不会被发送到服务端,所以不管你循环的page值是多少,requests.get()发送的请求实际都是指向Steam特惠首页,自然每次返回的都是第一页的静态内容,分页是浏览器端JS加载额外接口实现的。

修复步骤

  • 第一步:抓包获取真实的分页AJAX接口,Steam特惠TopSellers分页的真实请求参数是用start控制偏移量,每页默认返回15条数据,第n页对应start = n * 15
  • 第二步:请求时添加User-Agent请求头,避免被Steam的反爬策略拦截
  • 第三步:接口返回的是JSON格式数据,提取其中的results_html字段再用BeautifulSoup解析即可

修正后示例代码

import requests
from bs4 import BeautifulSoup

game_lis = set()
# 加请求头模拟浏览器访问
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}

for page in range(0,4):
    # 用真实分页接口,start参数控制分页偏移
    start = page * 15
    page_url = f"https://store.steampowered.com/contenthub/querypaginated/specials/TopSellers/render/?query=&start={start}&count=15&cc=CN&l=schinese&v=4"
    steam_games = requests.get(page_url, headers=headers)
    # 接口返回JSON,提取html内容
    res_json = steam_games.json()
    soup = BeautifulSoup(res_json['results_html'], 'lxml')
    s_game_offers = soup.findAll('a', class_='tab_item')
    print(f"第{page+1}页数据:")

    for game in s_game_offers:
        title = game.find('div', class_='tab_item_name')
        discount = game.find('div', class_='discount_pct')
        if title and discount: # 加判空避免异常
            game_lis.add(title.text)
            print(f"{title.text}: {discount.text}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:45:02