akshare 1.14.87__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 CHANGED
@@ -2898,9 +2898,11 @@ amac_manager_cancelled_info # 中国证券投资基金业协会-信息公示-诚
2898
2898
  1.14.85 fix: fix stock_profit_forecast_em interface
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
+ 1.14.88 fix: fix stock_hot_rank_relate_em interface
2902
+ 1.14.89 fix: fix bond_spot_deal interface
2901
2903
  """
2902
2904
 
2903
- __version__ = "1.14.87"
2905
+ __version__ = "1.14.89"
2904
2906
  __author__ = "AKFamily"
2905
2907
 
2906
2908
  import sys
@@ -1,18 +1,20 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/3/12 14:00
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["买入净价"] = temp_df["买入/卖出净价"].str.split("/", expand=True).iloc[:, 0]
65
- temp_df["卖出净价"] = temp_df["买入/卖出净价"].str.split("/", expand=True).iloc[:, 1]
66
- temp_df["买入收益率"] = temp_df["买入/卖出收益率"].str.split("/", expand=True).iloc[:, 0]
67
- temp_df["卖出收益率"] = temp_df["买入/卖出收益率"].str.split("/", expand=True).iloc[:, 1]
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['买入净价'] = pd.to_numeric(temp_df['买入净价'], errors="coerce")
71
- temp_df['卖出净价'] = pd.to_numeric(temp_df['卖出净价'], errors="coerce")
72
- temp_df['买入收益率'] = pd.to_numeric(temp_df['买入收益率'], errors="coerce")
73
- temp_df['卖出收益率'] = pd.to_numeric(temp_df['卖出收益率'], errors="coerce")
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['成交净价'] = pd.to_numeric(temp_df['成交净价'], errors="coerce")
131
- temp_df['最新收益率'] = pd.to_numeric(temp_df['最新收益率'], errors="coerce")
132
- temp_df['涨跌'] = pd.to_numeric(temp_df['涨跌'], errors="coerce")
133
- temp_df['加权收益率'] = pd.to_numeric(temp_df['加权收益率'], errors="coerce")
134
- temp_df['交易量'] = pd.to_numeric(temp_df['交易量'], errors="coerce")
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
- start_date: str = "20200204", end_date: str = "20210124"
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": '-'.join([start_date[:4], start_date[4:6], start_date[6:]]),
156
- "endDate": '-'.join([end_date[:4], end_date[4:6], end_date[6:]]),
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("&nbsp", "")
166
167
  data_df = pd.read_html(StringIO(data_text), header=0)[1]
167
- data_df['日期'] = pd.to_datetime(data_df['日期'], errors="coerce").dt.date
168
- data_df['3月'] = pd.to_numeric(data_df['3月'], errors="coerce")
169
- data_df['6月'] = pd.to_numeric(data_df['6月'], errors="coerce")
170
- data_df['1年'] = pd.to_numeric(data_df['1年'], errors="coerce")
171
- data_df['3年'] = pd.to_numeric(data_df['3年'], errors="coerce")
172
- data_df['5年'] = pd.to_numeric(data_df['5年'], errors="coerce")
173
- data_df['7年'] = pd.to_numeric(data_df['7年'], errors="coerce")
174
- data_df['10年'] = pd.to_numeric(data_df['10年'], errors="coerce")
175
- data_df['30年'] = pd.to_numeric(data_df['30年'], errors="coerce")
176
- data_df.sort_values(by='日期', inplace=True)
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: 2023/13/31 17:10
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.基金经理基本数据, 建议包含:基金经理代码,基金经理姓名,从业起始日期,现任基金公司,管理资产总规模,上述数据可在"基金经理列表: http://fund.eastmoney.com/manager/default.html#dt14;mcreturnjson;ftall;pn20;pi1;scabbname;stasc 和"基金经理理档案如:http://fund.eastmoney.com/manager/30040164.html 获取.
8
- 2.基金经理任职数据:可调取全部或特定经理,管理的基金数据,建议包含:基金经理代码,基金经理姓名,基金代码,基金简称,经理位次(在当前基金的经理中排第几位),起始任职时间,截止任职时间,任职回报.在特定基金的经理信息中可以获取如:http://fundf10.eastmoney.com/jjjl_001810.html
9
- 3.在接口:fund_basic"公募基金列表"增加数据"基金经理代码"(或第一基金经理代码),"基金经理姓名"(或第一基金经理姓名),"当前基金经理人数","当前经理任职起始时间".
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 = "http://fund.eastmoney.com/Data/Fund_JJJZ_Data.aspx"
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(temp_df["下一开放日"]).dt.date
79
- temp_df["最新净值/万份收益"] = pd.to_numeric(temp_df["最新净值/万份收益"])
80
- temp_df["购买起点"] = pd.to_numeric(temp_df["购买起点"])
81
- temp_df["日累计限定金额"] = pd.to_numeric(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
- headers = {
95
- "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"
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
- symbol: str = "沪深指数", indicator: str = "被动指数型"
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 = "http://api.fund.eastmoney.com/FundTradeRank/GetRankList"
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": "http://fund.eastmoney.com/",
184
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36",
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
- headers = {
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
- symbol: str = "710001", indicator: str = "单位净值走势", period: str = "成立来"
334
+ symbol: str = "710001", indicator: str = "单位净值走势", period: str = "成立来"
331
335
  ) -> pd.DataFrame:
332
336
  """
