akshare 1.12.99__py3-none-any.whl → 1.15.72__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.

Files changed (236) hide show
  1. akshare/__init__.py +441 -138
  2. akshare/air/air_hebei.py +79 -53
  3. akshare/air/air_zhenqi.py +29 -43
  4. akshare/air/sunrise_tad.py +32 -17
  5. akshare/bank/bank_cbirc_2020.py +12 -9
  6. akshare/bond/bond_cb_ths.py +17 -9
  7. akshare/bond/bond_china.py +38 -39
  8. akshare/bond/bond_china_money.py +75 -48
  9. akshare/bond/bond_info_cm.py +28 -8
  10. akshare/bond/bond_issue_cninfo.py +73 -30
  11. akshare/bond/bond_zh_cov.py +1 -1
  12. akshare/bond/bond_zh_sina.py +57 -51
  13. akshare/cal/__init__.py +0 -0
  14. akshare/cal/rv.py +170 -0
  15. akshare/cost/cost_living.py +7 -5
  16. akshare/currency/currency_safe.py +7 -6
  17. akshare/data/cninfo.js +15 -0
  18. akshare/datasets.py +10 -21
  19. akshare/economic/macro_bank.py +95 -653
  20. akshare/economic/macro_china.py +772 -1024
  21. akshare/economic/macro_china_hk.py +65 -243
  22. akshare/economic/macro_china_nbs.py +24 -7
  23. akshare/economic/macro_constitute.py +17 -12
  24. akshare/economic/macro_euro.py +13 -6
  25. akshare/economic/macro_finance_ths.py +133 -0
  26. akshare/economic/macro_info_ws.py +100 -0
  27. akshare/economic/macro_japan.py +5 -4
  28. akshare/economic/macro_other.py +12 -9
  29. akshare/economic/macro_usa.py +376 -1940
  30. akshare/economic/marco_cnbs.py +11 -6
  31. akshare/energy/energy_carbon.py +94 -125
  32. akshare/event/migration.py +3 -2
  33. akshare/exceptions.py +43 -0
  34. akshare/file_fold/calendar.json +245 -2
  35. akshare/fortune/fortune_500.py +15 -48
  36. akshare/fund/fund_amac.py +157 -75
  37. akshare/fund/fund_em.py +191 -184
  38. akshare/fund/fund_etf_em.py +16 -15
  39. akshare/fund/fund_etf_sina.py +71 -23
  40. akshare/fund/fund_etf_ths.py +93 -0
  41. akshare/fund/fund_fee_em.py +98 -0
  42. akshare/fund/fund_portfolio_em.py +60 -50
  43. akshare/fund/fund_rank_em.py +91 -82
  44. akshare/fund/fund_report_cninfo.py +63 -48
  45. akshare/fund/fund_scale_sina.py +20 -10
  46. akshare/fund/fund_xq.py +139 -109
  47. akshare/futures/cons.py +8 -31
  48. akshare/futures/cot.py +185 -137
  49. akshare/futures/futures_basis.py +97 -32
  50. akshare/futures/futures_comm_ctp.py +37 -0
  51. akshare/futures/futures_comm_qihuo.py +74 -45
  52. akshare/futures/futures_daily_bar.py +121 -184
  53. akshare/futures/futures_hf_em.py +66 -61
  54. akshare/futures/futures_hq_sina.py +79 -61
  55. akshare/futures/futures_index_ccidx.py +6 -3
  56. akshare/futures/futures_inventory_99.py +61 -272
  57. akshare/futures/futures_news_shmet.py +4 -2
  58. akshare/futures/futures_roll_yield.py +12 -25
  59. akshare/futures/futures_spot_stock_em.py +19 -13
  60. akshare/futures/futures_stock_js.py +14 -12
  61. akshare/futures/futures_to_spot.py +38 -33
  62. akshare/futures/futures_warehouse_receipt.py +75 -71
  63. akshare/futures/futures_zh_sina.py +5 -5
  64. akshare/futures/symbol_var.py +18 -13
  65. akshare/futures_derivative/futures_contract_info_czce.py +60 -52
  66. akshare/futures_derivative/futures_contract_info_ine.py +43 -34
  67. akshare/futures_derivative/futures_contract_info_shfe.py +46 -35
  68. akshare/futures_derivative/futures_cot_sina.py +26 -19
  69. akshare/futures_derivative/futures_spot_sys.py +21 -8
  70. akshare/fx/currency_investing.py +19 -285
  71. akshare/index/index_cflp.py +29 -26
  72. akshare/index/index_cni.py +86 -88
  73. akshare/index/index_cons.py +26 -10
  74. akshare/index/index_cx.py +248 -47
  75. akshare/index/index_drewry.py +17 -16
  76. akshare/index/index_option_qvix.py +329 -0
  77. akshare/index/index_research_fund_sw.py +134 -0
  78. akshare/index/{index_sw_research.py → index_research_sw.py} +122 -58
  79. akshare/index/index_spot.py +9 -5
  80. akshare/index/index_stock_hk.py +35 -16
  81. akshare/index/index_stock_us_sina.py +1 -1
  82. akshare/index/index_stock_zh.py +180 -89
  83. akshare/index/index_stock_zh_csindex.py +15 -369
  84. akshare/index/index_sw.py +62 -34
  85. akshare/index/index_yw.py +46 -23
  86. akshare/index/index_zh_a_scope.py +48 -0
  87. akshare/index/index_zh_em.py +6 -4
  88. akshare/interest_rate/interbank_rate_em.py +14 -9
  89. akshare/movie/artist_yien.py +32 -5
  90. akshare/movie/movie_yien.py +92 -18
  91. akshare/movie/video_yien.py +28 -5
  92. akshare/news/news_baidu.py +78 -44
  93. akshare/news/news_cctv.py +38 -38
  94. akshare/news/news_stock.py +6 -3
  95. akshare/nlp/nlp_interface.py +7 -8
  96. akshare/option/cons.py +11 -11
  97. akshare/option/option_comm_qihuo.py +86 -0
  98. akshare/option/option_commodity.py +178 -51
  99. akshare/option/option_daily_stats_sse_szse.py +146 -0
  100. akshare/option/option_em.py +147 -138
  101. akshare/option/option_finance_sina.py +160 -137
  102. akshare/option/option_lhb_em.py +62 -56
  103. akshare/option/option_risk_indicator_sse.py +17 -14
  104. akshare/other/other_car_cpca.py +934 -0
  105. akshare/other/{other_car.py → other_car_gasgoo.py} +15 -54
  106. akshare/qdii/__init__.py +0 -0
  107. akshare/qdii/qdii_jsl.py +233 -0
  108. akshare/request.py +117 -0
  109. akshare/spot/spot_hog_soozhu.py +232 -0
  110. akshare/spot/spot_price_qh.py +121 -0
  111. akshare/spot/spot_sge.py +63 -10
  112. akshare/stock/stock_allotment_cninfo.py +10 -9
  113. akshare/stock/stock_board_concept_em.py +23 -14
  114. akshare/stock/stock_board_industry_em.py +40 -34
  115. akshare/stock/stock_cg_equity_mortgage.py +15 -11
  116. akshare/stock/stock_cg_guarantee.py +41 -51
  117. akshare/stock/stock_cg_lawsuit.py +36 -35
  118. akshare/stock/stock_dividend_cninfo.py +12 -6
  119. akshare/stock/stock_dzjy_em.py +347 -260
  120. akshare/stock/stock_fund_em.py +332 -84
  121. akshare/stock/stock_hk_famous.py +108 -0
  122. akshare/stock/stock_hk_sina.py +8 -7
  123. akshare/stock/stock_hold_control_cninfo.py +100 -15
  124. akshare/stock/stock_hold_control_em.py +4 -3
  125. akshare/stock/stock_hold_num_cninfo.py +18 -12
  126. akshare/stock/stock_hot_rank_em.py +2 -1
  127. akshare/stock/stock_hot_search_baidu.py +5 -2
  128. akshare/stock/stock_industry_cninfo.py +24 -18
  129. akshare/stock/stock_industry_pe_cninfo.py +45 -31
  130. akshare/stock/stock_industry_sw.py +9 -10
  131. akshare/stock/stock_info.py +25 -15
  132. akshare/stock/stock_info_em.py +5 -2
  133. akshare/stock/stock_intraday_em.py +5 -2
  134. akshare/stock/stock_intraday_sina.py +22 -18
  135. akshare/stock/stock_ipo_summary_cninfo.py +25 -10
  136. akshare/stock/stock_new_cninfo.py +32 -19
  137. akshare/stock/stock_news_cx.py +39 -0
  138. akshare/stock/stock_profile_cninfo.py +9 -8
  139. akshare/stock/stock_rank_forecast.py +8 -6
  140. akshare/stock/stock_share_changes_cninfo.py +18 -14
  141. akshare/stock/stock_share_hold.py +24 -19
  142. akshare/stock/stock_summary.py +54 -26
  143. akshare/stock/stock_us_famous.py +15 -6
  144. akshare/stock/stock_us_pink.py +7 -5
  145. akshare/stock/stock_us_sina.py +15 -12
  146. akshare/stock/stock_xq.py +38 -12
  147. akshare/stock/stock_zh_a_sina.py +53 -78
  148. akshare/stock/stock_zh_b_sina.py +32 -55
  149. akshare/stock/stock_zh_kcb_report.py +11 -9
  150. akshare/stock/stock_zh_kcb_sina.py +67 -64
  151. akshare/stock_feature/stock_a_below_net_asset_statistics.py +5 -2
  152. akshare/stock_feature/stock_a_high_low.py +5 -2
  153. akshare/stock_feature/stock_a_indicator.py +12 -9
  154. akshare/stock_feature/stock_a_pe_and_pb.py +27 -6
  155. akshare/stock_feature/stock_account_em.py +58 -40
  156. akshare/stock_feature/stock_analyst_em.py +36 -27
  157. akshare/stock_feature/stock_board_industry_ths.py +136 -400
  158. akshare/stock_feature/stock_comment_em.py +118 -85
  159. akshare/stock_feature/stock_concept_futu.py +183 -0
  160. akshare/stock_feature/stock_cyq_em.py +58 -54
  161. akshare/stock_feature/stock_disclosure_cninfo.py +147 -102
  162. akshare/stock_feature/stock_esg_sina.py +216 -11
  163. akshare/stock_feature/stock_fhps_em.py +60 -25
  164. akshare/stock_feature/stock_fhps_ths.py +25 -6
  165. akshare/stock_feature/stock_fund_flow.py +38 -25
  166. akshare/stock_feature/stock_gdfx_em.py +180 -95
  167. akshare/stock_feature/stock_gdhs.py +73 -49
  168. akshare/stock_feature/stock_gpzy_em.py +78 -46
  169. akshare/stock_feature/stock_hist_em.py +55 -23
  170. akshare/stock_feature/stock_hk_valuation_baidu.py +20 -8
  171. akshare/stock_feature/stock_hsgt_em.py +184 -452
  172. akshare/stock_feature/stock_info.py +52 -29
  173. akshare/stock_feature/stock_inner_trade_xq.py +39 -31
  174. akshare/stock_feature/stock_irm_cninfo.py +32 -9
  175. akshare/stock_feature/stock_jgdy_em.py +41 -38
  176. akshare/stock_feature/stock_lh_yybpm.py +36 -37
  177. akshare/stock_feature/stock_lhb_em.py +135 -71
  178. akshare/stock_feature/stock_lhb_sina.py +93 -46
  179. akshare/stock_feature/stock_margin_em.py +102 -0
  180. akshare/stock_feature/{stock_sse_margin.py → stock_margin_sse.py} +21 -15
  181. akshare/stock_feature/{stock_szse_margin.py → stock_margin_szse.py} +23 -19
  182. akshare/stock_feature/stock_market_legu.py +13 -8
  183. akshare/stock_feature/stock_pankou_em.py +72 -34
  184. akshare/stock_feature/stock_report_em.py +244 -54
  185. akshare/stock_feature/stock_research_report_em.py +48 -19
  186. akshare/stock_feature/stock_sns_sseinfo.py +15 -12
  187. akshare/stock_feature/stock_sy_em.py +86 -33
  188. akshare/stock_feature/stock_technology_ths.py +152 -120
  189. akshare/stock_feature/stock_tfp_em.py +35 -13
  190. akshare/stock_feature/stock_three_report_em.py +119 -77
  191. akshare/stock_feature/stock_ttm_lyr.py +4 -7
  192. akshare/stock_feature/stock_value_em.py +83 -0
  193. akshare/stock_feature/stock_wencai.py +21 -9
  194. akshare/stock_feature/stock_yjyg_em.py +63 -28
  195. akshare/stock_feature/stock_zf_pg.py +61 -38
  196. akshare/stock_feature/stock_zh_valuation_baidu.py +3 -2
  197. akshare/stock_feature/stock_ztb_em.py +62 -40
  198. akshare/stock_fundamental/stock_finance.py +150 -58
  199. akshare/stock_fundamental/stock_finance_ths.py +116 -31
  200. akshare/stock_fundamental/stock_mda_ym.py +5 -3
  201. akshare/stock_fundamental/stock_notice.py +29 -15
  202. akshare/stock_fundamental/stock_profit_forecast_em.py +31 -13
  203. akshare/stock_fundamental/stock_profit_forecast_ths.py +19 -10
  204. akshare/stock_fundamental/stock_register_em.py +448 -0
  205. akshare/stock_fundamental/stock_restricted_em.py +79 -32
  206. akshare/stock_fundamental/stock_zygc.py +10 -8
  207. akshare/stock_fundamental/stock_zyjs_ths.py +5 -3
  208. akshare/tool/trade_date_hist.py +4 -3
  209. akshare/utils/cons.py +10 -0
  210. akshare/utils/context.py +43 -0
  211. akshare/utils/demjson.py +2 -2
  212. akshare/utils/func.py +26 -0
  213. akshare/utils/tqdm.py +13 -3
  214. {akshare-1.12.99.dist-info → akshare-1.15.72.dist-info}/METADATA +52 -69
  215. akshare-1.15.72.dist-info/RECORD +385 -0
  216. {akshare-1.12.99.dist-info → akshare-1.15.72.dist-info}/WHEEL +1 -1
  217. tests/test_func.py +3 -5
  218. akshare/bond/bond_futures.py +0 -50
  219. akshare/bond/bond_investing.py +0 -139
  220. akshare/crypto/crypto_hist_investing.py +0 -249
  221. akshare/fortune/fortune_it_juzi.py +0 -123
  222. akshare/futures/futures_international.py +0 -170
  223. akshare/futures/futures_news_baidu.py +0 -54
  224. akshare/futures/inventory_data.py +0 -100
  225. akshare/futures_derivative/futures_index_price_nh.py +0 -61
  226. akshare/futures_derivative/futures_index_return_nh.py +0 -47
  227. akshare/futures_derivative/futures_index_volatility_nh.py +0 -51
  228. akshare/futures_derivative/futures_other_index_nh.py +0 -145
  229. akshare/index/index_fear_greed_funddb.py +0 -71
  230. akshare/index/index_investing.py +0 -232
  231. akshare/sport/sport_olympic_winter.py +0 -39
  232. akshare/stock_feature/stock_board_concept_ths.py +0 -422
  233. akshare/stock_fundamental/stock_register.py +0 -292
  234. akshare-1.12.99.dist-info/RECORD +0 -374
  235. {akshare-1.12.99.dist-info → akshare-1.15.72.dist-info}/LICENSE +0 -0
  236. {akshare-1.12.99.dist-info → akshare-1.15.72.dist-info}/top_level.txt +0 -0
