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

Python爬取Steam社区市场时货币随机变动,如何永久固定货币类型?

解决方案

问题根源

  • Steam 判定返回货币的优先级为:Cookie 中的地域标识 > 请求IP归属地 > Accept-Language 参数,仅设置语言头优先级最低,自然会出现临时生效后反复变动的情况
  • 你的测试代码存在配置遗漏:第二次拉取页面的请求完全没有携带自定义headers,直接使用requests默认配置发起请求,相当于放弃了之前的参数配置

修复方案

要彻底固定返回货币,按以下优先级配置即可:

  1. 强制携带steamCountry Cookie,格式为国家二字码%7C货币三字码,比如固定返回人民币填写CN%7CCNY、固定返回美元填写US%7CUSD、固定返回瑞典克朗填写SE%7CSEK,该参数优先级最高,只要携带就不会受IP变动、会话过期影响
  2. 统一使用requests的Session实例发起所有请求,自动管理会话状态和Cookie,避免每次请求重复配置参数,同时降低被Steam识别为异常请求的概率
  3. 可选兜底:在请求URL末尾添加?cc=国家二字码,和Cookie配置的国家保持一致,双重锁定地域参数

修正后的可运行代码

from bs4 import BeautifulSoup
import requests

# 固定货币配置:此处以固定人民币为例,要其他货币修改steam_country值即可
steam_country = "CN%7CCNY"
url = "https://steamcommunity.com/market/listings/730/USP-S%20%7C%20Blueprint%20%28Factory%20New%29"

# 初始化Session复用配置
s = requests.Session()
s.headers.update({
    "Accept-Language": "en-US,en;q=0.5",
    "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"
})
# 添加固定货币的Cookie
s.cookies.set("steamCountry", steam_country, domain="steamcommunity.com")

# 所有请求统一用Session发起
r = s.get(url)
soup = BeautifulSoup(r.text, 'lxml')
skin_name = soup.find('span', class_ = 'market_listing_item_name').text
sm = soup.find('span', class_ = 'market_listing_price').text.strip()
print(skin_name, sm)

内容的提问来源于stack exchange,提问作者Kryštof Bochníček

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 03:54:04