333
337
  东方财富网-天天基金网-基金数据-开放式基金净值
334
- https://fund.eastmoney.com/fund.html#os_0;isall_0;ft_;pt_1
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
- # url = f"http://fundgz.1234567.com.cn/js/{fund}.js" # 描述信息
345
- url = f"http://fund.eastmoney.com/pingzhongdata/{symbol}.js" # 各类数据都在里面
346
- headers = {
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
- data_text.find("Data_netWorthTrend")
358
- + 21: data_text.find("Data_ACWorthTrend")
359
- - 15
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
- temp_df["x"], unit="ms", utc=True
369
- ).dt.tz_convert("Asia/Shanghai")
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(temp_df["净值日期"], errors="coerce").dt.date
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
- data_text.find("Data_ACWorthTrend")
395
- + 20: data_text.find("Data_grandTotal")
396
- - 16
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
- temp_df["x"], unit="ms", utc=True
407
- ).dt.tz_convert("Asia/Shanghai")
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(temp_df["净值日期"], errors="coerce").dt.date
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
- 'fundCode': symbol,
441
- 'indexcode': '000300',
442
- 'type': period_map[period],
443
- '_': '1704012866899'
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['Data'][0]['data'])
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
- data_text.find("Data_rateInSimilarType")
461
- + 25: data_text.find("Data_rateInSimilarPersent")
462
- - 16
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
- temp_df["x"], unit="ms", utc=True
468
- ).dt.tz_convert("Asia/Shanghai")
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(temp_df["报告日期"], errors="coerce").dt.date
483
- temp_df["同类型排名-每日近三月排名"] = pd.to_numeric(temp_df["同类型排名-每日近三月排名"], errors="coerce")
484
- temp_df["总排名-每日近三月排名"] = pd.to_numeric(temp_df["总排名-每日近三月排名"], errors="coerce")
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
- data_text.find("Data_rateInSimilarPersent")
492
- + 26: data_text.find("Data_fluctuationScale")
493
- - 23
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
- temp_df["x"], unit="ms", utc=True
500
- ).dt.tz_convert("Asia/Shanghai")
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(temp_df["报告日期"], errors="coerce").dt.date
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"http://fundf10.eastmoney.com/fhsp_{symbol}.html"
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"http://fundf10.eastmoney.com/fhsp_{symbol}.html"
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
- headers = {
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
- http://fundf10.eastmoney.com/jjjz_004186.html
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 = "http://api.fund.eastmoney.com/f10/lsjz"
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) Chrome/80.0.3987.149 Safari/537.36",
588
- "Referer": f"http://fundf10.eastmoney.com/jjjz_{fund}.html",
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[["净值日期", "每万份收益", "7日年化收益率", "申购状态", "赎回状态"]]
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
- http://fund.eastmoney.com/lcjj.html#1_1__0__ljjz,desc_1_os1
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 = "http://api.fund.eastmoney.com/FundNetValue/GetLCJJJZ"
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) Chrome/80.0.3987.149 Safari/537.36",
633
- "Referer": "http://fund.eastmoney.com/lcjj.html",
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 = "http://api.fund.eastmoney.com/f10/lsjz"
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) Chrome/80.0.3987.149 Safari/537.36",
707
- "Referer": f"http://fundf10.eastmoney.com/jjjz_{symbol}.html",
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
- temp_df.sort_values(['净值日期'], inplace=True, ignore_index=True)
739
- temp_df['净值日期'] = pd.to_datetime(temp_df['净值日期']).dt.date
740
- temp_df['单位净值'] = pd.to_numeric(temp_df['单位净值'], errors="coerce")
741
- temp_df['累计净值'] = pd.to_numeric(temp_df['累计净值'], errors="coerce")
742
- temp_df['日增长率'] = pd.to_numeric(temp_df['日增长率'], errors="coerce")
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
- http://fund.eastmoney.com/fjjj.html#1_1__0__zdf,desc_1
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) Chrome/80.0.3987.149 Safari/537.36",
755
- "Referer": "http://fund.eastmoney.com/fjjj.html",
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
- http://fundf10.eastmoney.com/jjjz_150232.html
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 = "http://api.fund.eastmoney.com/f10/lsjz"
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) Chrome/80.0.3987.149 Safari/537.36",
826
- "Referer": f"http://fundf10.eastmoney.com/jjjz_{fund}.html",
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
- http://fund.eastmoney.com/cnjy_dwjz.html
895
+ https://fund.eastmoney.com/cnjy_dwjz.html
864
896
  :return: 当前交易日的所有场内交易基金数据
