Files
MoFin/venv/lib/python3.12/site-packages/akshare/stock/stock_fund_hold.py
T
知微 fa45d8aa5f fix: 小果地址统一node122(兼容LAN+EasyTier)
- health_checklist.json: 192.168.1.122→node122
- ocr_client.py: docstring IP→node122
- docs/market-data-requirements.md: IP→node122
- 所有API调用通过ProxyHandler({})绕过系统代理
  Privoxy对node122:18003返回500,直连正常
2026-06-30 02:56:35 +08:00

216 lines
5.9 KiB
Python

#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
Date: 2021/12/19 13:09
Desc: 东方财富网-数据中心-主力数据-基金持仓
http://data.eastmoney.com/zlsj/2020-06-30-1-2.html
"""
import pandas as pd
import requests
def stock_report_fund_hold(
symbol: str = "基金持仓", date: str = "20210331"
) -> pd.DataFrame:
"""
东方财富网-数据中心-主力数据-基金持仓
http://data.eastmoney.com/zlsj/2020-12-31-1-2.html
:param symbol: choice of {"基金持仓", "QFII持仓", "社保持仓", "券商持仓", "保险持仓", "信托持仓"}
:type symbol: str
:param date: 财报发布日期, xxxx-03-31, xxxx-06-30, xxxx-09-30, xxxx-12-31
:type date: str
:return: 基金持仓数据
:rtype: pandas.DataFrame
"""
symbol_map = {
"基金持仓": "1",
"QFII持仓": "2",
"社保持仓": "3",
"券商持仓": "4",
"保险持仓": "5",
"信托持仓": "6",
}
date = "-".join([date[:4], date[4:6], date[6:]])
url = "http://data.eastmoney.com/dataapi/zlsj/list"
params = {
"date": date,
"type": symbol_map[symbol],
"zjc": "0",
"sortField": "HOULD_NUM",
"sortDirec": "1",
"pageNum": "1",
"pageSize": "500",
"p": "1",
"pageNo": "1",
}
r = requests.get(url, params=params)
data_json = r.json()
total_page = data_json["pages"]
big_df = pd.DataFrame()
for page in range(1, total_page + 1):
params = {
"date": date,
"type": symbol_map[symbol],
"zjc": "0",
"sortField": "HOULD_NUM",
"sortDirec": "1",
"pageNum": page,
"pageSize": "500",
"p": page,
"pageNo": page,
}
r = requests.get(url, params=params)
data_json = r.json()
temp_df = pd.DataFrame(data_json["data"])
big_df = pd.concat([big_df, temp_df], ignore_index=True)
big_df.reset_index(inplace=True)
big_df["index"] = list(range(1, len(big_df) + 1))
big_df.columns = [
"序号",
"_",
"股票简称",
"_",
"_",
"持有基金家数",
"持股总数",
"持股市值",
"_",
"持股变化",
"持股变动数值",
"持股变动比例",
"_",
"_",
"_",
"_",
"_",
"_",
"_",
"_",
"股票代码",
"_",
"_",
]
big_df = big_df[
[
"序号",
"股票代码",
"股票简称",
"持有基金家数",
"持股总数",
"持股市值",
"持股变化",
"持股变动数值",
"持股变动比例",
]
]
return big_df
def stock_report_fund_hold_detail(
symbol: str = "008286", date: str = "20220331"
) -> pd.DataFrame:
"""
东方财富网-数据中心-主力数据-基金持仓-明细
http://data.eastmoney.com/zlsj/ccjj/2020-12-31-008286.html
:param symbol: 基金代码
:type symbol: str
:param date: 财报发布日期, xxxx-03-31, xxxx-06-30, xxxx-09-30, xxxx-12-31
:type date: str
:return: 基金持仓-明细数据
:rtype: pandas.DataFrame
"""
date = "-".join([date[:4], date[4:6], date[6:]])
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
params = {
"sortColumns": "SECURITY_CODE",
"sortTypes": "-1",
"pageSize": "500",
"pageNumber": "1",
"reportName": "RPT_MAINDATA_MAIN_POSITIONDETAILS",
"columns": "ALL",
"quoteColumns": "",
"filter": f"""(HOLDER_CODE="{symbol}")(REPORT_DATE='{date}')""",
"source": "WEB",
"client": "WEB",
}
r = requests.get(url, params=params)
data_json = r.json()
temp_df = pd.DataFrame(data_json["result"]["data"])
temp_df.reset_index(inplace=True)
temp_df["index"] = temp_df.index + 1
temp_df.columns = [
"序号",
"-",
"股票代码",
"-",
"股票简称",
"_",
"_",
"_",
"_",
"_",
"_",
"_",
"_",
"持股数",
"持股市值",
"占总股本比例",
"占流通股本比例",
"_",
"_",
]
temp_df = temp_df[
[
"序号",
"股票代码",
"股票简称",
"持股数",
"持股市值",
"占总股本比例",
"占流通股本比例",
]
]
temp_df["持股数"] = pd.to_numeric(temp_df["持股数"])
temp_df["持股市值"] = pd.to_numeric(temp_df["持股市值"])
temp_df["占总股本比例"] = pd.to_numeric(temp_df["占总股本比例"])
temp_df["占流通股本比例"] = pd.to_numeric(temp_df["占流通股本比例"])
return temp_df
if __name__ == "__main__":
stock_report_fund_hold_df = stock_report_fund_hold(
symbol="基金持仓", date="20200630"
)
print(stock_report_fund_hold_df)
stock_report_fund_hold_df = stock_report_fund_hold(
symbol="QFII持仓", date="20210331"
)
print(stock_report_fund_hold_df)
stock_report_fund_hold_df = stock_report_fund_hold(
symbol="社保持仓", date="20210331"
)
print(stock_report_fund_hold_df)
stock_report_fund_hold_df = stock_report_fund_hold(
symbol="券商持仓", date="20210331"
)
print(stock_report_fund_hold_df)
stock_report_fund_hold_df = stock_report_fund_hold(
symbol="保险持仓", date="20210331"
)
print(stock_report_fund_hold_df)
stock_report_fund_hold_df = stock_report_fund_hold(
symbol="信托持仓", date="20210331"
)
print(stock_report_fund_hold_df)
stock_report_fund_hold_detail_df = stock_report_fund_hold_detail(
symbol="005827", date="20210331"
)
print(stock_report_fund_hold_detail_df)