爬取东方财富网高管持股表仅获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
相关产品推荐
相关产品推荐