865
897
  :rtype: pandas.DataFrame
866
898
  """
867
- headers = {
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
- fund: str = "511280",
898
- start_date: str = "20000101",
899
- end_date: str = "20500101",
926
+ fund: str = "511280",
927
+ start_date: str = "20000101",
928
+ end_date: str = "20500101",
900
929
  ) -> pd.DataFrame:
901
930
  """
902
931
  东方财富网站-天天基金网-基金数据-场内交易基金-历史净值明细
903
- http://fundf10.eastmoney.com/jjjz_511280.html
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 = "http://api.fund.eastmoney.com/f10/lsjz"
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) Chrome/80.0.3987.149 Safari/537.36",
916
- "Referer": f"http://fundf10.eastmoney.com/jjjz_{fund}.html",
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(['净值日期'], inplace=True, ignore_index=True)
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
- http://fund.eastmoney.com/fundguzhi.html
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 = "http://api.fund.eastmoney.com/FundGuZhi/GetFundGZList"
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) Chrome/81.0.4044.138 Safari/537.36",
978
- "Referer": "http://fund.eastmoney.com/",
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
- code: str = "1002200683", symbol: str = "历史净值明细"
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 = "http://overseas.1234567.com.cn/overseasapi/OpenApiHander.ashx"
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()
@@ -5,6 +5,7 @@ Date: 2023/7/8 17:15
5
5
  Desc: 东方财富个股人气榜
6
6
  https://guba.eastmoney.com/rank/
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
 
@@ -190,7 +191,7 @@ def stock_hot_rank_relate_em(symbol: str = "SZ000665") -> pd.DataFrame:
190
191
  temp_df.columns = ["时间", "-", "股票代码", "-", "相关股票代码", "涨跌幅", "-"]
191
192
  temp_df = temp_df[["时间", "股票代码", "相关股票代码", "涨跌幅"]]
