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

使用Python bs4抓取Steam社区市场皮肤价格失败该如何解决?

问题原因分析
  • 动态内容渲染问题:Steam社区市场的买/卖单价格数据不会直接写在初始静态HTML里,是页面加载完成后通过JavaScript异步请求接口拉取数据后再填充到对应DOM节点的,你直接请求初始URL拿到的静态页面里,market_commodity_buyrequests对应的节点内容本来就是空的占位符,所以只能拿到空引号。
  • 反爬机制触发:Steam对未携带合法请求头的爬虫请求会直接返回异常内容,甚至触发临时访问限制,你当前的requests请求没有加任何请求头,大概率拿到的不是正常的用户访问页面内容。
可行解决方法

方法1:直接调用Steam市场商品数据接口

Steam有公开的市场价格查询接口,不需要解析页面,直接拿结构化数据,对应你要查询的CSGO AWP | 二西莫夫(久经沙场)的请求示例代码如下:

import requests

# 请求头必须带User-Agent,模拟正常浏览器访问
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"
}
# currency=23对应人民币,appid=730是CSGO的应用ID
url = "https://steamcommunity.com/market/priceoverview/?appid=730&currency=23&market_hash_name=AWP%20%7C%20Hyper%20Beast%20%28Well-Worn%29"
resp = requests.get(url, headers=headers)
data = resp.json()

# 提取目标数据示例
if data.get("success"):
    print(f"当前最低售价: {data.get('lowest_price')}")
    print(f"最近成交中位价: {data.get('median_price')}")
    print(f"在售商品总数: {data.get('volume')}")

该方法优势为不需要解析DOM,返回的是结构化JSON数据,稳定性远高于爬取页面内容。

方法2:使用无头浏览器渲染动态内容

如果需要获取页面内其他动态渲染的完整内容,可以使用Selenium、Playwright这类工具模拟浏览器运行,等页面JS执行完成后再提取DOM内容,Selenium示例代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
url = "https://steamcommunity.com/market/listings/730/AWP%20%7C%20Hyper%20Beast%20%28Well-Worn%29"
driver.get(url)
# 等待买单一节点加载完成
buy_order_node = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "market_commodity_buyrequests"))
)
print(buy_order_node.text)
driver.quit()

注意事项

  • 注意控制请求频率,Steam对短时间大量请求的IP会触发临时访问限制,建议每次请求间隔至少15秒以上。
  • 接口的货币代码可以按需修改,比如1对应美元,23对应人民币。

内容的提问来源于stack exchange,提问作者Константин Ленивков

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:48:01