akshare/fund/fund_amac.py CHANGED
@@ -1,16 +1,21 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/10/25 16:30
4
+ Date: 2024/4/29 16:00
5
5
  Desc: 中国证券投资基金业协会-信息公示数据
6
6
  中国证券投资基金业协会-新版: https://gs.amac.org.cn
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
- from requests.packages.urllib3.exceptions import InsecureRequestWarning
11
- from tqdm import tqdm
12
11
 
13
- requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
12
+ from akshare.utils.tqdm import get_tqdm
13
+
14
+ headers = {
15
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
16
+ "Chrome/123.0.0.0 Safari/537.36",
17
+ "Content-Type": "application/json",
18
+ }
14
19
 
15
20
 
16
21
  def _get_pages(url: str = "", payload: str = "") -> pd.DataFrame:
@@ -18,10 +23,7 @@ def _get_pages(url: str = "", payload: str = "") -> pd.DataFrame:
18
23
  中国证券投资基金业协会-信息公示-私募基金管理人公示 页数
19
24
  暂时不使用本函数, 直接可以获取所有数据
20
25
  """
21
- headers = {
22
- "Content-Type": "application/json",
23
- }
24
- res = requests.post(url=url, json=payload, headers=headers, verify=False)
26
+ res = requests.post(url=url, json=payload, headers=headers)
25
27
  res.encoding = "utf-8"
26
28
  json_df = res.json()
27
29
  return json_df["totalPages"]
@@ -31,10 +33,7 @@ def get_data(url: str = "", payload: str = "") -> pd.DataFrame:
31
33
  """