192
193
  temp_df["涨跌幅"] = temp_df["涨跌幅"].str.strip("%")
193
- temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"])
194
+ temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"], errors="coerce")
194
195
  return temp_df
195
196
 
196
197
 
@@ -1,12 +1,14 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/12/29 18:00
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,TOTAL_MARKET_CAP,TOTAL_A_SHARES,HOLD_NOTICE_DATE,HOLDER_NUM,PRE_HOLDER_NUM,HOLDER_NUM_CHANGE,HOLDER_NUM_RATIO,END_DATE,PRE_END_DATE",
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,AVG_HOLD_NUM,TOTAL_MARKET_CAP,TOTAL_A_SHARES,HOLD_NOTICE_DATE,HOLDER_NUM,PRE_HOLDER_NUM,HOLDER_NUM_CHANGE,HOLDER_NUM_RATIO,END_DATE,PRE_END_DATE",
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
- 'filter': f"(END_DATE='{symbol[:4] + '-' + symbol[4:6] + '-' + symbol[6:]}')",
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
- "pageNumber": page_num,
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['最新价'] = pd.to_numeric(big_df['最新价'], errors="coerce")
100
- big_df['涨跌幅'] = pd.to_numeric(big_df['涨跌幅'], errors="coerce")
101
- big_df['股东户数-本次'] = pd.to_numeric(big_df['股东户数-本次'], errors="coerce")
102
- big_df['股东户数-上次'] = pd.to_numeric(big_df['股东户数-上次'], errors="coerce")
103
- big_df['股东户数-增减'] = pd.to_numeric(big_df['股东户数-增减'], errors="coerce")
104
- big_df['股东户数-增减比例'] = pd.to_numeric(big_df['股东户数-增减比例'], errors="coerce")
105
- big_df['区间涨跌幅'] = pd.to_numeric(big_df['区间涨跌幅'], errors="coerce")
106
- big_df['股东户数统计截止日-本次'] = pd.to_datetime(big_df['股东户数统计截止日-本次'], errors="coerce").dt.date
107
- big_df['股东户数统计截止日-上次'] = pd.to_datetime(big_df['股东户数统计截止日-上次'], errors="coerce").dt.date
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_datetime(big_df['公告日期'], errors="coerce").dt.date
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
- 'sortColumns': 'END_DATE',
128
- 'sortTypes': '-1',
129
- 'pageSize': '500',
130
- 'pageNumber': '1',
131
- 'reportName': 'RPT_HOLDERNUM_DET',
132
- 'columns': 'SECURITY_CODE,SECURITY_NAME_ABBR,CHANGE_SHARES,CHANGE_REASON,END_DATE,INTERVAL_CHRATE,AVG_MARKET_CAP,AVG_HOLD_NUM,TOTAL_MARKET_CAP,TOTAL_A_SHARES,HOLD_NOTICE_DATE,HOLDER_NUM,PRE_HOLDER_NUM,HOLDER_NUM_CHANGE,HOLDER_NUM_RATIO,END_DATE,PRE_END_DATE',
133
- 'quoteColumns': 'f2,f3',
134
- 'filter': f'(SECURITY_CODE="{symbol}")',
135
- 'source': 'WEB',
136
- 'client': 'WEB',
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
- "pageNumber": page_num,
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['区间涨跌幅'] = pd.to_numeric(big_df['区间涨跌幅'], errors="coerce")
191
- big_df['股东户数-本次'] = pd.to_numeric(big_df['股东户数-本次'], errors="coerce")
192
- big_df['股东户数-上次'] = pd.to_numeric(big_df['股东户数-上次'], errors="coerce")
193
- big_df['股东户数-增减'] = pd.to_numeric(big_df['股东户数-增减'], errors="coerce")
194
- big_df['股东户数-增减比例'] = pd.to_numeric(big_df['股东户数-增减比例'], errors="coerce")
195
- big_df['户均持股市值'] = pd.to_numeric(big_df['户均持股市值'], errors="coerce")
196
- big_df['户均持股数量'] = pd.to_numeric(big_df['户均持股数量'], errors="coerce")
197
- big_df['总市值'] = pd.to_numeric(big_df['总市值'], errors="coerce")
198
- big_df['总股本'] = pd.to_numeric(big_df['总股本'], errors="coerce")
199
- big_df['股本变动'] = pd.to_numeric(big_df['股本变动'], errors="coerce")
200
- big_df['股东户数统计截止日'] = pd.to_datetime(big_df['股东户数统计截止日'], errors="coerce").dt.date
201
- big_df['股东户数公告日期'] = pd.to_datetime(big_df['股东户数公告日期'], errors="coerce").dt.date
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='20230930')
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,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: akshare
3
- Version: 1.14.87
3
+ Version: 1.14.89
4
4
  Summary: AKShare is an elegant and simple financial data interface library for Python, built for human beings!
