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

爬取东方财富网高管持股表仅获500行,如何获取全部2945页数据?

解决东方财富网高管持股数据全量爬取问题

你当前的代码仅请求了API默认的第一页数据(每页返回500条),要获取全部2945页数据,需要利用API的分页参数pageNum和pageSize循环请求所有页面,再合并数据后保存到Excel。

完整实现代码

import pandas as pd
import requests
from tqdm import tqdm  # 可选,用于显示爬取进度,需提前执行 pip install tqdm

# 初始化空DataFrame存储全量数据
all_data = pd.DataFrame()

# API基础配置
base_url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
request_params = {
    "reportName": "RPT_EXECUTIVE_HOLD_DETAILS",
    "columns": "ALL",
    "sortColumns": "CHANGE_DATE",
    "sortTypes": "-1",  # -1为降序,1为升序,可按需调整
    "pageSize": 500,    # 每页最大返回500条,匹配API默认限制
}

total_pages = 2945

# 循环请求每一页
for page in tqdm(range(1, total_pages + 1)):
    request_params["pageNum"] = page
    try:
        # 模拟浏览器请求,避免被拦截
        response = requests.get(
            base_url,
            params=request_params,
            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.raise_for_status()  # 检查请求是否成功
        page_data = response.json().get("result", {}).get("data", [])
        
        if not page_data:
            break  # 无数据时提前终止循环
        
        # 合并当前页数据到总表
        all_data = pd.concat([all_data, pd.DataFrame(page_data)], ignore_index=True)
    except Exception as e:
        print(f"第{page}页请求失败: {str(e)}")
        continue

# 保存全量数据到Excel
all_data.to_excel("G:/ExecutiveHoldings/all_by_date.xlsx", index=False)
print(f"爬取完成,共获取{len(all_data)}条记录")

关键说明

  • 利用pageNum参数遍历所有2945页,每次请求更新页码
  • 添加User-Agent请求头模拟浏览器,降低被反爬拦截的概率
  • 加入异常捕获逻辑,避免单页请求失败导致整个程序中断
  • 通过pd.concat合并所有页面的数据,最终生成完整的单工作表Excel文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 16:46:13