32
34
  中国证券投资基金业协会-信息公示-私募基金管理人公示
33
35
  """
34
- headers = {
35
- "Content-Type": "application/json",
36
- }
37
- res = requests.post(url=url, json=payload, headers=headers, verify=False)
36
+ res = requests.post(url=url, json=payload, headers=headers)
38
37
  res.encoding = "utf-8"
39
38
  json_df = res.json()
40
39
  return json_df
@@ -45,7 +44,7 @@ def get_data(url: str = "", payload: str = "") -> pd.DataFrame:
45
44
  def amac_member_info() -> pd.DataFrame:
46
45
  """
47
46
  中国证券投资基金业协会-信息公示-会员信息-会员机构综合查询
48
- http://gs.amac.org.cn/amac-infodisc/res/pof/member/index.html
47
+ https://gs.amac.org.cn/amac-infodisc/res/pof/member/index.html
49
48
  :return: 会员机构综合查询
50
49
  :rtype: pandas.DataFrame
51
50
  """
@@ -53,15 +52,16 @@ def amac_member_info() -> pd.DataFrame:
53
52
  params = {
54
53
  "rand": "0.7665138514630696",
55
54
  "page": "1",
56
- "size": "100",
55
+ "size": "20",
57
56
  }
58
- r = requests.post(url, params=params, json={}, verify=False)
57
+ r = requests.post(url, params=params, json={}, headers=headers)
59
58
  data_json = r.json()
60
59
  total_page = data_json["totalPages"]
61
60
  big_df = pd.DataFrame()
61
+ tqdm = get_tqdm()
62
62
  for page in tqdm(range(0, int(total_page)), leave=False):
63
63
  params.update({"page": page})
64
- r = requests.post(url, params=params, json={}, verify=False)
64
+ r = requests.post(url, params=params, json={}, headers=headers)
65
65
  data_json = r.json()
66
66
  temp_df = pd.DataFrame(data_json["content"])
67
67
  big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
@@ -97,30 +97,66 @@ def amac_person_fund_org_list(symbol: str = "公募基金管理公司") -> pd.Da
97
97
  """
