fa45d8aa5f
- 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,直连正常
102 lines
3.0 KiB
Python
102 lines
3.0 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding:utf-8 -*-
|
|
"""
|
|
Date: 2025/9/14 18:00
|
|
Desc: 基金经理大全
|
|
https://fund.eastmoney.com/manager/default.html
|
|
"""
|
|
|
|
import pandas as pd
|
|
import requests
|
|
|
|
from akshare.utils import demjson
|
|
from akshare.utils.tqdm import get_tqdm
|
|
|
|
|
|
def fund_manager_em() -> pd.DataFrame:
|
|
"""
|
|
天天基金网-基金数据-基金经理大全
|
|
https://fund.eastmoney.com/manager/default.html
|
|
:return: 基金经理大全
|
|
:rtype: pandas.DataFrame
|
|
"""
|
|
big_df = pd.DataFrame()
|
|
url = "https://fund.eastmoney.com/Data/FundDataPortfolio_Interface.aspx"
|
|
params = {
|
|
"dt": "14",
|
|
"mc": "returnjson",
|
|
"ft": "all",
|
|
"pn": "500",
|
|
"pi": "1",
|
|
"sc": "abbname",
|
|
"st": "asc",
|
|
}
|
|
r = requests.get(url, params=params)
|
|
data_text = r.text
|
|
data_json = demjson.decode(data_text.strip("var returnjson= "))
|
|
total_page = data_json["pages"]
|
|
tqdm = get_tqdm()
|
|
for page in tqdm(range(1, total_page + 1), leave=False):
|
|
params.update(
|
|
{
|
|
"pi": page,
|
|
}
|
|
)
|
|
r = requests.get(url, params=params)
|
|
data_text = r.text
|
|
data_json = demjson.decode(data_text.strip("var returnjson= "))
|
|
temp_df = pd.DataFrame(data_json["data"])
|
|
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
big_df.reset_index(inplace=True)
|
|
big_df["index"] = range(1, len(big_df) + 1)
|
|
big_df.columns = [
|
|
"序号",
|
|
"_",
|
|
"姓名",
|
|
"_",
|
|
"所属公司",
|
|
"现任基金代码",
|
|
"现任基金",
|
|
"累计从业时间",
|
|
"现任基金最佳回报",
|
|
"_",
|
|
"_",
|
|
"现任基金资产总规模",
|
|
"_",
|
|
]
|
|
big_df = big_df[
|
|
[
|
|
"序号",
|
|
"姓名",
|
|
"所属公司",
|
|
"现任基金代码",
|
|
"现任基金",
|
|
"累计从业时间",
|
|
"现任基金资产总规模",
|
|
"现任基金最佳回报",
|
|
]
|
|
]
|
|
big_df["现任基金最佳回报"] = (
|
|
big_df["现任基金最佳回报"].str.split("%", expand=True).iloc[:, 0]
|
|
)
|
|
big_df["现任基金资产总规模"] = (
|
|
big_df["现任基金资产总规模"].str.split("亿元", expand=True).iloc[:, 0]
|
|
)
|
|
big_df["累计从业时间"] = pd.to_numeric(big_df["累计从业时间"], errors="coerce")
|
|
big_df["现任基金最佳回报"] = pd.to_numeric(
|
|
big_df["现任基金最佳回报"], errors="coerce"
|
|
)
|
|
big_df["现任基金资产总规模"] = pd.to_numeric(
|
|
big_df["现任基金资产总规模"], errors="coerce"
|
|
)
|
|
big_df["现任基金代码"] = big_df["现任基金代码"].apply(lambda x: x.split(","))
|
|
big_df["现任基金"] = big_df["现任基金"].apply(lambda x: x.split(","))
|
|
big_df = big_df.explode(column=["现任基金代码", "现任基金"])
|
|
big_df.reset_index(drop=True, inplace=True)
|
|
return big_df
|
|
|
|
|
|
if __name__ == "__main__":
|
|
fund_manager_em_df = fund_manager_em()
|
|
print(fund_manager_em_df)
|