akshare 1.14.88__py3-none-any.whl → 1.14.89__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of akshare might be problematic. Click here for more details.
- akshare/__init__.py +2 -1
- akshare/bond/bond_china.py +38 -39
- akshare/fund/fund_em.py +181 -155
- akshare/stock_feature/stock_gdhs.py +73 -49
- {akshare-1.14.88.dist-info → akshare-1.14.89.dist-info}/METADATA +1 -1
- {akshare-1.14.88.dist-info → akshare-1.14.89.dist-info}/RECORD +9 -9
- {akshare-1.14.88.dist-info → akshare-1.14.89.dist-info}/LICENSE +0 -0
- {akshare-1.14.88.dist-info → akshare-1.14.89.dist-info}/WHEEL +0 -0
- {akshare-1.14.88.dist-info → akshare-1.14.89.dist-info}/top_level.txt +0 -0
akshare/__init__.py
CHANGED
|
@@ -2899,9 +2899,10 @@ amac_manager_cancelled_info # 中国证券投资基金业协会-信息公示-诚
|
|
|
2899
2899
|
1.14.86 fix: fix stock_comment_detail_scrd_focus_em interface
|
|
2900
2900
|
1.14.87 fix: fix stock_hot_search_baidu interface
|
|
2901
2901
|
1.14.88 fix: fix stock_hot_rank_relate_em interface
|
|
2902
|
+
1.14.89 fix: fix bond_spot_deal interface
|
|
2902
2903
|
"""
|
|
2903
2904
|
|
|
2904
|
-
__version__ = "1.14.
|
|
2905
|
+
__version__ = "1.14.89"
|
|
2905
2906
|
__author__ = "AKFamily"
|
|
2906
2907
|
|
|
2907
2908
|
import sys
|
akshare/bond/bond_china.py
CHANGED
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date: 2024/
|
|
4
|
+
Date: 2024/10/1 17:00
|
|
5
5
|
Desc: 中国外汇交易中心暨全国银行间同业拆借中心
|
|
6
6
|
中国外汇交易中心暨全国银行间同业拆借中心-市场数据-债券市场行情-现券市场做市报价
|
|
7
7
|
中国外汇交易中心暨全国银行间同业拆借中心-市场数据-债券市场行情-现券市场成交行情
|
|
8
8
|
https://www.chinamoney.com.cn/chinese/mkdatabond/
|
|
9
9
|
"""
|
|
10
|
+
|
|
10
11
|
from io import StringIO
|
|
11
12
|
|
|
12
13
|
import pandas as pd
|
|
13
14
|
import requests
|
|
14
15
|
|
|
15
16
|
from akshare.bond.bond_china_money import bond_china_close_return_map
|
|
17
|
+
from akshare.utils.cons import headers
|
|
16
18
|
|
|
17
19
|
|
|
18
20
|
def bond_spot_quote() -> pd.DataFrame:
|
|
@@ -24,9 +26,6 @@ def bond_spot_quote() -> pd.DataFrame:
|
|
|
24
26
|
"""
|
|
25
27
|
bond_china_close_return_map()
|
|
26
28
|
url = "https://www.chinamoney.com.cn/ags/ms/cm-u-md-bond/CbMktMakQuot"
|
|
27
|
-
headers = {
|
|
28
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36",
|
|
29
|
-
}
|
|
30
29
|
payload = {
|
|
31
30
|
"flag": "1",
|
|
32
31
|
"lang": "cn",
|
|
@@ -61,16 +60,24 @@ def bond_spot_quote() -> pd.DataFrame:
|
|
|
61
60
|
"买入/卖出收益率",
|
|
62
61
|
]
|
|
63
62
|
]
|
|
64
|
-
temp_df["买入净价"] =
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
temp_df["
|
|
63
|
+
temp_df["买入净价"] = (
|
|
64
|
+
temp_df["买入/卖出净价"].str.split("/", expand=True).iloc[:, 0]
|
|
65
|
+
)
|
|
66
|
+
temp_df["卖出净价"] = (
|
|
67
|
+
temp_df["买入/卖出净价"].str.split("/", expand=True).iloc[:, 1]
|
|
68
|
+
)
|
|
69
|
+
temp_df["买入收益率"] = (
|
|
70
|
+
temp_df["买入/卖出收益率"].str.split("/", expand=True).iloc[:, 0]
|
|
71
|
+
)
|
|
72
|
+
temp_df["卖出收益率"] = (
|
|
73
|
+
temp_df["买入/卖出收益率"].str.split("/", expand=True).iloc[:, 1]
|
|
74
|
+
)
|
|
68
75
|
del temp_df["买入/卖出净价"]
|
|
69
76
|
del temp_df["买入/卖出收益率"]
|
|
70
|
-
temp_df[
|
|
71
|
-
temp_df[
|
|
72
|
-
temp_df[
|
|
73
|
-
temp_df[
|
|
77
|
+
temp_df["买入净价"] = pd.to_numeric(temp_df["买入净价"], errors="coerce")
|
|
78
|
+
temp_df["卖出净价"] = pd.to_numeric(temp_df["卖出净价"], errors="coerce")
|
|
79
|
+
temp_df["买入收益率"] = pd.to_numeric(temp_df["买入收益率"], errors="coerce")
|
|
80
|
+
temp_df["卖出收益率"] = pd.to_numeric(temp_df["卖出收益率"], errors="coerce")
|
|
74
81
|
return temp_df
|
|
75
82
|
|
|
76
83
|
|
|
@@ -82,9 +89,6 @@ def bond_spot_deal() -> pd.DataFrame:
|
|
|
82
89
|
:rtype: pandas.DataFrame
|
|
83
90
|
"""
|
|
84
91
|
url = "https://www.chinamoney.com.cn/ags/ms/cm-u-md-bond/CbtPri"
|
|
85
|
-
headers = {
|
|
86
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36",
|
|
87
|
-
}
|
|
88
92
|
payload = {
|
|
89
93
|
"flag": "1",
|
|
90
94
|
"lang": "cn",
|
|
@@ -127,16 +131,16 @@ def bond_spot_deal() -> pd.DataFrame:
|
|
|
127
131
|
"交易量",
|
|
128
132
|
]
|
|
129
133
|
]
|
|
130
|
-
temp_df[
|
|
131
|
-
temp_df[
|
|
132
|
-
temp_df[
|
|
133
|
-
temp_df[
|
|
134
|
-
temp_df[
|
|
134
|
+
temp_df["成交净价"] = pd.to_numeric(temp_df["成交净价"], errors="coerce")
|
|
135
|
+
temp_df["最新收益率"] = pd.to_numeric(temp_df["最新收益率"], errors="coerce")
|
|
136
|
+
temp_df["涨跌"] = pd.to_numeric(temp_df["涨跌"], errors="coerce")
|
|
137
|
+
temp_df["加权收益率"] = pd.to_numeric(temp_df["加权收益率"], errors="coerce")
|
|
138
|
+
temp_df["交易量"] = pd.to_numeric(temp_df["交易量"], errors="coerce")
|
|
135
139
|
return temp_df
|
|
136
140
|
|
|
137
141
|
|
|
138
142
|
def bond_china_yield(
|
|
139
|
-
|
|
143
|
+
start_date: str = "20200204", end_date: str = "20210124"
|
|
140
144
|
) -> pd.DataFrame:
|
|
141
145
|
"""
|
|
142
146
|
中国债券信息网-国债及其他债券收益率曲线
|
|
@@ -152,28 +156,25 @@ def bond_china_yield(
|
|
|
152
156
|
"""
|
|
153
157
|
url = "https://yield.chinabond.com.cn/cbweb-pbc-web/pbc/historyQuery"
|
|
154
158
|
params = {
|
|
155
|
-
"startDate":
|
|
156
|
-
"endDate":
|
|
159
|
+
"startDate": "-".join([start_date[:4], start_date[4:6], start_date[6:]]),
|
|
160
|
+
"endDate": "-".join([end_date[:4], end_date[4:6], end_date[6:]]),
|
|
157
161
|
"gjqx": "0",
|
|
158
162
|
"qxId": "ycqx",
|
|
159
163
|
"locale": "cn_ZH",
|
|
160
164
|
}
|
|
161
|
-
headers = {
|
|
162
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36",
|
|
163
|
-
}
|
|
164
165
|
res = requests.get(url, params=params, headers=headers)
|
|
165
166
|
data_text = res.text.replace(" ", "")
|
|
166
167
|
data_df = pd.read_html(StringIO(data_text), header=0)[1]
|
|
167
|
-
data_df[
|
|
168
|
-
data_df[
|
|
169
|
-
data_df[
|
|
170
|
-
data_df[
|
|
171
|
-
data_df[
|
|
172
|
-
data_df[
|
|
173
|
-
data_df[
|
|
174
|
-
data_df[
|
|
175
|
-
data_df[
|
|
176
|
-
data_df.sort_values(by=
|
|
168
|
+
data_df["日期"] = pd.to_datetime(data_df["日期"], errors="coerce").dt.date
|
|
169
|
+
data_df["3月"] = pd.to_numeric(data_df["3月"], errors="coerce")
|
|
170
|
+
data_df["6月"] = pd.to_numeric(data_df["6月"], errors="coerce")
|
|
171
|
+
data_df["1年"] = pd.to_numeric(data_df["1年"], errors="coerce")
|
|
172
|
+
data_df["3年"] = pd.to_numeric(data_df["3年"], errors="coerce")
|
|
173
|
+
data_df["5年"] = pd.to_numeric(data_df["5年"], errors="coerce")
|
|
174
|
+
data_df["7年"] = pd.to_numeric(data_df["7年"], errors="coerce")
|
|
175
|
+
data_df["10年"] = pd.to_numeric(data_df["10年"], errors="coerce")
|
|
176
|
+
data_df["30年"] = pd.to_numeric(data_df["30年"], errors="coerce")
|
|
177
|
+
data_df.sort_values(by="日期", inplace=True)
|
|
177
178
|
data_df.reset_index(inplace=True, drop=True)
|
|
178
179
|
return data_df
|
|
179
180
|
|
|
@@ -185,7 +186,5 @@ if __name__ == "__main__":
|
|
|
185
186
|
bond_spot_deal_df = bond_spot_deal()
|
|
186
187
|
print(bond_spot_deal_df)
|
|
187
188
|
|
|
188
|
-
bond_china_yield_df = bond_china_yield(
|
|
189
|
-
start_date="20210201", end_date="20220201"
|
|
190
|
-
)
|
|
189
|
+
bond_china_yield_df = bond_china_yield(start_date="20210201", end_date="20220201")
|
|
191
190
|
print(bond_china_yield_df)
|
akshare/fund/fund_em.py
CHANGED
|
@@ -1,14 +1,20 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2024/10/1 18:10
|
|
5
5
|
Desc: 东方财富网站-天天基金网-基金数据-开放式基金净值
|
|
6
6
|
https://fund.eastmoney.com/manager/default.html#dt14;mcreturnjson;ftall;pn20;pi1;scabbname;stasc
|
|
7
|
-
1.基金经理基本数据, 建议包含:基金经理代码,基金经理姓名,从业起始日期,现任基金公司,管理资产总规模,上述数据可在"基金经理列表:
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
1.基金经理基本数据, 建议包含:基金经理代码,基金经理姓名,从业起始日期,现任基金公司,管理资产总规模,上述数据可在"基金经理列表:
|
|
8
|
+
https://fund.eastmoney.com/manager/default.html#dt14;mcreturnjson;ftall;pn20;pi1;scabbname;stasc 和
|
|
9
|
+
"基金经理理档案如:https://fund.eastmoney.com/manager/30040164.html 获取.
|
|
10
|
+
2.基金经理任职数据:可调取全部或特定经理,管理的基金数据,建议包含:基金经理代码,基金经理姓名,基金代码,基金简称,
|
|
11
|
+
经理位次(在当前基金的经理中排第几位),起始任职时间,截止任职时间,任职回报.在特定基金的经理信息中可以获取如:
|
|
12
|
+
https://fundf10.eastmoney.com/jjjl_001810.html
|
|
13
|
+
3.在接口:fund_basic"公募基金列表"增加数据"基金经理代码"(或第一基金经理代码),
|
|
14
|
+
"基金经理姓名"(或第一基金经理姓名),"当前基金经理人数","当前经理任职起始时间".
|
|
10
15
|
用户ID:269993
|
|
11
16
|
"""
|
|
17
|
+
|
|
12
18
|
import json
|
|
13
19
|
import time
|
|
14
20
|
from io import StringIO
|
|
@@ -17,6 +23,7 @@ import pandas as pd
|
|
|
17
23
|
import requests
|
|
18
24
|
|
|
19
25
|
from akshare.utils import demjson
|
|
26
|
+
from akshare.utils.cons import headers
|
|
20
27
|
|
|
21
28
|
|
|
22
29
|
def fund_purchase_em() -> pd.DataFrame:
|
|
@@ -26,10 +33,7 @@ def fund_purchase_em() -> pd.DataFrame:
|
|
|
26
33
|
:return: 基金申购状态
|
|
27
34
|
:rtype: pandas.DataFrame
|
|
28
35
|
"""
|
|
29
|
-
url = "
|
|
30
|
-
headers = {
|
|
31
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
|
|
32
|
-
}
|
|
36
|
+
url = "https://fund.eastmoney.com/Data/Fund_JJJZ_Data.aspx"
|
|
33
37
|
params = {
|
|
34
38
|
"t": "8",
|
|
35
39
|
"page": "1,50000",
|
|
@@ -75,12 +79,18 @@ def fund_purchase_em() -> pd.DataFrame:
|
|
|
75
79
|
"手续费",
|
|
76
80
|
]
|
|
77
81
|
]
|
|
78
|
-
temp_df["下一开放日"] = pd.to_datetime(
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
temp_df["
|
|
82
|
+
temp_df["下一开放日"] = pd.to_datetime(
|
|
83
|
+
temp_df["下一开放日"], errors="coerce"
|
|
84
|
+
).dt.date
|
|
85
|
+
temp_df["最新净值/万份收益"] = pd.to_numeric(
|
|
86
|
+
temp_df["最新净值/万份收益"], errors="coerce"
|
|
87
|
+
)
|
|
88
|
+
temp_df["购买起点"] = pd.to_numeric(temp_df["购买起点"], errors="coerce")
|
|
89
|
+
temp_df["日累计限定金额"] = pd.to_numeric(
|
|
90
|
+
temp_df["日累计限定金额"], errors="coerce"
|
|
91
|
+
)
|
|
82
92
|
temp_df["手续费"] = temp_df["手续费"].str.strip("%")
|
|
83
|
-
temp_df["手续费"] = pd.to_numeric(temp_df["手续费"])
|
|
93
|
+
temp_df["手续费"] = pd.to_numeric(temp_df["手续费"], errors="coerce")
|
|
84
94
|
return temp_df
|
|
85
95
|
|
|
86
96
|
|
|
@@ -91,12 +101,9 @@ def fund_name_em() -> pd.DataFrame:
|
|
|
91
101
|
:return: 所有基金的名称和类型
|
|
92
102
|
:rtype: pandas.DataFrame
|
|
93
103
|
"""
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
url = "http://fund.eastmoney.com/js/fundcode_search.js"
|
|
98
|
-
res = requests.get(url, headers=headers)
|
|
99
|
-
text_data = res.text
|
|
104
|
+
url = "https://fund.eastmoney.com/js/fundcode_search.js"
|
|
105
|
+
r = requests.get(url, headers=headers)
|
|
106
|
+
text_data = r.text
|
|
100
107
|
data_json = demjson.decode(text_data.strip("var r = ")[:-1])
|
|
101
108
|
temp_df = pd.DataFrame(data_json)
|
|
102
109
|
temp_df.columns = ["基金代码", "拼音缩写", "基金简称", "基金类型", "拼音全称"]
|
|
@@ -104,7 +111,7 @@ def fund_name_em() -> pd.DataFrame:
|
|
|
104
111
|
|
|
105
112
|
|
|
106
113
|
def fund_info_index_em(
|
|
107
|
-
|
|
114
|
+
symbol: str = "沪深指数", indicator: str = "被动指数型"
|
|
108
115
|
) -> pd.DataFrame:
|
|
109
116
|
"""
|
|
110
117
|
东方财富网站-天天基金网-基金数据-基金信息-指数型
|
|
@@ -131,7 +138,7 @@ def fund_info_index_em(
|
|
|
131
138
|
"被动指数型": "051",
|
|
132
139
|
"增强指数型": "052",
|
|
133
140
|
}
|
|
134
|
-
url = "
|
|
141
|
+
url = "https://api.fund.eastmoney.com/FundTradeRank/GetRankList"
|
|
135
142
|
if symbol in {"股票指数", "债券指数"}:
|
|
136
143
|
params = {
|
|
137
144
|
"ft": "zs",
|
|
@@ -180,8 +187,9 @@ def fund_info_index_em(
|
|
|
180
187
|
"Host": "api.fund.eastmoney.com",
|
|
181
188
|
"Pragma": "no-cache",
|
|
182
189
|
"Proxy-Connection": "keep-alive",
|
|
183
|
-
"Referer": "
|
|
184
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
190
|
+
"Referer": "https://fund.eastmoney.com/",
|
|
191
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
192
|
+
"Chrome/103.0.0.0 Safari/537.36",
|
|
185
193
|
}
|
|
186
194
|
r = requests.get(url, params=params, headers=headers)
|
|
187
195
|
data_json = r.json()
|
|
@@ -241,19 +249,18 @@ def fund_info_index_em(
|
|
|
241
249
|
temp_df["跟踪标的"] = symbol
|
|
242
250
|
temp_df["跟踪方式"] = indicator
|
|
243
251
|
|
|
244
|
-
temp_df["单位净值"] = pd.to_numeric(temp_df["单位净值"])
|
|
245
|
-
temp_df["日增长率"] = pd.to_numeric(temp_df["日增长率"])
|
|
246
|
-
temp_df["近1周"] = pd.to_numeric(temp_df["近1周"])
|
|
247
|
-
temp_df["近1月"] = pd.to_numeric(temp_df["近1月"])
|
|
248
|
-
temp_df["近3月"] = pd.to_numeric(temp_df["近3月"])
|
|
249
|
-
temp_df["近6月"] = pd.to_numeric(temp_df["近6月"])
|
|
250
|
-
temp_df["近1年"] = pd.to_numeric(temp_df["近1年"])
|
|
251
|
-
temp_df["近2年"] = pd.to_numeric(temp_df["近2年"])
|
|
252
|
-
temp_df["近3年"] = pd.to_numeric(temp_df["近3年"])
|
|
253
|
-
temp_df["今年来"] = pd.to_numeric(temp_df["今年来"])
|
|
254
|
-
temp_df["成立来"] = pd.to_numeric(temp_df["成立来"])
|
|
255
|
-
temp_df["手续费"] = pd.to_numeric(temp_df["手续费"])
|
|
256
|
-
|
|
252
|
+
temp_df["单位净值"] = pd.to_numeric(temp_df["单位净值"], errors="coerce")
|
|
253
|
+
temp_df["日增长率"] = pd.to_numeric(temp_df["日增长率"], errors="coerce")
|
|
254
|
+
temp_df["近1周"] = pd.to_numeric(temp_df["近1周"], errors="coerce")
|
|
255
|
+
temp_df["近1月"] = pd.to_numeric(temp_df["近1月"], errors="coerce")
|
|
256
|
+
temp_df["近3月"] = pd.to_numeric(temp_df["近3月"], errors="coerce")
|
|
257
|
+
temp_df["近6月"] = pd.to_numeric(temp_df["近6月"], errors="coerce")
|
|
258
|
+
temp_df["近1年"] = pd.to_numeric(temp_df["近1年"], errors="coerce")
|
|
259
|
+
temp_df["近2年"] = pd.to_numeric(temp_df["近2年"], errors="coerce")
|
|
260
|
+
temp_df["近3年"] = pd.to_numeric(temp_df["近3年"], errors="coerce")
|
|
261
|
+
temp_df["今年来"] = pd.to_numeric(temp_df["今年来"], errors="coerce")
|
|
262
|
+
temp_df["成立来"] = pd.to_numeric(temp_df["成立来"], errors="coerce")
|
|
263
|
+
temp_df["手续费"] = pd.to_numeric(temp_df["手续费"], errors="coerce")
|
|
257
264
|
return temp_df
|
|
258
265
|
|
|
259
266
|
|
|
@@ -264,10 +271,7 @@ def fund_open_fund_daily_em() -> pd.DataFrame:
|
|
|
264
271
|
:return: 当前交易日的所有开放式基金净值数据
|
|
265
272
|
:rtype: pandas.DataFrame
|
|
266
273
|
"""
|
|
267
|
-
|
|
268
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
|
|
269
|
-
}
|
|
270
|
-
url = "http://fund.eastmoney.com/Data/Fund_JJJZ_Data.aspx"
|
|
274
|
+
url = "https://fund.eastmoney.com/Data/Fund_JJJZ_Data.aspx"
|
|
271
275
|
params = {
|
|
272
276
|
"t": "1",
|
|
273
277
|
"lx": "1",
|
|
@@ -327,11 +331,11 @@ def fund_open_fund_daily_em() -> pd.DataFrame:
|
|
|
327
331
|
|
|
328
332
|
|
|
329
333
|
def fund_open_fund_info_em(
|
|
330
|
-
|
|
334
|
+
symbol: str = "710001", indicator: str = "单位净值走势", period: str = "成立来"
|
|
331
335
|
) -> pd.DataFrame:
|
|
332
336
|
"""
|
|
333
337
|
东方财富网-天天基金网-基金数据-开放式基金净值
|
|
334
|
-
https://fund.eastmoney.com/fund.html
|
|
338
|
+
https://fund.eastmoney.com/fund.html
|
|
335
339
|
:param symbol: 基金代码; 可以通过调用 ak.fund_open_fund_daily_em() 获取所有开放式基金代码
|
|
336
340
|
:type symbol: str
|
|
337
341
|
:param indicator: 需要获取的指标
|
|
@@ -341,11 +345,9 @@ def fund_open_fund_info_em(
|
|
|
341
345
|
:return: 指定基金指定指标的数据
|
|
342
346
|
:rtype: pandas.DataFrame
|
|
343
347
|
"""
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
|
|
348
|
-
}
|
|
348
|
+
from akshare.utils.cons import headers
|
|
349
|
+
|
|
350
|
+
url = f"https://fund.eastmoney.com/pingzhongdata/{symbol}.js" # 各类数据都在里面
|
|
349
351
|
r = requests.get(url, headers=headers)
|
|
350
352
|
data_text = r.text
|
|
351
353
|
|
|
@@ -354,19 +356,20 @@ def fund_open_fund_info_em(
|
|
|
354
356
|
try:
|
|
355
357
|
data_json = demjson.decode(
|
|
356
358
|
data_text[
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
359
|
+
data_text.find("Data_netWorthTrend") + 21 : data_text.find(
|
|
360
|
+
"Data_ACWorthTrend"
|
|
361
|
+
)
|
|
362
|
+
- 15
|
|
360
363
|
]
|
|
361
364
|
)
|
|
362
|
-
except:
|
|
365
|
+
except: # noqa: E722
|
|
363
366
|
return pd.DataFrame()
|
|
364
367
|
temp_df = pd.DataFrame(data_json)
|
|
365
368
|
if temp_df.empty:
|
|
366
369
|
return pd.DataFrame()
|
|
367
|
-
temp_df["x"] = pd.to_datetime(
|
|
368
|
-
|
|
369
|
-
)
|
|
370
|
+
temp_df["x"] = pd.to_datetime(temp_df["x"], unit="ms", utc=True).dt.tz_convert(
|
|
371
|
+
"Asia/Shanghai"
|
|
372
|
+
)
|
|
370
373
|
temp_df["x"] = temp_df["x"].dt.date
|
|
371
374
|
temp_df.columns = [
|
|
372
375
|
"净值日期",
|
|
@@ -381,7 +384,9 @@ def fund_open_fund_info_em(
|
|
|
381
384
|
"日增长率",
|
|
382
385
|
]
|
|
383
386
|
]
|
|
384
|
-
temp_df["净值日期"] = pd.to_datetime(
|
|
387
|
+
temp_df["净值日期"] = pd.to_datetime(
|
|
388
|
+
temp_df["净值日期"], errors="coerce"
|
|
389
|
+
).dt.date
|
|
385
390
|
temp_df["单位净值"] = pd.to_numeric(temp_df["单位净值"], errors="coerce")
|
|
386
391
|
temp_df["日增长率"] = pd.to_numeric(temp_df["日增长率"], errors="coerce")
|
|
387
392
|
return temp_df
|
|
@@ -391,20 +396,21 @@ def fund_open_fund_info_em(
|
|
|
391
396
|
try:
|
|
392
397
|
data_json = demjson.decode(
|
|
393
398
|
data_text[
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
399
|
+
data_text.find("Data_ACWorthTrend") + 20 : data_text.find(
|
|
400
|
+
"Data_grandTotal"
|
|
401
|
+
)
|
|
402
|
+
- 16
|
|
397
403
|
]
|
|
398
404
|
)
|
|
399
|
-
except:
|
|
405
|
+
except: # noqa: E722
|
|
400
406
|
return pd.DataFrame()
|
|
401
407
|
temp_df = pd.DataFrame(data_json)
|
|
402
408
|
if temp_df.empty:
|
|
403
409
|
return pd.DataFrame()
|
|
404
410
|
temp_df.columns = ["x", "y"]
|
|
405
|
-
temp_df["x"] = pd.to_datetime(
|
|
406
|
-
|
|
407
|
-
)
|
|
411
|
+
temp_df["x"] = pd.to_datetime(temp_df["x"], unit="ms", utc=True).dt.tz_convert(
|
|
412
|
+
"Asia/Shanghai"
|
|
413
|
+
)
|
|
408
414
|
temp_df["x"] = temp_df["x"].dt.date
|
|
409
415
|
temp_df.columns = [
|
|
410
416
|
"净值日期",
|
|
@@ -416,16 +422,16 @@ def fund_open_fund_info_em(
|
|
|
416
422
|
"累计净值",
|
|
417
423
|
]
|
|
418
424
|
]
|
|
419
|
-
temp_df["净值日期"] = pd.to_datetime(
|
|
425
|
+
temp_df["净值日期"] = pd.to_datetime(
|
|
426
|
+
temp_df["净值日期"], errors="coerce"
|
|
427
|
+
).dt.date
|
|
420
428
|
temp_df["累计净值"] = pd.to_numeric(temp_df["累计净值"], errors="coerce")
|
|
421
429
|
return temp_df
|
|
422
430
|
|
|
423
431
|
# 累计收益率走势
|
|
424
432
|
if indicator == "累计收益率走势":
|
|
425
433
|
url = "https://api.fund.eastmoney.com/pinzhong/LJSYLZS"
|
|
426
|
-
headers = {
|
|
427
|
-
'Referer': 'https://fund.eastmoney.com/'
|
|
428
|
-
}
|
|
434
|
+
headers = {"Referer": "https://fund.eastmoney.com/"}
|
|
429
435
|
period_map = {
|
|
430
436
|
"1月": "m",
|
|
431
437
|
"3月": "q",
|
|
@@ -437,14 +443,14 @@ def fund_open_fund_info_em(
|
|
|
437
443
|
"成立来": "se",
|
|
438
444
|
}
|
|
439
445
|
params = {
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
446
|
+
"fundCode": symbol,
|
|
447
|
+
"indexcode": "000300",
|
|
448
|
+
"type": period_map[period],
|
|
449
|
+
"_": "1704012866899",
|
|
444
450
|
}
|
|
445
451
|
r = requests.get(url, params=params, headers=headers)
|
|
446
452
|
data_json = r.json()
|
|
447
|
-
temp_df = pd.DataFrame(data_json[
|
|
453
|
+
temp_df = pd.DataFrame(data_json["Data"][0]["data"])
|
|
448
454
|
temp_df.columns = ["日期", "累计收益率"]
|
|
449
455
|
temp_df["日期"] = pd.to_datetime(
|
|
450
456
|
temp_df["日期"], unit="ms", utc=True
|
|
@@ -457,15 +463,16 @@ def fund_open_fund_info_em(
|
|
|
457
463
|
if indicator == "同类排名走势":
|
|
458
464
|
data_json = demjson.decode(
|
|
459
465
|
data_text[
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
466
|
+
data_text.find("Data_rateInSimilarType") + 25 : data_text.find(
|
|
467
|
+
"Data_rateInSimilarPersent"
|
|
468
|
+
)
|
|
469
|
+
- 16
|
|
463
470
|
]
|
|
464
471
|
)
|
|
465
472
|
temp_df = pd.DataFrame(data_json)
|
|
466
|
-
temp_df["x"] = pd.to_datetime(
|
|
467
|
-
|
|
468
|
-
)
|
|
473
|
+
temp_df["x"] = pd.to_datetime(temp_df["x"], unit="ms", utc=True).dt.tz_convert(
|
|
474
|
+
"Asia/Shanghai"
|
|
475
|
+
)
|
|
469
476
|
temp_df["x"] = temp_df["x"].dt.date
|
|
470
477
|
temp_df.columns = [
|
|
471
478
|
"报告日期",
|
|
@@ -479,25 +486,32 @@ def fund_open_fund_info_em(
|
|
|
479
486
|
"总排名-每日近三月排名",
|
|
480
487
|
]
|
|
481
488
|
]
|
|
482
|
-
temp_df["报告日期"] = pd.to_datetime(
|
|
483
|
-
|
|
484
|
-
|
|
489
|
+
temp_df["报告日期"] = pd.to_datetime(
|
|
490
|
+
temp_df["报告日期"], errors="coerce"
|
|
491
|
+
).dt.date
|
|
492
|
+
temp_df["同类型排名-每日近三月排名"] = pd.to_numeric(
|
|
493
|
+
temp_df["同类型排名-每日近三月排名"], errors="coerce"
|
|
494
|
+
)
|
|
495
|
+
temp_df["总排名-每日近三月排名"] = pd.to_numeric(
|
|
496
|
+
temp_df["总排名-每日近三月排名"], errors="coerce"
|
|
497
|
+
)
|
|
485
498
|
return temp_df
|
|
486
499
|
|
|
487
500
|
# 同类排名百分比
|
|
488
501
|
if indicator == "同类排名百分比":
|
|
489
502
|
data_json = demjson.decode(
|
|
490
503
|
data_text[
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
504
|
+
data_text.find("Data_rateInSimilarPersent") + 26 : data_text.find(
|
|
505
|
+
"Data_fluctuationScale"
|
|
506
|
+
)
|
|
507
|
+
- 23
|
|
494
508
|
]
|
|
495
509
|
)
|
|
496
510
|
temp_df = pd.DataFrame(data_json)
|
|
497
511
|
temp_df.columns = ["x", "y"]
|
|
498
|
-
temp_df["x"] = pd.to_datetime(
|
|
499
|
-
|
|
500
|
-
)
|
|
512
|
+
temp_df["x"] = pd.to_datetime(temp_df["x"], unit="ms", utc=True).dt.tz_convert(
|
|
513
|
+
"Asia/Shanghai"
|
|
514
|
+
)
|
|
501
515
|
temp_df["x"] = temp_df["x"].dt.date
|
|
502
516
|
temp_df.columns = [
|
|
503
517
|
"报告日期",
|
|
@@ -509,7 +523,9 @@ def fund_open_fund_info_em(
|
|
|
509
523
|
"同类型排名-每日近3月收益排名百分比",
|
|
510
524
|
]
|
|
511
525
|
]
|
|
512
|
-
temp_df["报告日期"] = pd.to_datetime(
|
|
526
|
+
temp_df["报告日期"] = pd.to_datetime(
|
|
527
|
+
temp_df["报告日期"], errors="coerce"
|
|
528
|
+
).dt.date
|
|
513
529
|
temp_df["同类型排名-每日近3月收益排名百分比"] = pd.to_numeric(
|
|
514
530
|
temp_df["同类型排名-每日近3月收益排名百分比"], errors="coerce"
|
|
515
531
|
)
|
|
@@ -517,21 +533,21 @@ def fund_open_fund_info_em(
|
|
|
517
533
|
|
|
518
534
|
# 分红送配详情
|
|
519
535
|
if indicator == "分红送配详情":
|
|
520
|
-
url = f"
|
|
536
|
+
url = f"https://fundf10.eastmoney.com/fhsp_{symbol}.html"
|
|
521
537
|
r = requests.get(url, headers=headers)
|
|
522
538
|
temp_df = pd.read_html(StringIO(r.text))[1]
|
|
523
539
|
if temp_df.iloc[0, 1] == "暂无分红信息!":
|
|
524
|
-
return
|
|
540
|
+
return pd.DataFrame()
|
|
525
541
|
else:
|
|
526
542
|
return temp_df
|
|
527
543
|
|
|
528
544
|
# 拆分详情
|
|
529
545
|
if indicator == "拆分详情":
|
|
530
|
-
url = f"
|
|
546
|
+
url = f"https://fundf10.eastmoney.com/fhsp_{symbol}.html"
|
|
531
547
|
r = requests.get(url, headers=headers)
|
|
532
548
|
temp_df = pd.read_html(StringIO(r.text))[2]
|
|
533
549
|
if temp_df.iloc[0, 1] == "暂无拆分信息!":
|
|
534
|
-
return
|
|
550
|
+
return pd.DataFrame()
|
|
535
551
|
else:
|
|
536
552
|
return temp_df
|
|
537
553
|
|
|
@@ -543,10 +559,7 @@ def fund_money_fund_daily_em() -> pd.DataFrame:
|
|
|
543
559
|
:return: 当前交易日的所有货币型基金收益数据
|
|
544
560
|
:rtype: pandas.DataFrame
|
|
545
561
|
"""
|
|
546
|
-
|
|
547
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
|
|
548
|
-
}
|
|
549
|
-
url = "http://fund.eastmoney.com/HBJJ_pjsyl.html"
|
|
562
|
+
url = "https://fund.eastmoney.com/HBJJ_pjsyl.html"
|
|
550
563
|
r = requests.get(url, headers=headers)
|
|
551
564
|
r.encoding = "gb2312"
|
|
552
565
|
show_day = pd.read_html(StringIO(r.text))[1].iloc[0, 5:11].tolist()
|
|
@@ -576,16 +589,17 @@ def fund_money_fund_daily_em() -> pd.DataFrame:
|
|
|
576
589
|
def fund_money_fund_info_em(fund: str = "000009") -> pd.DataFrame:
|
|
577
590
|
"""
|
|
578
591
|
东方财富网-天天基金网-基金数据-货币型基金收益-历史净值数据
|
|
579
|
-
|
|
592
|
+
https://fundf10.eastmoney.com/jjjz_004186.html
|
|
580
593
|
:param fund: 货币型基金代码, 可以通过 fund_money_fund_daily_em 来获取
|
|
581
594
|
:type fund: str
|
|
582
595
|
:return: 东方财富网站-天天基金网-基金数据-货币型基金收益-历史净值数据
|
|
583
596
|
:rtype: pandas.DataFrame
|
|
584
597
|
"""
|
|
585
|
-
url = "
|
|
598
|
+
url = "https://api.fund.eastmoney.com/f10/lsjz"
|
|
586
599
|
headers = {
|
|
587
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
588
|
-
"
|
|
600
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
601
|
+
"Chrome/80.0.3987.149 Safari/537.36",
|
|
602
|
+
"Referer": f"https://fundf10.eastmoney.com/jjjz_{fund}.html",
|
|
589
603
|
}
|
|
590
604
|
params = {
|
|
591
605
|
"callback": "jQuery18306461675574671744_1588245122574",
|
|
@@ -598,7 +612,7 @@ def fund_money_fund_info_em(fund: str = "000009") -> pd.DataFrame:
|
|
|
598
612
|
}
|
|
599
613
|
r = requests.get(url, params=params, headers=headers)
|
|
600
614
|
text_data = r.text
|
|
601
|
-
data_json = demjson.decode(text_data[text_data.find("{"): -1])
|
|
615
|
+
data_json = demjson.decode(text_data[text_data.find("{") : -1])
|
|
602
616
|
temp_df = pd.DataFrame(data_json["Data"]["LSJZList"])
|
|
603
617
|
temp_df.columns = [
|
|
604
618
|
"净值日期",
|
|
@@ -615,7 +629,9 @@ def fund_money_fund_info_em(fund: str = "000009") -> pd.DataFrame:
|
|
|
615
629
|
"_",
|
|
616
630
|
"_",
|
|
617
631
|
]
|
|
618
|
-
temp_df = temp_df[
|
|
632
|
+
temp_df = temp_df[
|
|
633
|
+
["净值日期", "每万份收益", "7日年化收益率", "申购状态", "赎回状态"]
|
|
634
|
+
]
|
|
619
635
|
return temp_df
|
|
620
636
|
|
|
621
637
|
|
|
@@ -623,14 +639,15 @@ def fund_financial_fund_daily_em() -> pd.DataFrame:
|
|
|
623
639
|
"""
|
|
624
640
|
东方财富网站-天天基金网-基金数据-理财型基金收益
|
|
625
641
|
# 该接口暂无数据
|
|
626
|
-
|
|
642
|
+
https://fund.eastmoney.com/lcjj.html#1_1__0__ljjz,desc_1_os1
|
|
627
643
|
:return: 当前交易日的所有理财型基金收益
|
|
628
644
|
:rtype: pandas.DataFrame
|
|
629
645
|
"""
|
|
630
|
-
url = "
|
|
646
|
+
url = "https://api.fund.eastmoney.com/FundNetValue/GetLCJJJZ"
|
|
631
647
|
headers = {
|
|
632
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
633
|
-
"
|
|
648
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
649
|
+
"Chrome/80.0.3987.149 Safari/537.36",
|
|
650
|
+
"Referer": "https://fund.eastmoney.com/lcjj.html",
|
|
634
651
|
}
|
|
635
652
|
params = {
|
|
636
653
|
"letter": "",
|
|
@@ -647,7 +664,7 @@ def fund_financial_fund_daily_em() -> pd.DataFrame:
|
|
|
647
664
|
data_json = r.json()
|
|
648
665
|
temp_df = pd.DataFrame(data_json["Data"]["List"])
|
|
649
666
|
if temp_df.empty:
|
|
650
|
-
return
|
|
667
|
+
return pd.DataFrame()
|
|
651
668
|
show_day = data_json["Data"]["showday"]
|
|
652
669
|
data_df = temp_df[
|
|
653
670
|
[
|
|
@@ -701,10 +718,11 @@ def fund_financial_fund_info_em(symbol: str = "000134") -> pd.DataFrame:
|
|
|
701
718
|
:return: 东方财富网站-天天基金网-基金数据-理财型基金收益-历史净值明细
|
|
702
719
|
:rtype: pandas.DataFrame
|
|
703
720
|
"""
|
|
704
|
-
url = "
|
|
721
|
+
url = "https://api.fund.eastmoney.com/f10/lsjz"
|
|
705
722
|
headers = {
|
|
706
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
707
|
-
"
|
|
723
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
724
|
+
"Chrome/80.0.3987.149 Safari/537.36",
|
|
725
|
+
"Referer": f"https://fundf10.eastmoney.com/jjjz_{symbol}.html",
|
|
708
726
|
}
|
|
709
727
|
params = {
|
|
710
728
|
"callback": "jQuery18307915911837995662_1588249228826",
|
|
@@ -717,7 +735,7 @@ def fund_financial_fund_info_em(symbol: str = "000134") -> pd.DataFrame:
|
|
|
717
735
|
}
|
|
718
736
|
r = requests.get(url, params=params, headers=headers)
|
|
719
737
|
text_data = r.text
|
|
720
|
-
data_json = demjson.decode(text_data[text_data.find("{"): -1])
|
|
738
|
+
data_json = demjson.decode(text_data[text_data.find("{") : -1])
|
|
721
739
|
temp_df = pd.DataFrame(data_json["Data"]["LSJZList"])
|
|
722
740
|
temp_df.columns = [
|
|
723
741
|
"净值日期",
|
|
@@ -734,27 +752,38 @@ def fund_financial_fund_info_em(symbol: str = "000134") -> pd.DataFrame:
|
|
|
734
752
|
"_",
|
|
735
753
|
"分红送配",
|
|
736
754
|
]
|
|
737
|
-
temp_df = temp_df[
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
755
|
+
temp_df = temp_df[
|
|
756
|
+
[
|
|
757
|
+
"净值日期",
|
|
758
|
+
"单位净值",
|
|
759
|
+
"累计净值",
|
|
760
|
+
"日增长率",
|
|
761
|
+
"申购状态",
|
|
762
|
+
"赎回状态",
|
|
763
|
+
"分红送配",
|
|
764
|
+
]
|
|
765
|
+
]
|
|
766
|
+
temp_df.sort_values(["净值日期"], inplace=True, ignore_index=True)
|
|
767
|
+
temp_df["净值日期"] = pd.to_datetime(temp_df["净值日期"]).dt.date
|
|
768
|
+
temp_df["单位净值"] = pd.to_numeric(temp_df["单位净值"], errors="coerce")
|
|
769
|
+
temp_df["累计净值"] = pd.to_numeric(temp_df["累计净值"], errors="coerce")
|
|
770
|
+
temp_df["日增长率"] = pd.to_numeric(temp_df["日增长率"], errors="coerce")
|
|
743
771
|
return temp_df
|
|
744
772
|
|
|
745
773
|
|
|
746
774
|
def fund_graded_fund_daily_em() -> pd.DataFrame:
|
|
747
775
|
"""
|
|
748
776
|
东方财富网站-天天基金网-基金数据-分级基金净值
|
|
749
|
-
|
|
777
|
+
https://fund.eastmoney.com/fjjj.html#1_1__0__zdf,desc_1
|
|
750
778
|
:return: 当前交易日的所有分级基金净值
|
|
751
779
|
:rtype: pandas.DataFrame
|
|
752
780
|
"""
|
|
781
|
+
url = "https://fund.eastmoney.com/Data/Fund_JJJZ_Data.aspx"
|
|
753
782
|
headers = {
|
|
754
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
755
|
-
"
|
|
783
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
784
|
+
"Chrome/80.0.3987.149 Safari/537.36",
|
|
785
|
+
"Referer": "https://fund.eastmoney.com/fjjj.html",
|
|
756
786
|
}
|
|
757
|
-
url = "http://fund.eastmoney.com/Data/Fund_JJJZ_Data.aspx"
|
|
758
787
|
params = {
|
|
759
788
|
"t": "1",
|
|
760
789
|
"lx": "9",
|
|
@@ -814,16 +843,17 @@ def fund_graded_fund_daily_em() -> pd.DataFrame:
|
|
|
814
843
|
def fund_graded_fund_info_em(fund: str = "150232") -> pd.DataFrame:
|
|
815
844
|
"""
|
|
816
845
|
东方财富网站-天天基金网-基金数据-分级基金净值-历史净值明细
|
|
817
|
-
|
|
846
|
+
https://fundf10.eastmoney.com/jjjz_150232.html
|
|
818
847
|
:param fund: 分级基金代码, 可以通过 fund_money_fund_daily_em 来获取
|
|
819
848
|
:type fund: str
|
|
820
849
|
:return: 东方财富网站-天天基金网-基金数据-分级基金净值-历史净值明细
|
|
821
850
|
:rtype: pandas.DataFrame
|
|
822
851
|
"""
|
|
823
|
-
url = "
|
|
852
|
+
url = "https://api.fund.eastmoney.com/f10/lsjz"
|
|
824
853
|
headers = {
|
|
825
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
826
|
-
"
|
|
854
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
855
|
+
"Chrome/80.0.3987.149 Safari/537.36",
|
|
856
|
+
"Referer": f"https://fundf10.eastmoney.com/jjjz_{fund}.html",
|
|
827
857
|
}
|
|
828
858
|
params = {
|
|
829
859
|
"callback": "jQuery18309549480723031107_1588250168187",
|
|
@@ -836,7 +866,7 @@ def fund_graded_fund_info_em(fund: str = "150232") -> pd.DataFrame:
|
|
|
836
866
|
}
|
|
837
867
|
r = requests.get(url, params=params, headers=headers)
|
|
838
868
|
text_data = r.text
|
|
839
|
-
data_json = demjson.decode(text_data[text_data.find("{"): -1])
|
|
869
|
+
data_json = demjson.decode(text_data[text_data.find("{") : -1])
|
|
840
870
|
temp_df = pd.DataFrame(data_json["Data"]["LSJZList"])
|
|
841
871
|
temp_df.columns = [
|
|
842
872
|
"净值日期",
|
|
@@ -853,21 +883,20 @@ def fund_graded_fund_info_em(fund: str = "150232") -> pd.DataFrame:
|
|
|
853
883
|
"_",
|
|
854
884
|
"_",
|
|
855
885
|
]
|
|
856
|
-
temp_df = temp_df[
|
|
886
|
+
temp_df = temp_df[
|
|
887
|
+
["净值日期", "单位净值", "累计净值", "日增长率", "申购状态", "赎回状态"]
|
|
888
|
+
]
|
|
857
889
|
return temp_df
|
|
858
890
|
|
|
859
891
|
|
|
860
892
|
def fund_etf_fund_daily_em() -> pd.DataFrame:
|
|
861
893
|
"""
|
|
862
894
|
东方财富网-天天基金网-基金数据-场内交易基金
|
|
863
|
-
|
|
895
|
+
https://fund.eastmoney.com/cnjy_dwjz.html
|
|
864
896
|
:return: 当前交易日的所有场内交易基金数据
|
|
865
897
|
:rtype: pandas.DataFrame
|
|
866
898
|
"""
|
|
867
|
-
|
|
868
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
|
|
869
|
-
}
|
|
870
|
-
url = "http://fund.eastmoney.com/cnjy_dwjz.html"
|
|
899
|
+
url = "https://fund.eastmoney.com/cnjy_dwjz.html"
|
|
871
900
|
r = requests.get(url, headers=headers)
|
|
872
901
|
r.encoding = "gb2312"
|
|
873
902
|
show_day = pd.read_html(StringIO(r.text))[1].iloc[0, 6:10].tolist()
|
|
@@ -894,13 +923,13 @@ def fund_etf_fund_daily_em() -> pd.DataFrame:
|
|
|
894
923
|
|
|
895
924
|
|
|
896
925
|
def fund_etf_fund_info_em(
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
926
|
+
fund: str = "511280",
|
|
927
|
+
start_date: str = "20000101",
|
|
928
|
+
end_date: str = "20500101",
|
|
900
929
|
) -> pd.DataFrame:
|
|
901
930
|
"""
|
|
902
931
|
东方财富网站-天天基金网-基金数据-场内交易基金-历史净值明细
|
|
903
|
-
|
|
932
|
+
https://fundf10.eastmoney.com/jjjz_511280.html
|
|
904
933
|
:param fund: 场内交易基金代码, 可以通过 fund_etf_fund_daily_em 来获取
|
|
905
934
|
:type fund: str
|
|
906
935
|
:param start_date: 开始统计时间
|
|
@@ -910,18 +939,17 @@ def fund_etf_fund_info_em(
|
|
|
910
939
|
:return: 东方财富网站-天天基金网-基金数据-场内交易基金-历史净值明细
|
|
911
940
|
:rtype: pandas.DataFrame
|
|
912
941
|
"""
|
|
913
|
-
url = "
|
|
942
|
+
url = "https://api.fund.eastmoney.com/f10/lsjz"
|
|
914
943
|
headers = {
|
|
915
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
916
|
-
"
|
|
944
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
945
|
+
"Chrome/80.0.3987.149 Safari/537.36",
|
|
946
|
+
"Referer": f"https://fundf10.eastmoney.com/jjjz_{fund}.html",
|
|
917
947
|
}
|
|
918
948
|
params = {
|
|
919
949
|
"fundCode": fund,
|
|
920
950
|
"pageIndex": "1",
|
|
921
951
|
"pageSize": "10000",
|
|
922
|
-
"startDate": "-".join(
|
|
923
|
-
[start_date[:4], start_date[4:6], start_date[6:]]
|
|
924
|
-
),
|
|
952
|
+
"startDate": "-".join([start_date[:4], start_date[4:6], start_date[6:]]),
|
|
925
953
|
"endDate": "-".join([end_date[:4], end_date[4:6], end_date[6:]]),
|
|
926
954
|
"_": round(time.time() * 1000),
|
|
927
955
|
}
|
|
@@ -943,19 +971,21 @@ def fund_etf_fund_info_em(
|
|
|
943
971
|
"_",
|
|
944
972
|
"_",
|
|
945
973
|
]
|
|
946
|
-
temp_df = temp_df[
|
|
974
|
+
temp_df = temp_df[
|
|
975
|
+
["净值日期", "单位净值", "累计净值", "日增长率", "申购状态", "赎回状态"]
|
|
976
|
+
]
|
|
947
977
|
temp_df["净值日期"] = pd.to_datetime(temp_df["净值日期"]).dt.date
|
|
948
978
|
temp_df["单位净值"] = pd.to_numeric(temp_df["单位净值"])
|
|
949
979
|
temp_df["累计净值"] = pd.to_numeric(temp_df["累计净值"])
|
|
950
980
|
temp_df["日增长率"] = pd.to_numeric(temp_df["日增长率"])
|
|
951
|
-
temp_df.sort_values([
|
|
981
|
+
temp_df.sort_values(["净值日期"], inplace=True, ignore_index=True)
|
|
952
982
|
return temp_df
|
|
953
983
|
|
|
954
984
|
|
|
955
985
|
def fund_value_estimation_em(symbol: str = "全部") -> pd.DataFrame:
|
|
956
986
|
"""
|
|
957
987
|
东方财富网-数据中心-净值估算
|
|
958
|
-
|
|
988
|
+
https://fund.eastmoney.com/fundguzhi.html
|
|
959
989
|
:param symbol: choice of {'全部', '股票型', '混合型', '债券型', '指数型', 'QDII', 'ETF联接', 'LOF', '场内交易基金'}
|
|
960
990
|
:type symbol: str
|
|
961
991
|
:return: 近期净值估算数据
|
|
@@ -972,10 +1002,11 @@ def fund_value_estimation_em(symbol: str = "全部") -> pd.DataFrame:
|
|
|
972
1002
|
"LOF": 8,
|
|
973
1003
|
"场内交易基金": 9,
|
|
974
1004
|
}
|
|
975
|
-
url = "
|
|
1005
|
+
url = "https://api.fund.eastmoney.com/FundGuZhi/GetFundGZList"
|
|
976
1006
|
headers = {
|
|
977
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
978
|
-
"
|
|
1007
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
1008
|
+
"Chrome/81.0.4044.138 Safari/537.36",
|
|
1009
|
+
"Referer": "https://fund.eastmoney.com/",
|
|
979
1010
|
}
|
|
980
1011
|
params = {
|
|
981
1012
|
"type": symbol_map[symbol],
|
|
@@ -1042,7 +1073,7 @@ def fund_value_estimation_em(symbol: str = "全部") -> pd.DataFrame:
|
|
|
1042
1073
|
|
|
1043
1074
|
|
|
1044
1075
|
def fund_hk_fund_hist_em(
|
|
1045
|
-
|
|
1076
|
+
code: str = "1002200683", symbol: str = "历史净值明细"
|
|
1046
1077
|
) -> pd.DataFrame:
|
|
1047
1078
|
"""
|
|
1048
1079
|
东方财富网-天天基金网-基金数据-香港基金-历史净值明细(分红送配详情)
|
|
@@ -1054,10 +1085,7 @@ def fund_hk_fund_hist_em(
|
|
|
1054
1085
|
:return: 香港基金-历史净值明细(分红送配详情)
|
|
1055
1086
|
:rtype: pandas.DataFrame
|
|
1056
1087
|
"""
|
|
1057
|
-
url = "
|
|
1058
|
-
headers = {
|
|
1059
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
|
|
1060
|
-
}
|
|
1088
|
+
url = "https://overseas.1234567.com.cn/overseasapi/OpenApiHander.ashx"
|
|
1061
1089
|
if symbol == "历史净值明细":
|
|
1062
1090
|
params = {
|
|
1063
1091
|
"api": "HKFDApi",
|
|
@@ -1146,9 +1174,7 @@ if __name__ == "__main__":
|
|
|
1146
1174
|
fund_name_em_df = fund_name_em()
|
|
1147
1175
|
print(fund_name_em_df)
|
|
1148
1176
|
|
|
1149
|
-
fund_info_index_em_df = fund_info_index_em(
|
|
1150
|
-
symbol="债券指数", indicator="全部"
|
|
1151
|
-
)
|
|
1177
|
+
fund_info_index_em_df = fund_info_index_em(symbol="债券指数", indicator="全部")
|
|
1152
1178
|
print(fund_info_index_em_df)
|
|
1153
1179
|
|
|
1154
1180
|
fund_open_fund_daily_em_df = fund_open_fund_daily_em()
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2024/10/1 22:00
|
|
5
5
|
Desc: 东方财富网-数据中心-特色数据-股东户数
|
|
6
6
|
https://data.eastmoney.com/gdhs/
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
import pandas as pd
|
|
9
10
|
import requests
|
|
11
|
+
|
|
10
12
|
from akshare.utils.tqdm import get_tqdm
|
|
11
13
|
|
|
12
14
|
|
|
@@ -27,7 +29,9 @@ def stock_zh_a_gdhs(symbol: str = "20230930") -> pd.DataFrame:
|
|
|
27
29
|
"pageSize": "500",
|
|
28
30
|
"pageNumber": "1",
|
|
29
31
|
"reportName": "RPT_HOLDERNUMLATEST",
|
|
30
|
-
"columns": "SECURITY_CODE,SECURITY_NAME_ABBR,END_DATE,INTERVAL_CHRATE,AVG_MARKET_CAP,AVG_HOLD_NUM,
|
|
32
|
+
"columns": "SECURITY_CODE,SECURITY_NAME_ABBR,END_DATE,INTERVAL_CHRATE,AVG_MARKET_CAP,AVG_HOLD_NUM,"
|
|
33
|
+
"TOTAL_MARKET_CAP,TOTAL_A_SHARES,HOLD_NOTICE_DATE,HOLDER_NUM,PRE_HOLDER_NUM,"
|
|
34
|
+
"HOLDER_NUM_CHANGE,HOLDER_NUM_RATIO,END_DATE,PRE_END_DATE",
|
|
31
35
|
"quoteColumns": "f2,f3",
|
|
32
36
|
"source": "WEB",
|
|
33
37
|
"client": "WEB",
|
|
@@ -39,11 +43,13 @@ def stock_zh_a_gdhs(symbol: str = "20230930") -> pd.DataFrame:
|
|
|
39
43
|
"pageSize": "500",
|
|
40
44
|
"pageNumber": "1",
|
|
41
45
|
"reportName": "RPT_HOLDERNUM_DET",
|
|
42
|
-
"columns": "SECURITY_CODE,SECURITY_NAME_ABBR,END_DATE,INTERVAL_CHRATE,AVG_MARKET_CAP,
|
|
46
|
+
"columns": "SECURITY_CODE,SECURITY_NAME_ABBR,END_DATE,INTERVAL_CHRATE,AVG_MARKET_CAP,"
|
|
47
|
+
"AVG_HOLD_NUM,TOTAL_MARKET_CAP,TOTAL_A_SHARES,HOLD_NOTICE_DATE,HOLDER_NUM,"
|
|
48
|
+
"PRE_HOLDER_NUM,HOLDER_NUM_CHANGE,HOLDER_NUM_RATIO,END_DATE,PRE_END_DATE",
|
|
43
49
|
"quoteColumns": "f2,f3",
|
|
44
50
|
"source": "WEB",
|
|
45
51
|
"client": "WEB",
|
|
46
|
-
|
|
52
|
+
"filter": f"(END_DATE='{symbol[:4] + '-' + symbol[4:6] + '-' + symbol[6:]}')",
|
|
47
53
|
}
|
|
48
54
|
r = requests.get(url, params=params)
|
|
49
55
|
data_json = r.json()
|
|
@@ -51,13 +57,15 @@ def stock_zh_a_gdhs(symbol: str = "20230930") -> pd.DataFrame:
|
|
|
51
57
|
big_df = pd.DataFrame()
|
|
52
58
|
tqdm = get_tqdm()
|
|
53
59
|
for page_num in tqdm(range(1, total_page_num + 1), leave=False):
|
|
54
|
-
params.update(
|
|
55
|
-
|
|
56
|
-
|
|
60
|
+
params.update(
|
|
61
|
+
{
|
|
62
|
+
"pageNumber": page_num,
|
|
63
|
+
}
|
|
64
|
+
)
|
|
57
65
|
r = requests.get(url, params=params)
|
|
58
66
|
data_json = r.json()
|
|
59
67
|
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
60
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
68
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
61
69
|
big_df.columns = [
|
|
62
70
|
"代码",
|
|
63
71
|
"名称",
|
|
@@ -96,20 +104,26 @@ def stock_zh_a_gdhs(symbol: str = "20230930") -> pd.DataFrame:
|
|
|
96
104
|
"公告日期",
|
|
97
105
|
]
|
|
98
106
|
]
|
|
99
|
-
big_df[
|
|
100
|
-
big_df[
|
|
101
|
-
big_df[
|
|
102
|
-
big_df[
|
|
103
|
-
big_df[
|
|
104
|
-
big_df[
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
big_df[
|
|
108
|
-
big_df[
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
big_df[
|
|
112
|
-
|
|
107
|
+
big_df["最新价"] = pd.to_numeric(big_df["最新价"], errors="coerce")
|
|
108
|
+
big_df["涨跌幅"] = pd.to_numeric(big_df["涨跌幅"], errors="coerce")
|
|
109
|
+
big_df["股东户数-本次"] = pd.to_numeric(big_df["股东户数-本次"], errors="coerce")
|
|
110
|
+
big_df["股东户数-上次"] = pd.to_numeric(big_df["股东户数-上次"], errors="coerce")
|
|
111
|
+
big_df["股东户数-增减"] = pd.to_numeric(big_df["股东户数-增减"], errors="coerce")
|
|
112
|
+
big_df["股东户数-增减比例"] = pd.to_numeric(
|
|
113
|
+
big_df["股东户数-增减比例"], errors="coerce"
|
|
114
|
+
)
|
|
115
|
+
big_df["区间涨跌幅"] = pd.to_numeric(big_df["区间涨跌幅"], errors="coerce")
|
|
116
|
+
big_df["股东户数统计截止日-本次"] = pd.to_datetime(
|
|
117
|
+
big_df["股东户数统计截止日-本次"], errors="coerce"
|
|
118
|
+
).dt.date
|
|
119
|
+
big_df["股东户数统计截止日-上次"] = pd.to_datetime(
|
|
120
|
+
big_df["股东户数统计截止日-上次"], errors="coerce"
|
|
121
|
+
).dt.date
|
|
122
|
+
big_df["户均持股市值"] = pd.to_numeric(big_df["户均持股市值"], errors="coerce")
|
|
123
|
+
big_df["户均持股数量"] = pd.to_numeric(big_df["户均持股数量"], errors="coerce")
|
|
124
|
+
big_df["总市值"] = pd.to_numeric(big_df["总市值"], errors="coerce")
|
|
125
|
+
big_df["总股本"] = pd.to_numeric(big_df["总股本"], errors="coerce")
|
|
126
|
+
big_df["公告日期"] = pd.to_datetime(big_df["公告日期"], errors="coerce").dt.date
|
|
113
127
|
return big_df
|
|
114
128
|
|
|
115
129
|
|
|
@@ -124,16 +138,18 @@ def stock_zh_a_gdhs_detail_em(symbol: str = "000001") -> pd.DataFrame:
|
|
|
124
138
|
"""
|
|
125
139
|
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
|
126
140
|
params = {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
141
|
+
"sortColumns": "END_DATE",
|
|
142
|
+
"sortTypes": "-1",
|
|
143
|
+
"pageSize": "500",
|
|
144
|
+
"pageNumber": "1",
|
|
145
|
+
"reportName": "RPT_HOLDERNUM_DET",
|
|
146
|
+
"columns": "SECURITY_CODE,SECURITY_NAME_ABBR,CHANGE_SHARES,CHANGE_REASON,END_DATE,INTERVAL_CHRATE,"
|
|
147
|
+
"AVG_MARKET_CAP,AVG_HOLD_NUM,TOTAL_MARKET_CAP,TOTAL_A_SHARES,HOLD_NOTICE_DATE,HOLDER_NUM,"
|
|
148
|
+
"PRE_HOLDER_NUM,HOLDER_NUM_CHANGE,HOLDER_NUM_RATIO,END_DATE,PRE_END_DATE",
|
|
149
|
+
"quoteColumns": "f2,f3",
|
|
150
|
+
"filter": f'(SECURITY_CODE="{symbol}")',
|
|
151
|
+
"source": "WEB",
|
|
152
|
+
"client": "WEB",
|
|
137
153
|
}
|
|
138
154
|
r = requests.get(url, params=params)
|
|
139
155
|
data_json = r.json()
|
|
@@ -141,13 +157,15 @@ def stock_zh_a_gdhs_detail_em(symbol: str = "000001") -> pd.DataFrame:
|
|
|
141
157
|
big_df = pd.DataFrame()
|
|
142
158
|
tqdm = get_tqdm()
|
|
143
159
|
for page_num in tqdm(range(1, total_page_num + 1), leave=False):
|
|
144
|
-
params.update(
|
|
145
|
-
|
|
146
|
-
|
|
160
|
+
params.update(
|
|
161
|
+
{
|
|
162
|
+
"pageNumber": page_num,
|
|
163
|
+
}
|
|
164
|
+
)
|
|
147
165
|
r = requests.get(url, params=params)
|
|
148
166
|
data_json = r.json()
|
|
149
167
|
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
150
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
168
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
151
169
|
big_df.columns = [
|
|
152
170
|
"代码",
|
|
153
171
|
"名称",
|
|
@@ -187,23 +205,29 @@ def stock_zh_a_gdhs_detail_em(symbol: str = "000001") -> pd.DataFrame:
|
|
|
187
205
|
"名称",
|
|
188
206
|
]
|
|
189
207
|
]
|
|
190
|
-
big_df[
|
|
191
|
-
big_df[
|
|
192
|
-
big_df[
|
|
193
|
-
big_df[
|
|
194
|
-
big_df[
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
big_df[
|
|
198
|
-
big_df[
|
|
199
|
-
big_df[
|
|
200
|
-
big_df[
|
|
201
|
-
big_df[
|
|
208
|
+
big_df["区间涨跌幅"] = pd.to_numeric(big_df["区间涨跌幅"], errors="coerce")
|
|
209
|
+
big_df["股东户数-本次"] = pd.to_numeric(big_df["股东户数-本次"], errors="coerce")
|
|
210
|
+
big_df["股东户数-上次"] = pd.to_numeric(big_df["股东户数-上次"], errors="coerce")
|
|
211
|
+
big_df["股东户数-增减"] = pd.to_numeric(big_df["股东户数-增减"], errors="coerce")
|
|
212
|
+
big_df["股东户数-增减比例"] = pd.to_numeric(
|
|
213
|
+
big_df["股东户数-增减比例"], errors="coerce"
|
|
214
|
+
)
|
|
215
|
+
big_df["户均持股市值"] = pd.to_numeric(big_df["户均持股市值"], errors="coerce")
|
|
216
|
+
big_df["户均持股数量"] = pd.to_numeric(big_df["户均持股数量"], errors="coerce")
|
|
217
|
+
big_df["总市值"] = pd.to_numeric(big_df["总市值"], errors="coerce")
|
|
218
|
+
big_df["总股本"] = pd.to_numeric(big_df["总股本"], errors="coerce")
|
|
219
|
+
big_df["股本变动"] = pd.to_numeric(big_df["股本变动"], errors="coerce")
|
|
220
|
+
big_df["股东户数统计截止日"] = pd.to_datetime(
|
|
221
|
+
big_df["股东户数统计截止日"], errors="coerce"
|
|
222
|
+
).dt.date
|
|
223
|
+
big_df["股东户数公告日期"] = pd.to_datetime(
|
|
224
|
+
big_df["股东户数公告日期"], errors="coerce"
|
|
225
|
+
).dt.date
|
|
202
226
|
return big_df
|
|
203
227
|
|
|
204
228
|
|
|
205
229
|
if __name__ == "__main__":
|
|
206
|
-
stock_zh_a_gdhs_df = stock_zh_a_gdhs(symbol=
|
|
230
|
+
stock_zh_a_gdhs_df = stock_zh_a_gdhs(symbol="20230930")
|
|
207
231
|
print(stock_zh_a_gdhs_df)
|
|
208
232
|
|
|
209
233
|
stock_zh_a_gdhs_detail_em_df = stock_zh_a_gdhs_detail_em(symbol="000001")
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
akshare/__init__.py,sha256=
|
|
1
|
+
akshare/__init__.py,sha256=LCOjRmax3an6deyi6TE3KSxsSETjJoK7pGRvrlsn1ZY,182282
|
|
2
2
|
akshare/datasets.py,sha256=-qdwaQjgBlftX84uM74KJqCYJYkQ50PV416_neA4uls,995
|
|
3
3
|
akshare/air/__init__.py,sha256=RMTf1bT5EOE3ttWpn3hGu1LtUmsVxDoa0W7W0gXHOy8,81
|
|
4
4
|
akshare/air/air_hebei.py,sha256=xIXNGLK7IGYqrkteM9fxnHAwWqk6PCQs6D9-ggZ7byY,4442
|
|
@@ -20,7 +20,7 @@ akshare/bond/__init__.py,sha256=RMTf1bT5EOE3ttWpn3hGu1LtUmsVxDoa0W7W0gXHOy8,81
|
|
|
20
20
|
akshare/bond/bond_cb_sina.py,sha256=onLasmV1Y8eTIUkNu9S0o5PzMWCNC5jX6tOSjELimHQ,1811
|
|
21
21
|
akshare/bond/bond_cb_ths.py,sha256=sxpcGr5teUR0fSGolBKl1bDUkdA94gKdXdLvr5NSC0U,3079
|
|
22
22
|
akshare/bond/bond_cbond.py,sha256=2uMmzrZsGC4ZBoCcRAqITsRxpQzuTX1Nc0_m86x3GXM,6525
|
|
23
|
-
akshare/bond/bond_china.py,sha256=
|
|
23
|
+
akshare/bond/bond_china.py,sha256=Gjp2x2aNFRlGfHFpQYX_Prv19V9a4INiw5O946rLLtA,6535
|
|
24
24
|
akshare/bond/bond_china_money.py,sha256=IInePsQJDby5w0AYd84ipiJL_nbyVAaRC7SaHLWDP_E,13729
|
|
25
25
|
akshare/bond/bond_convert.py,sha256=9w94nIdSN4BUL27sPbVEUouBaAm30WMBiokYr4yM0sI,12649
|
|
26
26
|
akshare/bond/bond_em.py,sha256=Ck5hCloZ25I8updarLPzqHYYZPeOsjIFy4g2oaZvFMs,5318
|
|
@@ -83,7 +83,7 @@ akshare/fund/__init__.py,sha256=RMTf1bT5EOE3ttWpn3hGu1LtUmsVxDoa0W7W0gXHOy8,81
|
|
|
83
83
|
akshare/fund/fund_amac.py,sha256=Dml3EgpJhmVgkttb0OdaWN41ynOCIbJ0-1qAPDWF0oo,33800
|
|
84
84
|
akshare/fund/fund_announcement.py,sha256=g5rcIC9vQ4HapZd0b7cDbFYzHu9V6bOKhwxRHVfmv8k,1848
|
|
85
85
|
akshare/fund/fund_aum_em.py,sha256=dy1R1-0X48H8S-LPiuggNA5M-6MvQ08fnp5bytvCGPQ,3518
|
|
86
|
-
akshare/fund/fund_em.py,sha256=
|
|
86
|
+
akshare/fund/fund_em.py,sha256=L48mRByrBvOwtF6MyNHtXAP4F_RNkZJ-LWNdgjdQPCM,40824
|
|
87
87
|
akshare/fund/fund_etf_em.py,sha256=8HrEQbM3wSMHuTAle9g6iT4ULaPjsqCcTBVU7PrpqJA,17377
|
|
88
88
|
akshare/fund/fund_etf_sina.py,sha256=bhfxivhwClZxwwslqusaZwrNRdEkfCApQOli0QMrM3A,4899
|
|
89
89
|
akshare/fund/fund_etf_ths.py,sha256=vb_jy0h2-Kz2dNWUrwBYxPB0MAotv0KZgnFhE98ohSM,3432
|
|
@@ -309,7 +309,7 @@ akshare/stock_feature/stock_fhps_ths.py,sha256=NosH1xyT1Pif4T9tchdtJTBEpe6g1Wq2k
|
|
|
309
309
|
akshare/stock_feature/stock_fund_flow.py,sha256=cqBqsFrzwmuLP3k3wYQzvW085QUUfHZ4nBW8Zx7egkQ,18669
|
|
310
310
|
akshare/stock_feature/stock_gddh_em.py,sha256=I_MUJhyy0mwjNG46ZsQINEQvHR42EmS7gJBQujXr5Bw,3467
|
|
311
311
|
akshare/stock_feature/stock_gdfx_em.py,sha256=vrzyMdcNw8wZabXYH89wjzIAokAVfHDVcpNfC0MHsl4,37825
|
|
312
|
-
akshare/stock_feature/stock_gdhs.py,sha256=
|
|
312
|
+
akshare/stock_feature/stock_gdhs.py,sha256=Z6ZMy1A03BqMu9TghcIu2Sd_wwEtpIH7qawHun9G7ns,9036
|
|
313
313
|
akshare/stock_feature/stock_gdzjc_em.py,sha256=SHJH5iS3_NhvjTqRXF0vPooZl0s_ASeyZmNCC50ZYqs,4426
|
|
314
314
|
akshare/stock_feature/stock_gpzy_em.py,sha256=8NvLfWbLLQyjTlg6iSpg1LxlIAKLv534JZAiUAVxF1M,17443
|
|
315
315
|
akshare/stock_feature/stock_gxl_lg.py,sha256=I8TpDEpFzadZSSyZisyIk6163mJlRxup91dmlBH4t4U,2641
|
|
@@ -380,8 +380,8 @@ akshare/utils/token_process.py,sha256=K4rGXjh_tgugbRcyOK2h2x0jP3PT65IIK7nxhUKhOe
|
|
|
380
380
|
akshare/utils/tqdm.py,sha256=MuPNwcswkOGjwWQOMWXi9ZvQ_RmW4obCWRj2i7HM7FE,847
|
|
381
381
|
tests/__init__.py,sha256=gNzhlO0UPjFq6Ieb38kaVIODXv4cTDByrdohAZnDYt4,82
|
|
382
382
|
tests/test_func.py,sha256=j1MGYbZI2if2j_LY1S4FLsf4qfq4NwVqD5wmRlv5Log,832
|
|
383
|
-
akshare-1.14.
|
|
384
|
-
akshare-1.14.
|
|
385
|
-
akshare-1.14.
|
|
386
|
-
akshare-1.14.
|
|
387
|
-
akshare-1.14.
|
|
383
|
+
akshare-1.14.89.dist-info/LICENSE,sha256=mmSZCPgfHiVw34LXuFArd-SUgQtBJ_QsIlh-kWlDHfs,1073
|
|
384
|
+
akshare-1.14.89.dist-info/METADATA,sha256=di4BP3RUA7iP_XM8OrZptomNbmpsDPzEfyMLva8WkSs,14112
|
|
385
|
+
akshare-1.14.89.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
|
|
386
|
+
akshare-1.14.89.dist-info/top_level.txt,sha256=jsf9ZzZPmHaISTVumQPsAw7vv7Yv-PdEVW70SMEelQQ,14
|
|
387
|
+
akshare-1.14.89.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|