98
98
  中国证券投资基金业协会-信息公示-从业人员信息-基金从业人员资格注册信息
99
99
  https://gs.amac.org.cn/amac-infodisc/res/pof/person/personOrgList.html
100
- :param symbol: choice of {"公募基金管理公司", "公募基金管理公司资管子公司", "商业银行", "证券公司", "证券公司子公司", "私募基金管理人", "保险公司子公司", "保险公司", "外包服务机构", "期货公司", "期货公司资管子公司", "媒体机构", "证券投资咨询机构", "评价机构", "外资私募证券基金管理人", "支付结算", "独立服务机构", "地方自律组织", "境外机构", "律师事务所", "会计师事务所", "交易所", "独立第三方销售机构", "证券公司资管子公司", "证券公司私募基金子公司", "其他"}
100
+ :param symbol: choice of {"公募基金管理公司", "公募基金管理公司资管子公司", "商业银行", "证券公司", "证券公司子公司",
101
+ "私募基金管理人", "保险公司子公司", "保险公司", "外包服务机构", "期货公司", "期货公司资管子公司", "媒体机构",
102
+ "证券投资咨询机构", "评价机构", "外资私募证券基金管理人", "支付结算", "独立服务机构", "地方自律组织", "境外机构",
103
+ "律师事务所", "会计师事务所", "交易所", "独立第三方销售机构", "证券公司资管子公司", "证券公司私募基金子公司", "其他"}
101
104
  :type symbol: str
102
105
  :return: 基金从业人员资格注册信息
103
106
  :rtype: pandas.DataFrame
104
107
  """
105
- from pypinyin import lazy_pinyin
106
- pinyin_raw_list = lazy_pinyin(symbol)
107
- symbol_trans = ''.join([item[0] for item in pinyin_raw_list])
108
+ symbol_map = {
109
+ "保险公司子公司": "bxgszgs",
110
+ "期货公司资管子公司": "qhgszgzgs",
111
+ "公募基金管理公司资管子公司": "gmjjglgszgzgs",
112
+ "商业银行": "syyh",
113
+ "交易所": "jys",
114
+ "证券公司私募基金子公司": "zqgssmjjzgs",
115
+ "地方自律组织": "dfzlzz",
116
+ "证券公司": "zqgs",
117
+ "评价机构": "pjjg",
118
+ "独立第三方销售机构": "dldsfxsjg",
119
+ "证券投资咨询机构": "zqtzzxjg",
120
+ "外资私募证券基金管理人": "wzsmzqjjglr",
121
+ "境外机构": "jwjg",
122
+ "证券公司子公司": "zqgszgs",
123
+ "公募基金管理公司": "gmjjglgs",
124
+ "媒体机构": "mtjg",
125
+ "支付结算": "zfjs",
126
+ "证券公司资管子公司": "zqgszgzgs",
127
+ "会计师事务所": "kjssws",
128
+ "独立服务机构": "dlfwjg",
129
+ "律师事务所": "lssws",
130
+ "期货公司": "qhgs",
131
+ "保险公司": "bxgs",
132
+ "其他": "qt",
133
+ "外包服务机构": "wbfwjg",
134
+ "私募基金管理人": "smjjglr",
135
+ }
108
136
  url = "https://gs.amac.org.cn/amac-infodisc/api/pof/personOrg"
109
137
  params = {
110
138
  "rand": "0.7665138514630696",
111
139
  "page": "1",
112
- "size": "100",
140
+ "size": "20",
113
141
  }
114
142
  r = requests.post(
115
- url, params=params, json={"orgType": symbol_trans, "page": "1"}, verify=False
143
+ url,
144
+ params=params,
145
+ json={"orgType": symbol_map[symbol], "page": "1"},
146
+ headers=headers,
116
147
  )
117
148
  data_json = r.json()
118
149
  total_page = data_json["totalPages"]
119
150
  big_df = pd.DataFrame()
151
+ tqdm = get_tqdm()
120
152
  for page in tqdm(range(0, int(total_page)), leave=False):
121
153
  params.update({"page": page})
122
154
  r = requests.post(
123
- url, params=params, json={"orgType": symbol_trans, "page": "1"}, verify=False
155
+ url,
156
+ params=params,
157
+ json={"orgType": symbol_map[symbol], "page": "1"},
158
+ verify=False,
159
+ headers=headers,
124
160
  )
125
161
  data_json = r.json()
126
162
  temp_df = pd.DataFrame(data_json["content"])
@@ -137,7 +173,7 @@ def amac_person_fund_org_list(symbol: str = "公募基金管理公司") -> pd.Da
137
173
  manager_data_out = pd.DataFrame(big_df)
138
174
  manager_data_out = manager_data_out[keys_list]
139
175
  manager_data_out.reset_index(inplace=True)
140
- manager_data_out['index'] = manager_data_out.index + 1
176
+ manager_data_out["index"] = manager_data_out.index + 1
141
177
  manager_data_out.columns = [
142
178
  "序号",
143
179
  "机构名称",
@@ -148,11 +184,13 @@ def amac_person_fund_org_list(symbol: str = "公募基金管理公司") -> pd.Da
148
184
  "基金经理",
149
185
  "投资经理",
150
186
  ]
151
- manager_data_out['员工人数'] = pd.to_numeric(manager_data_out['员工人数'])
152
- manager_data_out['基金从业资格'] = pd.to_numeric(manager_data_out['基金从业资格'])
153
- manager_data_out['基金销售业务资格'] = pd.to_numeric(manager_data_out['基金销售业务资格'])
154
- manager_data_out['基金经理'] = pd.to_numeric(manager_data_out['基金经理'])
155
- manager_data_out['投资经理'] = pd.to_numeric(manager_data_out['投资经理'])
187
+ manager_data_out["员工人数"] = pd.to_numeric(manager_data_out["员工人数"])
188
+ manager_data_out["基金从业资格"] = pd.to_numeric(manager_data_out["基金从业资格"])
189
+ manager_data_out["基金销售业务资格"] = pd.to_numeric(
190
+ manager_data_out["基金销售业务资格"]
191
+ )
192
+ manager_data_out["基金经理"] = pd.to_numeric(manager_data_out["基金经理"])
193
+ manager_data_out["投资经理"] = pd.to_numeric(manager_data_out["投资经理"])
156
194
  return manager_data_out
157
195
 
158
196
 
@@ -164,9 +202,16 @@ def amac_person_bond_org_list() -> pd.DataFrame:
164
202
  :return: 债券投资交易相关人员公示
165
203
  :rtype: pandas.DataFrame
166
204
  """
