Steam API数据获取与格式转换:生成可入库CSV文件
处理Steam市场价格历史API数据的解决方案
1. 明确API返回格式
Steam市场价格历史接口的返回内容不是标准JSON,而是一段包含变量的JavaScript代码,核心有效数据存于line3变量的二维数组中,示例结构如下:
var line1 = []; var line2 = []; var line3 = [ [1699152000, 3.5, 12], [1699238400, 3.6, 9], ... ]; var name = "目标物品名称";
其中line3的每个子数组对应一条记录:
- 第一个元素:Unix时间戳(对应
date列) - 第二个元素:物品单价(对应
price列) - 第三个元素:成交数量(对应
quantity列)
2. 提取并转换数据的具体步骤
步骤1:请求并提取核心数据
用requests获取响应后,通过正则匹配提取line3中的数组内容:
import requests import re # 替换为你的目标API地址和有效cookie url = "https://steamcommunity.com/market/pricehistory/?appid=730&market_hash_name=你的物品名称" cookies = {"steamLogin": "你的会话ID"} response = requests.get(url, cookies=cookies) # 正则匹配line3的数组部分 pattern = re.compile(r'var line3 = (\[.*?\]);', re.DOTALL) match_result = pattern.search(response.text) if not match_result: raise ValueError("未提取到有效价格数据,请检查会话ID或物品名称") raw_data_str = match_result.group(1)
步骤2:转换为规范DataFrame并导出CSV
将提取到的字符串转为Python列表,再构造DataFrame并处理时间格式:
import ast import pandas as pd # 把字符串格式的数组转为Python列表 data_list = ast.literal_eval(raw_data_str) # 构造DataFrame并命名列 df = pd.DataFrame(data_list, columns=['date', 'price', 'quantity']) # 将Unix时间戳转换为可读日期格式 df['date'] = pd.to_datetime(df['date'], unit='s') # 导出为CSV文件 df.to_csv('steam_price_history.csv', index=False)
3. 常见问题排查
- 若正则匹配失败:检查响应内容是否有换行,确保
re.DOTALL参数生效,允许正则匹配多行文本 - 若
ast.literal_eval报错:确认提取的字符串无多余JS语法(比如末尾的分号),保证是纯数组格式 - 若返回空数据:检查
steamLogin会话ID是否有效,或目标物品是否存在价格历史
内容的提问来源于stack exchange,提问作者oujiloc
相关产品推荐
相关产品推荐

