请求协助:解决Stocktwits API JSONDecodeError并转Pandas DataFrame
解决Stocktwits API JSON解码错误并将消息转为Pandas DataFrame
错误原因
JSONDecodeError: Expecting value: line 1 column 1 (char 0) 通常是因为API返回的不是有效JSON数据——大概率是你的请求被服务器识别为非浏览器请求,返回了HTML错误页面或空内容,导致无法解析成JSON。
修复方案及完整代码
1. 添加请求头模拟浏览器访问
给请求添加User-Agent头,模拟正常浏览器行为,避免被拦截:
import requests import pandas as pd # 模拟浏览器请求头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36' } # 发送请求并处理 response = requests.get('https://api.stocktwits.com/api/2/streams/symbol/SPY.json', headers=headers) # 先验证请求是否成功 if response.status_code == 200: # 解析JSON数据 json_data = response.json() # 提取核心消息列表 messages = json_data['messages'] # 转换为Pandas DataFrame df = pd.DataFrame(messages) print(df.head()) else: print(f"请求失败,状态码:{response.status_code}") # 打印部分响应内容排查问题 print("响应预览:", response.text[:500])
2. 可选:提取核心字段
如果不需要消息中的全部字段,可选择性提取关键信息(比如用户名、内容、点赞数):
# 筛选核心字段 filtered_data = [ { '用户名': msg['user']['username'], '消息内容': msg['body'], '发布时间': msg['created_at'], '点赞总数': msg['likes']['total'] } for msg in messages ] df_filtered = pd.DataFrame(filtered_data) print(df_filtered.head())
注意事项
- 可以替换
User-Agent为你当前浏览器的真实UA(通过浏览器开发者工具查看),进一步降低被拦截概率。 - Stocktwits免费API有请求频率限制,短时间内多次请求可能被临时封禁IP,建议控制请求间隔。
内容的提问来源于stack exchange,提问作者Bogdan Titomir
相关产品推荐
相关产品推荐