167
- url = "https://human.amac.org.cn/web/api/publicityAddress"
168
- params = {"rand": "0.1965383823100506", "pageNum": "0", "pageSize": "5000"}
169
- r = requests.get(url, params=params)
205
+ import urllib3
206
+ import ssl
207
+
208
+ ctx = ssl.create_default_context()
209
+ ctx.options |= ssl.OP_LEGACY_SERVER_CONNECT
210
+ # 使用自定义的 SSL 上下文发起 HTTPS 请求
211
+ http = urllib3.PoolManager(ssl_context=ctx)
212
+
213
+ url = "https://human.amac.org.cn/web/api/publicityAddress?rand=0.6288001872566391&pageNum=1&pageSize=5000"
214
+ r = http.request(method="GET", url=url)
170
215
  data_json = r.json()
171
216
  temp_df = pd.DataFrame(data_json["list"])
172
217
  temp_df.reset_index(inplace=True)
@@ -195,7 +240,7 @@ def amac_person_bond_org_list() -> pd.DataFrame:
195
240
  def amac_manager_info() -> pd.DataFrame:
196
241
  """
197
242
  中国证券投资基金业协会-信息公示-私募基金管理人公示-私募基金管理人综合查询
198
- http://gs.amac.org.cn/amac-infodisc/res/pof/manager/index.html
243
+ https://gs.amac.org.cn/amac-infodisc/res/pof/manager/index.html
199
244
  :return: 私募基金管理人综合查询
200
245
  :rtype: pandas.DataFrame
201
246
  """
@@ -205,13 +250,14 @@ def amac_manager_info() -> pd.DataFrame:
205
250
  "page": "1",
206
251
  "size": "100",
207
252
  }
208
- r = requests.post(url, params=params, json={}, verify=False)
253
+ r = requests.post(url, params=params, json={}, verify=False, headers=headers)
209
254
  data_json = r.json()
210
255
  total_page = data_json["totalPages"]
211
256
  big_df = pd.DataFrame()
257
+ tqdm = get_tqdm()
212
258
  for page in tqdm(range(0, int(total_page)), leave=False):
213
259
  params.update({"page": page})
214
- r = requests.post(url, params=params, json={}, verify=False)
260
+ r = requests.post(url, params=params, json={}, verify=False, headers=headers)
215
261
  data_json = r.json()
216
262
  temp_df = pd.DataFrame(data_json["content"])
217
263
  big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
@@ -248,7 +294,7 @@ def amac_manager_info() -> pd.DataFrame:
248
294
  def amac_manager_classify_info() -> pd.DataFrame:
249
295
  """
250
296
  中国证券投资基金业协会-信息公示-私募基金管理人公示-私募基金管理人分类公示
251
- http://gs.amac.org.cn/amac-infodisc/res/pof/manager/managerList.html
297
+ https://gs.amac.org.cn/amac-infodisc/res/pof/manager/managerList.html
252
298
  :return: 私募基金管理人分类公示
253
299
  :rtype: pandas.DataFrame
254
300
  """
@@ -258,13 +304,14 @@ def amac_manager_classify_info() -> pd.DataFrame:
258
304
  "page": "1",
259
305
  "size": "100",
260
306
  }
261
- r = requests.post(url, params=params, json={}, verify=False)
307
+ r = requests.post(url, params=params, json={}, verify=False, headers=headers)
262
308
  data_json = r.json()
263
309
  total_page = data_json["totalPages"]
264
310
  big_df = pd.DataFrame()
311
+ tqdm = get_tqdm()
265
312
  for page in tqdm(range(0, int(total_page)), leave=False):
266
313
  params.update({"page": page})
267
- r = requests.post(url, params=params, json={}, verify=False)
314
+ r = requests.post(url, params=params, json={}, verify=False, headers=headers)
268
315
  data_json = r.json()
269
316
  temp_df = pd.DataFrame(data_json["content"])
270
317
  big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
@@ -305,8 +352,12 @@ def amac_manager_classify_info() -> pd.DataFrame:
305
352
  manager_data_out["登记时间"], unit="ms"
306
353
  ).dt.date
307
354
  manager_data_out["在管基金数量"] = pd.to_numeric(manager_data_out["在管基金数量"])