5
5
  Home-page: https://github.com/akfamily/akshare
6
6
  Author: AKFamily
@@ -1,4 +1,4 @@
1
- akshare/__init__.py,sha256=vHSlXRrpZPRDNG6EOv1G7zlhmS-wa0cnTuM5E0yg5c4,182188
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=soAask4fpfcnlYzufUHL2phBU0LtzAyWX_nZI_HisKU,6938
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=GFdPpse_N6EZzgM_xB_EsjSva5EiU7asHjq8wKHo0vU,41115
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
@@ -250,7 +250,7 @@ akshare/stock/stock_hk_sina.py,sha256=sRX977vZ_nbuJ2Y7a8WA6efHp79h2ikocH3xfZ1hLf
250
250
  akshare/stock/stock_hold_control_cninfo.py,sha256=NpUDtfYCDQGhqX1ZAL8Uy2yslZ2zc15YBrzOt5_4k6o,7065
251
251
  akshare/stock/stock_hold_control_em.py,sha256=iBgnSEV7aYdsS2Ce7ELIUqVo-polfYdqcd6UmEuVN7g,7349
252
252
  akshare/stock/stock_hold_num_cninfo.py,sha256=JY9LcZMhhTiCHfQJv4pwMrLrpUxTKGLE4oRD6pvflsU,3706
253
- akshare/stock/stock_hot_rank_em.py,sha256=F466GuUgtlJbaCdD4v8TDCV-d7PxnetEI-zRz0OTvnA,7331
253
+ akshare/stock/stock_hot_rank_em.py,sha256=WMbadW1CFU3ppZHMSPjG2HtXgs7PgYGugNqmyrRQQe4,7349
254
254
  akshare/stock/stock_hot_search_baidu.py,sha256=Zex1iZB2qaqsxYPj6EmuzAXLbAa53W8LcePivGwrwAs,1769
255
255
  akshare/stock/stock_hot_up_em.py,sha256=sRwbpAHLzAylobUAIlVKuQo8vbuTA0Jt6gb1oiSgNwA,2509
256
256
  akshare/stock/stock_industry.py,sha256=7axm0G1EZc-G6uX9mNX4d3bHHYS_hq2tKFytxEj9YJM,5767
@@ -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=Fkrcs1HEOFNEXdQL4fO2-bMDvKV-Shu-fGECk4h7it0,8801
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.87.dist-info/LICENSE,sha256=mmSZCPgfHiVw34LXuFArd-SUgQtBJ_QsIlh-kWlDHfs,1073
384
- akshare-1.14.87.dist-info/METADATA,sha256=Tn0Xdrg2e2LJtVwDIToeA_ofAPl6WSysgUl4OnosyeI,14112
385
- akshare-1.14.87.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
386
- akshare-1.14.87.dist-info/top_level.txt,sha256=jsf9ZzZPmHaISTVumQPsAw7vv7Yv-PdEVW70SMEelQQ,14
387
- akshare-1.14.87.dist-info/RECORD,,
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,,