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

Pandas read_html仅返回表头,如何获取完整数据及交互日期参数?

解决Infomoney IFNC历史数据获取问题

问题原因

目标页面的历史数据是通过AJAX动态加载的,页面初始HTML仅包含表头,实际数据由浏览器单独请求后端API获取。直接请求页面URL或错误的接口地址都无法拿到完整数据。

解决步骤

1. 定位真实API接口

通过浏览器开发者工具(F12 → Network → XHR/Fetch)抓包,可发现实际数据请求发送到以下地址:
https://www.infomoney.com.br/cotacoes/indices/history/

2. 构造正确的请求参数与头部

  • 参数需使用startDate和endDate(而非你之前用的initialDate/finalDate),日期格式为YYYY-MM-DD
  • 添加浏览器请求头模拟正常访问,避免被反爬拦截

3. 代码实现

import requests
import pandas as pd

# 真实API地址
api_url = "https://www.infomoney.com.br/cotacoes/indices/history/"

# 请求参数:可修改startDate和endDate来筛选日期范围
params = {
    "symbol": "IFNC",
    "startDate": "2022-01-01",
    "endDate": "2022-12-31",
    "page": 0,
    "size": 99999  # 单次请求最大数据量
}

# 模拟浏览器请求头
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",
    "Referer": "https://www.infomoney.com.br/cotacoes/b3/indice/ifnc/historico/"
}

# 发送POST请求
response = requests.post(api_url, json=params, headers=headers)
response.raise_for_status()  # 检查请求是否成功

# 解析JSON响应并转为DataFrame
data = response.json()
df = pd.DataFrame(data["data"])

# 查看结果(可按需调整列名显示)
print(df[["date", "open", "close", "variation", "low", "high", "volume"]])

日期参数交互说明

直接修改params中的startDate和endDate即可调整数据的日期范围,注意必须遵循YYYY-MM-DD的格式(例如"2023-01-01"至"2023-12-31")。

内容的提问来源于stack exchange,提问作者EduardoT80

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 18:30:23