308
- manager_data_out["是否有提示信息"] = manager_data_out["是否有提示信息"].map({True: "是", False: "否"})
309
- manager_data_out["是否有诚信信息"] = manager_data_out["是否有诚信信息"].map({True: "是", False: "否"})
355
+ manager_data_out["是否有提示信息"] = manager_data_out["是否有提示信息"].map(
356
+ {True: "是", False: "否"}
357
+ )
358
+ manager_data_out["是否有诚信信息"] = manager_data_out["是否有诚信信息"].map(
359
+ {True: "是", False: "否"}
360
+ )
310
361
  return manager_data_out
311
362
 
312
363
 
@@ -314,7 +365,7 @@ def amac_manager_classify_info() -> pd.DataFrame:
314
365
  def amac_member_sub_info() -> pd.DataFrame:
315
366
  """
316
367
  中国证券投资基金业协会-信息公示-私募基金管理人公示-证券公司私募基金子公司管理人信息公示
317
- http://gs.amac.org.cn/amac-infodisc/res/pof/member/index.html?primaryInvestType=private
368
+ https://gs.amac.org.cn/amac-infodisc/res/pof/member/index.html?primaryInvestType=private
318
369
  :return: 证券公司私募基金子公司管理人信息公示
319
370
  :rtype: pandas.DataFrame
320
371
  """
@@ -324,13 +375,14 @@ def amac_member_sub_info() -> pd.DataFrame:
324
375
  "page": "1",
325
376
  "size": "100",
326
377
  }
327
- r = requests.post(url, params=params, json={}, verify=False)
378
+ r = requests.post(url, params=params, json={}, verify=False, headers=headers)
328
379
  data_json = r.json()
329
380
  total_page = data_json["totalPages"]
330
381
  big_df = pd.DataFrame()
382
+ tqdm = get_tqdm()
331
383
  for page in tqdm(range(0, int(total_page)), leave=False):
332
384
  params.update({"page": page})
333
- r = requests.post(url, params=params, json={}, verify=False)
385
+ r = requests.post(url, params=params, json={}, verify=False, headers=headers)
334
386
  data_json = r.json()
335
387
  temp_df = pd.DataFrame(data_json["content"])
336
388
  big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
@@ -360,7 +412,7 @@ def amac_member_sub_info() -> pd.DataFrame:
360
412
 
361
413
  # 中国证券投资基金业协会-信息公示-基金产品
362
414
  # 中国证券投资基金业协会-信息公示-基金产品-私募基金管理人基金产品
363
- def amac_fund_info(start_page: str = '1', end_page: str = "2000") -> pd.DataFrame:
415
+ def amac_fund_info(start_page: str = "1", end_page: str = "2000") -> pd.DataFrame:
364
416
  """
365
417
  中国证券投资基金业协会-信息公示-基金产品-私募基金管理人基金产品
366
418
  https://gs.amac.org.cn/amac-infodisc/res/pof/fund/index.html
@@ -377,7 +429,7 @@ def amac_fund_info(start_page: str = '1', end_page: str = "2000") -> pd.DataFram
377
429
  "page": "1",
378
430
  "size": "100",
379
431
  }
380
- r = requests.post(url, params=params, json={}, verify=False)
432
+ r = requests.post(url, params=params, json={}, verify=False, headers=headers)
381
433
  data_json = r.json()
382
434
  total_page = int(data_json["totalPages"])
383
435
  if total_page > int(end_page):
@@ -385,12 +437,13 @@ def amac_fund_info(start_page: str = '1', end_page: str = "2000") -> pd.DataFram
385
437
  else:
386
438
  real_end_page = total_page
387
439
  big_df = pd.DataFrame()
440
+ tqdm = get_tqdm()
388
441
  for page in tqdm(range(int(start_page) - 1, real_end_page), leave=False):
389
442
  params.update({"page": page})
390
- r = requests.post(url, params=params, json={}, verify=False)
443
+ r = requests.post(url, params=params, json={}, verify=False, headers=headers)
391
444
  data_json = r.json()
392
445
  temp_df = pd.DataFrame(data_json["content"])
393
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
446
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
394
447
  keys_list = [
395
448
  "fundName",
396
449
  "managerName",
@@ -400,7 +453,7 @@ def amac_fund_info(start_page: str = '1', end_page: str = "2000") -> pd.DataFram
400
453
  "establishDate",
401
454
  "mandatorName",
402
455
  ] # 定义要取的 value 的 keys
403
- manager_data_out = big_df[keys_list]
456
+ manager_data_out = big_df[keys_list].copy()
404
457
  manager_data_out.columns = [
405
458
  "基金名称",
406
459
  "私募基金管理人名称",
@@ -423,7 +476,7 @@ def amac_fund_info(start_page: str = '1', end_page: str = "2000") -> pd.DataFram
423
476
  def amac_securities_info() -> pd.DataFrame:
424
477
  """
425
478
  中国证券投资基金业协会-信息公示-基金产品公示-证券公司集合资管产品公示
426
- http://gs.amac.org.cn/amac-infodisc/res/pof/securities/index.html
479
+ https://gs.amac.org.cn/amac-infodisc/res/pof/securities/index.html
427
480
  :return: 证券公司集合资管产品公示
428
481
  :rtype: pandas.DataFrame
429
482
  """
@@ -433,13 +486,14 @@ def amac_securities_info() -> pd.DataFrame:
433
486
  "page": "1",
434
487
  "size": "100",
435
488
  }
436
- r = requests.post(url, params=params, json={}, verify=False)
489
+ r = requests.post(url, params=params, json={}, verify=False, headers=headers)
437
490
  data_json = r.json()
438
491
  total_page = data_json["totalPages"]
439
492
  big_df = pd.DataFrame()
493
+ tqdm = get_tqdm()
440
494
  for page in tqdm(range(0, int(total_page)), leave=False):
441
495
  params.update({"page": page})
442
- r = requests.post(url, params=params, json={}, verify=False)
496
+ r = requests.post(url, params=params, json={}, verify=False, headers=headers)
443
497
  data_json = r.json()
444
498
  temp_df = pd.DataFrame(data_json["content"])
445
499
  big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
@@ -476,7 +530,7 @@ def amac_securities_info() -> pd.DataFrame:
476
530
  def amac_aoin_info() -> pd.DataFrame:
477
531
  """
