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

请求协助:解决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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 08:54:50