Steam社区市场JSON接口URL适配全页面及突破count参数100上限问题咨询
解决Steam市场JSON接口的分页与请求限制问题
嘿,刚接触编程就尝试爬取Steam市场数据,这起步挺不错的!针对你遇到的两个问题,我给你拆解下解决方案:
为什么count设置超过100无法获取更多数据?
这是Steam官方接口的硬性限制——这个count参数的最大值就是100,后端会直接忽略超过100的数值,最多返回100条数据。不是你代码的问题,是平台为了控制服务器负载做的限制,咱们只能接受这个设定,换个方式来获取全量数据。
如何适配所有页面的请求?
核心思路就是分页请求,利用接口里的start参数来控制每次请求的起始位置:
- 第一次请求:
start=0&count=100,获取第1-100条数据 - 第二次请求:
start=100&count=100,获取第101-200条数据 - 第三次请求:
start=200&count=100,以此类推 - 直到某次请求返回的
results数组长度小于100,或者为空,就说明已经获取完所有数据了
新手友好的Python示例代码
我给你写个简单的代码框架,你可以照着改:
import requests import time # 基础URL,把固定参数先写好 base_url = "https://steamcommunity.com/market/search/render/?query=&search_descriptions=0&appid=730&norender=1" start = 0 count = 100 all_items = [] while True: # 拼接每次请求的URL request_url = f"{base_url}&start={start}&count={count}" # 加个User-Agent,模拟浏览器请求,避免被拦截 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } try: response = requests.get(request_url, headers=headers) response.raise_for_status() # 如果请求出错,抛出异常 data = response.json() items = data.get("results", []) if not items: # 没有数据了,退出循环 break all_items.extend(items) print(f"已获取 {len(all_items)} 条数据") # 更新下一次的起始位置 start += count # 加个延迟,避免请求太频繁被封禁 time.sleep(1) except Exception as e: print(f"请求出错:{e}") break print(f"全部数据获取完成,共 {len(all_items)} 条")
额外提醒(新手必看)
- 一定要加请求延迟:Steam对请求频率很敏感,太快会再次被封禁,
time.sleep(1)至少保证每秒1次请求,最好可以调到2-3秒更安全 - 带上
User-Agent:很多接口会拒绝没有浏览器标识的请求,上面代码里已经加了,你也可以换成自己浏览器的UA - 不要一次性爬太多数据:如果数据量很大,建议分批次爬,比如爬几千条就暂停一会儿,避免触发反爬机制
内容的提问来源于stack exchange,提问作者Kryštof Bochníček
相关产品推荐
相关产品推荐