478
532
  中国证券投资基金业协会-信息公示-基金产品公示-证券公司直投基金
479
- http://gs.amac.org.cn/amac-infodisc/res/aoin/product/index.html
533
+ https://gs.amac.org.cn/amac-infodisc/res/aoin/product/index.html
480
534
  :return: 证券公司直投基金
481
535
  :rtype: pandas.DataFrame
482
536
  """
@@ -486,13 +540,14 @@ def amac_aoin_info() -> pd.DataFrame:
486
540
  "page": "1",
487
541
  "size": "100",
488
542
  }
489
- r = requests.post(url, params=params, json={}, verify=False)
543
+ r = requests.post(url, params=params, json={}, verify=False, headers=headers)
490
544
  data_json = r.json()
491
545
  total_page = data_json["totalPages"]
492
546
  big_df = pd.DataFrame()
547
+ tqdm = get_tqdm()
493
548
  for page in tqdm(range(0, int(total_page)), leave=False):
494
549
  params.update({"page": page})
495
- r = requests.post(url, params=params, json={}, verify=False)
550
+ r = requests.post(url, params=params, json={}, verify=False, headers=headers)
496
551
  data_json = r.json()
497
552
  temp_df = pd.DataFrame(data_json["content"])
498
553
  big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
@@ -512,7 +567,9 @@ def amac_aoin_info() -> pd.DataFrame:
512
567
  "管理机构",
513
568
  "设立日期",
514
569
  ]
515
- manager_data_out["设立日期"] = pd.to_datetime(manager_data_out["设立日期"], unit="ms")
570
+ manager_data_out["设立日期"] = pd.to_datetime(
571
+ manager_data_out["设立日期"], unit="ms"
572
+ ).dt.date
516
573
  return manager_data_out
517
574
 
518
575
 
@@ -520,7 +577,7 @@ def amac_aoin_info() -> pd.DataFrame:
520
577
  def amac_fund_sub_info() -> pd.DataFrame:
521
578
  """
522
579
  中国证券投资基金业协会-信息公示-基金产品公示-证券公司私募投资基金
523
- http://gs.amac.org.cn/amac-infodisc/res/pof/subfund/index.html
580
+ https://gs.amac.org.cn/amac-infodisc/res/pof/subfund/index.html
524
581
  :return: 证券公司私募投资基金
525
582
  :rtype: pandas.DataFrame
526
583
  """
@@ -530,13 +587,14 @@ def amac_fund_sub_info() -> pd.DataFrame:
530
587
  "page": "1",
531
588
  "size": "100",
532
589
  }
533
- r = requests.post(url, params=params, json={}, verify=False)
590
+ r = requests.post(url, params=params, json={}, verify=False, headers=headers)
534
591
  data_json = r.json()
535
592
  total_page = data_json["totalPages"]
536
593
  big_df = pd.DataFrame()
594
+ tqdm = get_tqdm()
537
595
  for page in tqdm(range(0, int(total_page)), leave=False):
538
596
  params.update({"page": page})
539
- r = requests.post(url, params=params, json={}, verify=False)
597
+ r = requests.post(url, params=params, json={}, verify=False, headers=headers)
540
598
  data_json = r.json()
541
599
  temp_df = pd.DataFrame(data_json["content"])
542
600
  big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
@@ -558,8 +616,12 @@ def amac_fund_sub_info() -> pd.DataFrame:
558
616
  "成立日期",
559
617
  "备案日期",
560
618
  ]
561
- manager_data_out["备案日期"] = pd.to_datetime(manager_data_out["备案日期"], unit="ms")
562
- manager_data_out["成立日期"] = pd.to_datetime(manager_data_out["成立日期"], unit="ms")
619
+ manager_data_out["备案日期"] = pd.to_datetime(
620
+ manager_data_out["备案日期"], unit="ms"
621
+ ).dt.date
622
+ manager_data_out["成立日期"] = pd.to_datetime(
623
+ manager_data_out["成立日期"], unit="ms"
624
+ ).dt.date
563
625
  return manager_data_out
564
626
 
565
627
 
@@ -567,23 +629,28 @@ def amac_fund_sub_info() -> pd.DataFrame:
567
629
  def amac_fund_account_info() -> pd.DataFrame:
568
630
  """
569
631
  中国证券投资基金业协会-信息公示-基金产品公示-基金公司及子公司集合资管产品公示
570
- http://gs.amac.org.cn/amac-infodisc/res/fund/account/index.html
632
+ https://gs.amac.org.cn/amac-infodisc/res/fund/account/index.html
571
633
  :return: 基金公司及子公司集合资管产品公示
572
634
  :rtype: pandas.DataFrame
573
635
  """
636
+ import warnings
637
+
638
+ warnings.filterwarnings(action="ignore", category=FutureWarning)
639
+
574
640
  url = "https://gs.amac.org.cn/amac-infodisc/api/fund/account"
575
641
  params = {
576
642
  "rand": "0.7665138514630696",
577
643
  "page": "1",
578
644
  "size": "100",
579
645
  }
580
- r = requests.post(url, params=params, json={}, verify=False)
646
+ r = requests.post(url, params=params, json={}, verify=False, headers=headers)
581
647
  data_json = r.json()
582
648
  total_page = data_json["totalPages"]
583
649
  big_df = pd.DataFrame()
650
+ tqdm = get_tqdm()
584
651
  for page in tqdm(range(0, int(total_page)), leave=False):
585
652
  params.update({"page": page})
586
- r = requests.post(url, params=params, json={}, verify=False)
653
+ r = requests.post(url, params=params, json={}, verify=False, headers=headers)
587
654
  data_json = r.json()
588
655
  temp_df = pd.DataFrame(data_json["content"])
589
656
  big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
@@ -601,7 +668,9 @@ def amac_fund_account_info() -> pd.DataFrame:
601
668
  "产品名称",
602
669
  "管理人名称",
603
670
  ]
604
- manager_data_out["成立日期"] = pd.to_datetime(manager_data_out["成立日期"], unit="ms")
671
+ manager_data_out["成立日期"] = pd.to_datetime(
672
+ manager_data_out["成立日期"], unit="ms"
673
+ ).dt.date
605
674
  return manager_data_out
606
675
 
607
676
 
@@ -619,13 +688,14 @@ def amac_fund_abs() -> pd.DataFrame:
619
688
  "page": "1",
620
689
  "size": "100",
621
690
  }
622
- r = requests.post(url, params=params, json={}, verify=False)
691
+ r = requests.post(url, params=params, json={}, verify=False, headers=headers)
623
692
  data_json = r.json()
624
693
  total_page = data_json["totalPages"]
625
694
  big_df = pd.DataFrame()
695
+ tqdm = get_tqdm()
626
696
  for page in tqdm(range(0, int(total_page)), leave=False):
627
697
  params.update({"page": page})
628
- r = requests.post(url, params=params, json={}, verify=False)
698
+ r = requests.post(url, params=params, json={}, verify=False, headers=headers)
629
699
  data_json = r.json()
630
700
  temp_df = pd.DataFrame(data_json["content"])
631
701
  big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
@@ -667,7 +737,7 @@ def amac_fund_abs() -> pd.DataFrame:
667
737
  def amac_futures_info() -> pd.DataFrame:
668
738
  """
669
739
  中国证券投资基金业协会-信息公示-基金产品公示-期货公司集合资管产品公示
670
- http://gs.amac.org.cn/amac-infodisc/res/pof/futures/index.html
740
+ https://gs.amac.org.cn/amac-infodisc/res/pof/futures/index.html
671
741
  :return: 期货公司集合资管产品公示
672
742
  :rtype: pandas.DataFrame
673
743
  """
@@ -677,13 +747,14 @@ def amac_futures_info() -> pd.DataFrame:
677
747
  "page": "1",
678
748
  "size": "100",
679
749
  }
680
- r = requests.post(url, params=params, json={}, verify=False)
750
+ r = requests.post(url, params=params, json={}, verify=False, headers=headers)
681
751
  data_json = r.json()
682
752
  total_page = data_json["totalPages"]
683
753
  big_df = pd.DataFrame()
754
+ tqdm = get_tqdm()
684
755
  for page in tqdm(range(0, int(total_page)), leave=False):
685
756
  params.update({"page": page})
686
- r = requests.post(url, params=params, json={}, verify=False)
757
+ r = requests.post(url, params=params, json={}, verify=False, headers=headers)
687
758
  data_json = r.json()
688
759
  temp_df = pd.DataFrame(data_json["content"])
689
760
  big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
@@ -721,7 +792,7 @@ def amac_futures_info() -> pd.DataFrame:
721
792
  def amac_manager_cancelled_info() -> pd.DataFrame:
722
793
  """
723
794
  中国证券投资基金业协会-信息公示-诚信信息公示-已注销私募基金管理人名单
724
- http://gs.amac.org.cn/amac-infodisc/res/cancelled/manager/index.html
795
+ https://gs.amac.org.cn/amac-infodisc/res/cancelled/manager/index.html
725
796
  主动注销: 100
726
797
  依公告注销: 200
727
798
  协会注销: 300
@@ -734,13 +805,14 @@ def amac_manager_cancelled_info() -> pd.DataFrame:
734
805
  "page": "1",
735
806
  "size": "100",
736
807
  }
737
- r = requests.post(url, params=params, json={}, verify=False)
808
+ r = requests.post(url, params=params, json={}, verify=False, headers=headers)
738
809
  data_json = r.json()
739
810
  total_page = data_json["totalPages"]
740
811
  big_df = pd.DataFrame()
812
+ tqdm = get_tqdm()
741
813
  for page in tqdm(range(0, int(total_page)), leave=False):
742
814
  params.update({"page": page})
743
- r = requests.post(url, params=params, json={}, verify=False)
815
+ r = requests.post(url, params=params, json={}, verify=False, headers=headers)
744
816
  data_json = r.json()
745
817
  temp_df = pd.DataFrame(data_json["content"])
746
818
  big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
@@ -760,6 +832,13 @@ def amac_manager_cancelled_info() -> pd.DataFrame:
760
832
  "注销时间",
761
833
  "注销类型",
762
834
  ]
835
+ manager_data_out["登记时间"] = pd.to_datetime(
836
+ manager_data_out["登记时间"], unit="ms"
837
+ ).dt.date
838
+ manager_data_out["注销时间"] = pd.to_datetime(
839
+ manager_data_out["注销时间"], unit="ms"
840
+ ).dt.date
841
+ manager_data_out.sort_values(["注销时间"], ignore_index=True, inplace=True)
763
842
  return manager_data_out
764
843
 
765
844
 
@@ -771,7 +850,7 @@ if __name__ == "__main__":
771
850
 
772
851
  # 中国证券投资基金业协会-信息公示-从业人员信息
773
852
  # 中国证券投资基金业协会-信息公示-从业人员信息-基金从业人员资格注册信息
774
- amac_person_fund_org_list_df = amac_person_fund_org_list()
853
+ amac_person_fund_org_list_df = amac_person_fund_org_list(symbol="公募基金管理公司")
775
854
  print(amac_person_fund_org_list_df)
776
855
 
777
856
  # 中国证券投资基金业协会-信息公示-从业人员信息
@@ -794,9 +873,12 @@ if __name__ == "__main__":
794
873
 
795
874
  # 中国证券投资基金业协会-信息公示-基金产品
796
875
  # 中国证券投资基金业协会-信息公示-基金产品-私募基金管理人基金产品
797
- amac_fund_info_df = amac_fund_info(start_page="1", end_page='100')
876
+ amac_fund_info_df = amac_fund_info(start_page="1", end_page="100")
798
877
  print(amac_fund_info_df)
799
- example_df = amac_fund_info_df[amac_fund_info_df["私募基金管理人名称"].str.contains("聚宽")]
878
+
879
+ example_df = amac_fund_info_df[
880
+ amac_fund_info_df["私募基金管理人名称"].str.contains("聚宽")
881
+ ]
800
882
  print(example_df)
801
883
 
802
884
  # 中国证券投资基金业协会-信息公示-基金产品-证券公司集合资管产品公示