akshare 1.13.46__py3-none-any.whl → 1.17.99__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.
Files changed (388) hide show
  1. akshare/__init__.py +757 -161
  2. akshare/air/air_hebei.py +79 -53
  3. akshare/air/air_zhenqi.py +3 -7
  4. akshare/air/cons.py +1 -0
  5. akshare/air/crypto.js +1 -1
  6. akshare/air/outcrypto.js +1 -1
  7. akshare/air/sunrise_tad.py +32 -17
  8. akshare/article/cons.py +1 -0
  9. akshare/article/epu_index.py +4 -3
  10. akshare/article/ff_factor.py +19 -8
  11. akshare/article/fred_md.py +4 -1
  12. akshare/article/risk_rv.py +3 -8
  13. akshare/bank/bank_cbirc_2020.py +11 -11
  14. akshare/bank/cons.py +7 -6
  15. akshare/bond/bond_buy_back_em.py +228 -0
  16. akshare/bond/bond_cb_sina.py +1 -0
  17. akshare/bond/bond_cb_ths.py +17 -9
  18. akshare/bond/bond_cbond.py +19 -14
  19. akshare/bond/bond_china.py +38 -39
  20. akshare/bond/bond_china_money.py +75 -48
  21. akshare/bond/bond_convert.py +10 -9
  22. akshare/bond/bond_em.py +37 -17
  23. akshare/bond/bond_info_cm.py +28 -8
  24. akshare/bond/bond_issue_cninfo.py +73 -30
  25. akshare/bond/bond_summary.py +38 -37
  26. akshare/bond/bond_zh_cov.py +31 -40
  27. akshare/bond/bond_zh_sina.py +61 -51
  28. akshare/bond/cons.py +14 -11
  29. akshare/cal/__init__.py +0 -0
  30. akshare/cal/rv.py +170 -0
  31. akshare/cost/cost_living.py +7 -5
  32. akshare/crypto/__init__.py +1 -1
  33. akshare/crypto/crypto_bitcoin_cme.py +9 -7
  34. akshare/crypto/crypto_hold.py +4 -2
  35. akshare/currency/currency.py +1 -0
  36. akshare/currency/currency_china_bank_sina.py +11 -6
  37. akshare/currency/currency_safe.py +7 -6
  38. akshare/data/__init__.py +1 -1
  39. akshare/data/cninfo.js +1 -1
  40. akshare/datasets.py +10 -21
  41. akshare/economic/cons.py +10 -3
  42. akshare/economic/macro_australia.py +74 -69
  43. akshare/economic/macro_bank.py +95 -653
  44. akshare/economic/macro_canada.py +92 -81
  45. akshare/economic/macro_china.py +163 -117
  46. akshare/economic/macro_china_hk.py +0 -1
  47. akshare/economic/macro_china_nbs.py +24 -7
  48. akshare/economic/macro_euro.py +103 -56
  49. akshare/economic/macro_finance_ths.py +135 -0
  50. akshare/economic/macro_germany.py +1 -1
  51. akshare/economic/macro_info_ws.py +100 -0
  52. akshare/economic/macro_japan.py +0 -1
  53. akshare/economic/macro_other.py +1 -6
  54. akshare/economic/macro_swiss.py +2 -3
  55. akshare/economic/macro_uk.py +1 -1
  56. akshare/economic/macro_usa.py +7 -9
  57. akshare/economic/marco_cnbs.py +11 -6
  58. akshare/energy/energy_carbon.py +94 -126
  59. akshare/energy/energy_oil_em.py +1 -2
  60. akshare/event/cons.py +1 -0
  61. akshare/event/migration.py +3 -2
  62. akshare/exceptions.py +43 -0
  63. akshare/file_fold/calendar.json +245 -2
  64. akshare/forex/__init__.py +0 -0
  65. akshare/forex/cons.py +192 -0
  66. akshare/forex/forex_em.py +149 -0
  67. akshare/fortune/fortune_500.py +15 -48
  68. akshare/fortune/fortune_bloomberg.py +6 -3
  69. akshare/fortune/fortune_forbes_500.py +3 -6
  70. akshare/fortune/fortune_hurun.py +2 -1
  71. akshare/fortune/fortune_xincaifu_500.py +17 -14
  72. akshare/fund/fund_amac.py +38 -15
  73. akshare/fund/fund_announcement_em.py +145 -0
  74. akshare/fund/fund_aum_em.py +49 -35
  75. akshare/fund/fund_em.py +251 -220
  76. akshare/fund/fund_etf_em.py +44 -35
  77. akshare/fund/fund_etf_sina.py +76 -27
  78. akshare/fund/fund_etf_ths.py +95 -0
  79. akshare/fund/fund_fee_em.py +172 -0
  80. akshare/fund/fund_fhsp_em.py +42 -32
  81. akshare/fund/fund_init_em.py +8 -5
  82. akshare/fund/fund_lof_em.py +12 -19
  83. akshare/fund/fund_manager.py +25 -11
  84. akshare/fund/fund_overview_em.py +42 -0
  85. akshare/fund/fund_portfolio_em.py +78 -66
  86. akshare/fund/fund_position_lg.py +19 -8
  87. akshare/fund/fund_rank_em.py +90 -84
  88. akshare/fund/fund_rating.py +33 -12
  89. akshare/fund/fund_report_cninfo.py +63 -48
  90. akshare/fund/fund_scale_em.py +24 -13
  91. akshare/fund/fund_scale_sina.py +20 -10
  92. akshare/fund/fund_xq.py +3 -2
  93. akshare/futures/cons.py +141 -46
  94. akshare/futures/cot.py +89 -88
  95. akshare/futures/futures_basis.py +99 -33
  96. akshare/futures/futures_comex_em.py +1 -0
  97. akshare/futures/futures_comm_ctp.py +13 -2
  98. akshare/futures/futures_contract_detail.py +59 -9
  99. akshare/futures/futures_daily_bar.py +75 -62
  100. akshare/futures/futures_foreign.py +14 -8
  101. akshare/futures/futures_hf_em.py +215 -61
  102. akshare/futures/futures_hist_em.py +191 -0
  103. akshare/futures/futures_hq_sina.py +79 -61
  104. akshare/futures/futures_index_ccidx.py +24 -82
  105. akshare/futures/futures_inventory_99.py +70 -272
  106. akshare/futures/futures_inventory_em.py +14 -11
  107. akshare/futures/futures_news_shmet.py +2 -2
  108. akshare/futures/futures_roll_yield.py +11 -24
  109. akshare/futures/futures_rule.py +7 -3
  110. akshare/futures/futures_rule_em.py +38 -0
  111. akshare/futures/futures_settlement_price_sgx.py +21 -6
  112. akshare/futures/futures_stock_js.py +1 -2
  113. akshare/futures/futures_to_spot.py +43 -39
  114. akshare/futures/futures_warehouse_receipt.py +53 -48
  115. akshare/futures/futures_zh_sina.py +4 -4
  116. akshare/futures/receipt.py +298 -165
  117. akshare/futures/requests_fun.py +16 -3
  118. akshare/futures/symbol_var.py +32 -13
  119. akshare/futures_derivative/cons.py +100 -103
  120. akshare/futures_derivative/futures_contract_info_cffex.py +55 -39
  121. akshare/futures_derivative/futures_contract_info_czce.py +2 -0
  122. akshare/futures_derivative/futures_contract_info_dce.py +43 -17
  123. akshare/futures_derivative/futures_contract_info_gfex.py +43 -31
  124. akshare/futures_derivative/futures_contract_info_ine.py +43 -34
  125. akshare/futures_derivative/futures_contract_info_shfe.py +7 -8
  126. akshare/futures_derivative/futures_cot_sina.py +28 -19
  127. akshare/futures_derivative/futures_index_sina.py +25 -13
  128. akshare/fx/cons.py +12 -7
  129. akshare/fx/currency_investing.py +19 -285
  130. akshare/fx/fx_c_swap_cm.py +62 -0
  131. akshare/fx/fx_quote.py +3 -2
  132. akshare/fx/fx_quote_baidu.py +2 -1
  133. akshare/hf/__init__.py +1 -1
  134. akshare/hf/hf_sp500.py +8 -7
  135. akshare/index/cons.py +132 -28
  136. akshare/index/index_cflp.py +29 -26
  137. akshare/index/index_cni.py +89 -91
  138. akshare/index/index_cons.py +26 -10
  139. akshare/index/index_csindex.py +68 -0
  140. akshare/index/index_cx.py +263 -62
  141. akshare/index/index_drewry.py +17 -16
  142. akshare/index/index_eri.py +1 -0
  143. akshare/index/index_global_em.py +167 -0
  144. akshare/index/index_global_sina.py +82 -0
  145. akshare/index/index_kq_fz.py +17 -14
  146. akshare/index/index_kq_ss.py +1 -0
  147. akshare/index/index_option_qvix.py +351 -16
  148. akshare/index/index_research_sw.py +38 -38
  149. akshare/index/index_spot.py +9 -5
  150. akshare/index/index_stock_hk.py +6 -10
  151. akshare/index/index_stock_us_sina.py +1 -1
  152. akshare/index/index_stock_zh.py +193 -101
  153. akshare/index/index_stock_zh_csindex.py +15 -369
  154. akshare/index/index_sugar.py +18 -4
  155. akshare/index/index_sw.py +62 -34
  156. akshare/index/index_yw.py +53 -75
  157. akshare/index/index_zh_em.py +15 -82
  158. akshare/interest_rate/interbank_rate_em.py +14 -10
  159. akshare/movie/artist_yien.py +32 -5
  160. akshare/movie/jm.js +0 -1
  161. akshare/movie/movie_yien.py +92 -18
  162. akshare/movie/video_yien.py +28 -5
  163. akshare/news/__init__.py +1 -1
  164. akshare/news/news_baidu.py +395 -220
  165. akshare/news/news_cctv.py +38 -38
  166. akshare/news/news_stock.py +49 -13
  167. akshare/nlp/nlp_interface.py +7 -8
  168. akshare/option/cons.py +12 -12
  169. akshare/option/option_comm_qihuo.py +86 -0
  170. akshare/option/option_commodity.py +355 -211
  171. akshare/option/option_commodity_sina.py +22 -26
  172. akshare/option/option_contract_info_ctp.py +63 -0
  173. akshare/option/option_current_sse.py +61 -0
  174. akshare/option/option_current_szse.py +84 -0
  175. akshare/option/option_czce.py +37 -9
  176. akshare/option/option_daily_stats_sse_szse.py +145 -0
  177. akshare/option/option_em.py +4 -8
  178. akshare/option/option_finance.py +60 -12
  179. akshare/option/option_finance_sina.py +28 -26
  180. akshare/option/option_lhb_em.py +62 -57
  181. akshare/option/option_margin.py +62 -0
  182. akshare/option/option_premium_analysis_em.py +58 -53
  183. akshare/option/option_risk_analysis_em.py +11 -8
  184. akshare/option/option_risk_indicator_sse.py +18 -16
  185. akshare/option/option_value_analysis_em.py +62 -55
  186. akshare/other/__init__.py +1 -1
  187. akshare/other/other_car_cpca.py +20 -20
  188. akshare/pro/__init__.py +0 -1
  189. akshare/pro/client.py +6 -4
  190. akshare/pro/cons.py +3 -2
  191. akshare/pro/data_pro.py +6 -5
  192. akshare/qdii/__init__.py +0 -0
  193. akshare/qdii/qdii_jsl.py +233 -0
  194. akshare/qhkc/__init__.py +1 -6
  195. akshare/qhkc/qhkc_api.py +64 -22
  196. akshare/qhkc_web/__init__.py +1 -6
  197. akshare/qhkc_web/qhkc_fund.py +10 -6
  198. akshare/qhkc_web/qhkc_index.py +28 -14
  199. akshare/qhkc_web/qhkc_tool.py +62 -59
  200. akshare/rate/__init__.py +1 -1
  201. akshare/rate/repo_rate.py +36 -32
  202. akshare/reits/__init__.py +1 -1
  203. akshare/reits/reits_basic.py +149 -13
  204. akshare/request.py +117 -0
  205. akshare/spot/__init__.py +1 -1
  206. akshare/spot/spot_hog_soozhu.py +232 -0
  207. akshare/spot/spot_price_qh.py +121 -0
  208. akshare/spot/spot_sge.py +70 -9
  209. akshare/stock/cons.py +60 -23
  210. akshare/stock/stock_allotment_cninfo.py +10 -9
  211. akshare/stock/stock_ask_bid_em.py +3 -78
  212. akshare/stock/stock_board_concept_em.py +160 -35
  213. akshare/stock/stock_board_industry_em.py +163 -70
  214. akshare/stock/stock_cg_equity_mortgage.py +15 -11
  215. akshare/stock/stock_cg_guarantee.py +41 -51
  216. akshare/stock/stock_cg_lawsuit.py +36 -35
  217. akshare/stock/stock_dividend_cninfo.py +36 -16
  218. akshare/stock/stock_dzjy_em.py +347 -260
  219. akshare/stock/stock_fund_em.py +73 -64
  220. akshare/stock/stock_fund_hold.py +1 -2
  221. akshare/stock/stock_gsrl_em.py +1 -0
  222. akshare/stock/stock_hk_comparison_em.py +175 -0
  223. akshare/stock/stock_hk_famous.py +107 -0
  224. akshare/stock/stock_hk_fhpx_ths.py +2 -1
  225. akshare/stock/stock_hk_hot_rank_em.py +1 -0
  226. akshare/stock/stock_hk_sina.py +91 -42
  227. akshare/stock/stock_hold_control_cninfo.py +100 -15
  228. akshare/stock/stock_hold_control_em.py +4 -5
  229. akshare/stock/stock_hold_num_cninfo.py +18 -12
  230. akshare/stock/stock_hot_rank_em.py +4 -1
  231. akshare/stock/stock_hot_search_baidu.py +32 -19
  232. akshare/stock/stock_hot_up_em.py +4 -1
  233. akshare/stock/stock_hsgt_em.py +155 -0
  234. akshare/stock/stock_industry.py +1 -0
  235. akshare/stock/stock_industry_cninfo.py +25 -20
  236. akshare/stock/stock_industry_pe_cninfo.py +45 -31
  237. akshare/stock/stock_industry_sw.py +5 -9
  238. akshare/stock/stock_info.py +31 -19
  239. akshare/stock/stock_info_em.py +17 -11
  240. akshare/stock/stock_intraday_em.py +9 -80
  241. akshare/stock/stock_intraday_sina.py +2 -2
  242. akshare/stock/stock_ipo_summary_cninfo.py +25 -10
  243. akshare/stock/stock_new_cninfo.py +32 -19
  244. akshare/stock/stock_news_cx.py +39 -0
  245. akshare/stock/stock_profile_cninfo.py +9 -8
  246. akshare/stock/stock_profile_em.py +302 -0
  247. akshare/stock/stock_rank_forecast.py +8 -6
  248. akshare/stock/stock_repurchase_em.py +7 -2
  249. akshare/stock/stock_share_changes_cninfo.py +18 -14
  250. akshare/stock/stock_share_hold.py +24 -20
  251. akshare/stock/stock_stop.py +6 -6
  252. akshare/stock/stock_summary.py +153 -417
  253. akshare/stock/stock_us_famous.py +19 -11
  254. akshare/stock/stock_us_js.py +3 -2
  255. akshare/stock/stock_us_pink.py +38 -27
  256. akshare/stock/stock_us_sina.py +15 -12
  257. akshare/stock/stock_weibo_nlp.py +18 -20
  258. akshare/stock/stock_xq.py +36 -9
  259. akshare/stock/stock_zh_a_sina.py +58 -80
  260. akshare/stock/stock_zh_a_special.py +240 -243
  261. akshare/stock/stock_zh_a_tick_tx.py +11 -3
  262. akshare/stock/stock_zh_ah_tx.py +23 -26
  263. akshare/stock/stock_zh_b_sina.py +32 -55
  264. akshare/stock/stock_zh_comparison_em.py +250 -0
  265. akshare/stock/stock_zh_kcb_report.py +11 -9
  266. akshare/stock/stock_zh_kcb_sina.py +67 -64
  267. akshare/stock_a/__init__.py +0 -0
  268. akshare/stock_a/stock_board_concept_name_em.py +170 -0
  269. akshare/stock_a/stock_individual_fund_flow_rank.py +258 -0
  270. akshare/stock_a/stock_zh_a_spot.py +212 -0
  271. akshare/stock_feature/cons.py +1 -0
  272. akshare/stock_feature/stock_a_below_net_asset_statistics.py +5 -2
  273. akshare/stock_feature/stock_a_high_low.py +5 -2
  274. akshare/stock_feature/stock_a_indicator.py +15 -57
  275. akshare/stock_feature/stock_a_pe_and_pb.py +39 -9
  276. akshare/stock_feature/stock_account_em.py +0 -1
  277. akshare/stock_feature/stock_all_pb.py +2 -1
  278. akshare/stock_feature/stock_analyst_em.py +36 -30
  279. akshare/stock_feature/stock_board_concept_ths.py +144 -252
  280. akshare/stock_feature/stock_board_industry_ths.py +137 -401
  281. akshare/stock_feature/stock_buffett_index_lg.py +10 -8
  282. akshare/stock_feature/stock_classify_sina.py +3 -6
  283. akshare/stock_feature/stock_comment_em.py +81 -144
  284. akshare/stock_feature/stock_concept_futu.py +183 -0
  285. akshare/stock_feature/stock_congestion_lg.py +2 -1
  286. akshare/stock_feature/stock_cyq_em.py +5 -11
  287. akshare/stock_feature/stock_disclosure_cninfo.py +20 -10
  288. akshare/stock_feature/stock_dxsyl_em.py +121 -74
  289. akshare/stock_feature/stock_ebs_lg.py +5 -4
  290. akshare/stock_feature/stock_esg_sina.py +33 -15
  291. akshare/stock_feature/stock_fhps_em.py +62 -26
  292. akshare/stock_feature/stock_fhps_ths.py +34 -7
  293. akshare/stock_feature/stock_fund_flow.py +38 -25
  294. akshare/stock_feature/stock_gddh_em.py +19 -11
  295. akshare/stock_feature/stock_gdfx_em.py +226 -113
  296. akshare/stock_feature/stock_gdhs.py +75 -50
  297. akshare/stock_feature/stock_gdzjc_em.py +21 -10
  298. akshare/stock_feature/stock_gpzy_em.py +78 -46
  299. akshare/stock_feature/stock_gxl_lg.py +3 -2
  300. akshare/stock_feature/stock_hist_em.py +158 -237
  301. akshare/stock_feature/stock_hist_tx.py +13 -10
  302. akshare/stock_feature/stock_hk_valuation_baidu.py +20 -8
  303. akshare/stock_feature/stock_hot_xq.py +4 -6
  304. akshare/stock_feature/stock_hsgt_em.py +269 -97
  305. akshare/stock_feature/stock_hsgt_exchange_rate.py +115 -87
  306. akshare/stock_feature/stock_hsgt_min_em.py +13 -16
  307. akshare/stock_feature/stock_info.py +8 -81
  308. akshare/stock_feature/stock_inner_trade_xq.py +38 -31
  309. akshare/stock_feature/stock_irm_cninfo.py +32 -9
  310. akshare/stock_feature/stock_jgdy_em.py +43 -40
  311. akshare/stock_feature/stock_lh_yybpm.py +36 -37
  312. akshare/stock_feature/stock_lhb_em.py +165 -35
  313. akshare/stock_feature/stock_lhb_sina.py +93 -46
  314. akshare/stock_feature/stock_margin_em.py +101 -0
  315. akshare/stock_feature/{stock_sse_margin.py → stock_margin_sse.py} +21 -17
  316. akshare/stock_feature/{stock_szse_margin.py → stock_margin_szse.py} +7 -7
  317. akshare/stock_feature/stock_market_legu.py +4 -2
  318. akshare/stock_feature/stock_pankou_em.py +71 -35
  319. akshare/stock_feature/stock_qsjy_em.py +13 -4
  320. akshare/stock_feature/stock_report_em.py +152 -8
  321. akshare/stock_feature/stock_research_report_em.py +55 -20
  322. akshare/stock_feature/stock_sns_sseinfo.py +15 -12
  323. akshare/stock_feature/stock_sy_em.py +20 -15
  324. akshare/stock_feature/stock_technology_ths.py +152 -120
  325. akshare/stock_feature/stock_tfp_em.py +37 -14
  326. akshare/stock_feature/stock_three_report_em.py +120 -78
  327. akshare/stock_feature/stock_ttm_lyr.py +18 -9
  328. akshare/stock_feature/stock_value_em.py +83 -0
  329. akshare/stock_feature/stock_yjbb_em.py +58 -32
  330. akshare/stock_feature/stock_yjyg_cninfo.py +6 -2
  331. akshare/stock_feature/stock_yjyg_em.py +1 -1
  332. akshare/stock_feature/stock_yzxdr_em.py +24 -22
  333. akshare/stock_feature/stock_zdhtmx_em.py +20 -6
  334. akshare/stock_feature/stock_zh_valuation_baidu.py +3 -2
  335. akshare/stock_feature/stock_zh_vote_baidu.py +4 -1
  336. akshare/stock_feature/stock_ztb_em.py +39 -24
  337. akshare/stock_fundamental/__init__.py +1 -1
  338. akshare/stock_fundamental/stock_basic_info_xq.py +119 -0
  339. akshare/stock_fundamental/{stock_finance_hk.py → stock_finance_hk_em.py} +23 -16
  340. akshare/stock_fundamental/{stock_finance.py → stock_finance_sina.py} +203 -59
  341. akshare/stock_fundamental/stock_finance_ths.py +524 -57
  342. akshare/stock_fundamental/stock_finance_us_em.py +268 -0
  343. akshare/stock_fundamental/stock_gbjg_em.py +80 -0
  344. akshare/stock_fundamental/stock_hold.py +26 -17
  345. akshare/stock_fundamental/stock_ipo_declare.py +1 -0
  346. akshare/stock_fundamental/stock_kcb_detail_sse.py +10 -10
  347. akshare/stock_fundamental/stock_kcb_sse.py +26 -25
  348. akshare/stock_fundamental/stock_notice.py +41 -18
  349. akshare/stock_fundamental/stock_profit_forecast_em.py +31 -13
  350. akshare/stock_fundamental/stock_profit_forecast_hk_etnet.py +64 -41
  351. akshare/stock_fundamental/stock_profit_forecast_ths.py +86 -35
  352. akshare/stock_fundamental/stock_recommend.py +20 -4
  353. akshare/stock_fundamental/stock_register_em.py +448 -0
  354. akshare/stock_fundamental/stock_zygc.py +5 -62
  355. akshare/tool/trade_date_hist.py +1 -1
  356. akshare/utils/context.py +43 -0
  357. akshare/utils/demjson.py +2009 -1338
  358. akshare/utils/func.py +49 -2
  359. akshare/utils/multi_decrypt.py +53 -0
  360. akshare/utils/token_process.py +6 -5
  361. akshare/utils/tqdm.py +13 -3
  362. {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info}/METADATA +56 -86
  363. akshare-1.17.99.dist-info/RECORD +409 -0
  364. {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info}/WHEEL +1 -1
  365. {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info/licenses}/LICENSE +1 -1
  366. tests/test_func.py +3 -5
  367. akshare/bond/bond_futures.py +0 -50
  368. akshare/bond/bond_investing.py +0 -139
  369. akshare/crypto/crypto_hist_investing.py +0 -249
  370. akshare/fortune/fortune_it_juzi.py +0 -123
  371. akshare/fund/fund_announcement.py +0 -56
  372. akshare/futures/futures_international.py +0 -170
  373. akshare/futures/futures_news_baidu.py +0 -54
  374. akshare/futures/inventory_data.py +0 -100
  375. akshare/futures_derivative/futures_index_price_nh.py +0 -61
  376. akshare/futures_derivative/futures_index_return_nh.py +0 -47
  377. akshare/futures_derivative/futures_index_volatility_nh.py +0 -51
  378. akshare/futures_derivative/futures_other_index_nh.py +0 -145
  379. akshare/index/index_fear_greed_funddb.py +0 -78
  380. akshare/index/index_investing.py +0 -232
  381. akshare/sport/__init__.py +0 -6
  382. akshare/sport/sport_olympic.py +0 -27
  383. akshare/sport/sport_olympic_winter.py +0 -39
  384. akshare/stock_feature/stock_wencai.py +0 -104
  385. akshare/stock_fundamental/stock_mda_ym.py +0 -40
  386. akshare/stock_fundamental/stock_register.py +0 -292
  387. akshare-1.13.46.dist-info/RECORD +0 -380
  388. {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info}/top_level.txt +0 -0
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/3/11 17:22
4
+ Date: 2024/8/4 17:22
5
5
  Desc: 历年世界 500 强榜单数据
6
6
  https://www.fortunechina.com/fortune500/index.htm
7
7
  特殊情况说明:
8
8
  2010年由于网页端没有公布公司所属的国家, 故 2010 年数据没有国家这列
9
9
  """
10
- import json
10
+
11
11
  from functools import lru_cache
12
12
  from io import StringIO
13
13
 
@@ -28,12 +28,12 @@ def _fortune_rank_year_url_map() -> dict:
28
28
  url = "https://www.fortunechina.com/fortune500/index.htm"
29
29
  r = requests.get(url)
30
30
  soup = BeautifulSoup(r.text, features="lxml")
31
- url_2023 = soup.find(name='meta', attrs={"property": "og:url"})['content'].strip()
32
- node_list = soup.find_all(name='div', attrs={"class": "swiper-slide"})
33
- url_list = [item.find("a")['href'] for item in node_list]
31
+ url_2023 = "https://www.fortunechina.com/fortune500/c/2023-08/02/content_436874.htm"
32
+ node_list = soup.find_all(name="div", attrs={"class": "swiper-slide"})
33
+ url_list = [item.find("a")["href"] for item in node_list]
34
34
  year_list = [item.find("a").text for item in node_list]
35
35
  year_url_map = dict(zip(year_list, url_list))
36
- year_url_map['2023'] = url_2023
36
+ year_url_map["2023"] = url_2023
37
37
  return year_url_map
38
38
 
39
39
 
@@ -49,17 +49,17 @@ def fortune_rank(year: str = "2015") -> pd.DataFrame:
49
49
  r = requests.get(url)
50
50
  r.encoding = "utf-8"
51
51
  if int(year) < 2007:
52
- df = pd.read_html(StringIO(r.text))[0].iloc[1:-1, ]
52
+ df = pd.read_html(StringIO(r.text))[0].iloc[1:-1,]
53
53
  df.columns = pd.read_html(StringIO(r.text))[0].iloc[0, :].tolist()
54
54
  return df
55
55
  elif 2006 < int(year) < 2010:
56
- df = pd.read_html(StringIO(r.text))[0].iloc[1:, ]
56
+ df = pd.read_html(StringIO(r.text))[0].iloc[1:,]
57
57
  df.columns = pd.read_html(StringIO(r.text))[0].iloc[0, :].tolist()
58
58
  for page in tqdm(range(2, 11), leave=False):
59
59
  # page =2
60
60
  r = requests.get(url.rsplit(".", maxsplit=1)[0] + "_" + str(page) + ".htm")
61
61
  r.encoding = "utf-8"
62
- temp_df = pd.read_html(StringIO(r.text))[0].iloc[1:, ]
62
+ temp_df = pd.read_html(StringIO(r.text))[0].iloc[1:,]
63
63
  temp_df.columns = pd.read_html(StringIO(r.text))[0].iloc[0, :].tolist()
64
64
  df = pd.concat(objs=[df, temp_df], ignore_index=True)
65
65
  return df
@@ -68,53 +68,20 @@ def fortune_rank(year: str = "2015") -> pd.DataFrame:
68
68
  return df
69
69
 
70
70
 
71
- def fortune_rank_eng(year: str = "2023") -> pd.DataFrame:
72
- """
73
- 注意你的网速
74
- https://fortune.com/ranking/global500/
75
- https://fortune.com/global500/2012/search/
76
- :param year: "1995"
77
- :type year: str
78
- :return: 历年排名
79
- :rtype: pandas.DataFrame
80
- """
81
- url = f"https://fortune.com/ranking/global500/{year}/search/"
82
- res = requests.get(url)
83
- soup = BeautifulSoup(res.text, "lxml")
84
- code = json.loads(soup.find("script", attrs={"type": "application/ld+json"}).string)["identifier"]
85
- url = f"https://content.fortune.com/wp-json/irving/v1/data/franchise-search-results"
86
- params = {
87
- "list_id": code,
88
- "token": "Zm9ydHVuZTpCcHNyZmtNZCN5SndjWkkhNHFqMndEOTM=",
89
- }
90
- res = requests.get(url, params=params)
91
- big_df = pd.DataFrame()
92
- for i in range(len(res.json()[1]["items"][0]['fields'])):
93
- temp_df = pd.DataFrame([item["fields"][i] for item in res.json()[1]["items"]])
94
- big_df[temp_df["key"].values[0]] = temp_df["value"]
95
- big_df["rank"] = big_df["rank"].astype(int)
96
- big_df.sort_values(by="rank", inplace=True)
97
- big_df.reset_index(drop=True, inplace=True)
98
- return big_df
99
-
100
-
101
- if __name__ == '__main__':
102
- fortune_rank_eng_df = fortune_rank_eng(year="2022")
103
- print(fortune_rank_eng_df)
104
-
105
- fortune_rank_df = fortune_rank(year='2023') # 2010 不一样
71
+ if __name__ == "__main__":
72
+ fortune_rank_df = fortune_rank(year="2023") # 2010 不一样
106
73
  print(fortune_rank_df)
107
74
 
108
- fortune_rank_df = fortune_rank(year='2022') # 2010 不一样
75
+ fortune_rank_df = fortune_rank(year="2022") # 2010 不一样
109
76
  print(fortune_rank_df)
110
77
 
111
- fortune_rank_df = fortune_rank(year='2008') # 2010 不一样
78
+ fortune_rank_df = fortune_rank(year="2008") # 2010 不一样
112
79
  print(fortune_rank_df)
113
80
 
114
- fortune_rank_df = fortune_rank(year='2008') # 2010 不一样
81
+ fortune_rank_df = fortune_rank(year="2008") # 2010 不一样
115
82
  print(fortune_rank_df)
116
83
 
117
- fortune_rank_df = fortune_rank(year='2009') # 2010 不一样
84
+ fortune_rank_df = fortune_rank(year="2009") # 2010 不一样
118
85
  print(fortune_rank_df)
119
86
 
120
87
  for item in range(1996, 2008):
@@ -5,6 +5,7 @@ Date: 2022/4/10 18:24
5
5
  Desc: 彭博亿万富豪指数
6
6
  https://www.bloomberg.com/billionaires/
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
  from bs4 import BeautifulSoup
@@ -34,8 +35,8 @@ def index_bloomberg_billionaires_hist(year: str = "2021") -> pd.DataFrame:
34
35
  for dic_key in dic_keys:
35
36
  dic[dic_key] = []
36
37
 
37
- for l in trs:
38
- item = l.findAll("td")
38
+ for ll in trs:
39
+ item = ll.findAll("td")
39
40
  for i in range(len(item)):
40
41
  v = item[i].text
41
42
  if i == 0 and not v.isdigit():
@@ -110,5 +111,7 @@ if __name__ == "__main__":
110
111
  index_bloomberg_billionaires_df = index_bloomberg_billionaires()
111
112
  print(index_bloomberg_billionaires_df)
112
113
 
113
- index_bloomberg_billionaires_hist_df = index_bloomberg_billionaires_hist(year="2021")
114
+ index_bloomberg_billionaires_hist_df = index_bloomberg_billionaires_hist(
115
+ year="2021"
116
+ )
114
117
  print(index_bloomberg_billionaires_hist_df)
@@ -5,6 +5,7 @@ Date: 2022/1/26 15:10
5
5
  Desc: 福布斯中国-榜单
6
6
  https://www.forbeschina.com/lists
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
  from bs4 import BeautifulSoup
@@ -24,8 +25,7 @@ def forbes_rank(symbol: str = "2021福布斯中国创投人100") -> pd.DataFrame
24
25
  r = requests.get(url, verify=False)
25
26
  soup = BeautifulSoup(r.text, "lxml")
26
27
  need_list = [
27
- item.find_all("a")
28
- for item in soup.find_all("div", attrs={"class": "col-sm-4"})
28
+ item.find_all("a") for item in soup.find_all("div", attrs={"class": "col-sm-4"})
29
29
  ]
30
30
  all_list = []
31
31
  for item in need_list:
@@ -33,10 +33,7 @@ def forbes_rank(symbol: str = "2021福布斯中国创投人100") -> pd.DataFrame
33
33
  name_url_dict = dict(
34
34
  zip(
35
35
  [item.text.strip() for item in all_list],
36
- [
37
- "https://www.forbeschina.com" + item["href"]
38
- for item in all_list
39
- ],
36
+ ["https://www.forbeschina.com" + item["href"] for item in all_list],
40
37
  )
41
38
  )
42
39
  r = requests.get(name_url_dict[symbol], verify=False)
@@ -5,6 +5,7 @@ Date: 2023/12/22 20:00
5
5
  Desc: 胡润排行榜
6
6
  https://www.hurun.net/
7
7
  """
8
+
8
9
  import warnings
9
10
 
10
11
  import pandas as pd
@@ -76,7 +77,7 @@ def hurun_rank(indicator: str = "胡润百富榜", year: str = "2023") -> pd.Dat
76
77
  temp_df = pd.DataFrame(data_json["rows"])
77
78
  offset = offset + 20
78
79
  big_df = pd.concat([big_df, temp_df], ignore_index=True)
79
- except requests.exceptions.JSONDecodeError as e:
80
+ except requests.exceptions.JSONDecodeError:
80
81
  offset = offset + 40
81
82
  continue
82
83
  big_df.rename(
@@ -5,6 +5,7 @@ Date: 2022/10/30 21:12
5
5
  Desc: 新财富 500 人富豪榜
6
6
  http://www.xcf.cn/zhuanti/ztzz/hdzt1/500frb/index.html
7
7
  """
8
+
8
9
  import json
9
10
 
10
11
  import pandas as pd
@@ -32,26 +33,28 @@ def xincaifu_rank(year: str = "2022") -> pd.DataFrame:
32
33
  "year": year,
33
34
  "pageNo": "1",
34
35
  "from": "jsonp",
35
- "_": "1604722171732",
36
36
  }
37
37
  r = requests.get(url, params=params)
38
38
  data_text = r.text
39
39
  data_json = json.loads(data_text[data_text.find("{") : -1])
40
40
  temp_df = pd.DataFrame(data_json["data"]["rows"])
41
41
  temp_df.columns
42
- temp_df.rename(columns={
43
- 'assets': "财富",
44
- 'year': "年份",
45
- 'sex': "性别",
46
- 'name': "姓名",
47
- 'rank': "排名",
48
- 'company': "主要公司",
49
- 'industry': "相关行业",
50
- 'id': "-",
51
- 'addr': "公司总部",
52
- 'rankLst': "-",
53
- 'age': "年龄",
54
- }, inplace=True)
42
+ temp_df.rename(
43
+ columns={
44
+ "assets": "财富",
45
+ "year": "年份",
46
+ "sex": "性别",
47
+ "name": "姓名",
48
+ "rank": "排名",
49
+ "company": "主要公司",
50
+ "industry": "相关行业",
51
+ "id": "-",
52
+ "addr": "公司总部",
53
+ "rankLst": "-",
54
+ "age": "年龄",
55
+ },
56
+ inplace=True,
57
+ )
55
58
  temp_df = temp_df[
56
59
  [
57
60
  "排名",
akshare/fund/fund_amac.py CHANGED
@@ -1,7 +1,7 @@
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
  """
@@ -23,7 +23,7 @@ def _get_pages(url: str = "", payload: str = "") -> pd.DataFrame:
23
23
  中国证券投资基金业协会-信息公示-私募基金管理人公示 页数
24
24
  暂时不使用本函数, 直接可以获取所有数据
25
25
  """
26
- res = requests.post(url=url, json=payload, headers=headers, verify=False)
26
+ res = requests.post(url=url, json=payload, headers=headers)
27
27
  res.encoding = "utf-8"
28
28
  json_df = res.json()
29
29
  return json_df["totalPages"]
@@ -33,7 +33,7 @@ def get_data(url: str = "", payload: str = "") -> pd.DataFrame:
33
33
  """
34
34
  中国证券投资基金业协会-信息公示-私募基金管理人公示
35
35
  """
36
- res = requests.post(url=url, json=payload, headers=headers, verify=False)
36
+ res = requests.post(url=url, json=payload, headers=headers)
37
37
  res.encoding = "utf-8"
38
38
  json_df = res.json()
39
39
  return json_df
@@ -52,16 +52,16 @@ def amac_member_info() -> pd.DataFrame:
52
52
  params = {
53
53
  "rand": "0.7665138514630696",
54
54
  "page": "1",
55
- "size": "100",
55
+ "size": "20",
56
56
  }
57
- r = requests.post(url, params=params, json={}, verify=False, headers=headers)
57
+ r = requests.post(url, params=params, json={}, headers=headers)
58
58
  data_json = r.json()
59
59
  total_page = data_json["totalPages"]
60
60
  big_df = pd.DataFrame()
61
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, headers=headers)
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)
@@ -105,21 +105,44 @@ def amac_person_fund_org_list(symbol: str = "公募基金管理公司") -> pd.Da
105
105
  :return: 基金从业人员资格注册信息
106
106
  :rtype: pandas.DataFrame
107
107
  """
108
- from pypinyin import lazy_pinyin
109
-
110
- pinyin_raw_list = lazy_pinyin(symbol)
111
- 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
+ }
112
136
  url = "https://gs.amac.org.cn/amac-infodisc/api/pof/personOrg"
113
137
  params = {
114
138
  "rand": "0.7665138514630696",
115
139
  "page": "1",
116
- "size": "100",
140
+ "size": "20",
117
141
  }
118
142
  r = requests.post(
119
143
  url,
120
144
  params=params,
121
- json={"orgType": symbol_trans, "page": "1"},
122
- verify=False,
145
+ json={"orgType": symbol_map[symbol], "page": "1"},
123
146
  headers=headers,
124
147
  )
125
148
  data_json = r.json()
@@ -131,7 +154,7 @@ def amac_person_fund_org_list(symbol: str = "公募基金管理公司") -> pd.Da
131
154
  r = requests.post(
132
155
  url,
133
156
  params=params,
134
- json={"orgType": symbol_trans, "page": "1"},
157
+ json={"orgType": symbol_map[symbol], "page": "1"},
135
158
  verify=False,
136
159
  headers=headers,
137
160
  )
@@ -827,7 +850,7 @@ if __name__ == "__main__":
827
850
 
828
851
  # 中国证券投资基金业协会-信息公示-从业人员信息
829
852
  # 中国证券投资基金业协会-信息公示-从业人员信息-基金从业人员资格注册信息
830
- amac_person_fund_org_list_df = amac_person_fund_org_list()
853
+ amac_person_fund_org_list_df = amac_person_fund_org_list(symbol="公募基金管理公司")
831
854
  print(amac_person_fund_org_list_df)
832
855
 
833
856
  # 中国证券投资基金业协会-信息公示-从业人员信息
@@ -0,0 +1,145 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ Date: 2025/9/20 17:40
5
+ Desc: 东方财富网站-天天基金网-基金档案-基金公告
6
+ https://fundf10.eastmoney.com/jjgg_000001.html
7
+ """
8
+
9
+ import time
10
+
11
+ import pandas as pd
12
+ import requests
13
+
14
+
15
+ def fund_announcement_dividend_em(symbol: str = "000001") -> pd.DataFrame:
16
+ """
17
+ 东方财富网站-天天基金网-基金档案-基金公告-分红配送
18
+ https://fundf10.eastmoney.com/jjgg_000001_2.html
19
+ :param symbol: 基金代码; 可以通过调用 ak.fund_name_em() 接口获取
20
+ :type symbol: str
21
+ :return: 分红配送-公告列表
22
+ :rtype: pandas.DataFrame
23
+ """
24
+ url = "http://api.fund.eastmoney.com/f10/JJGG"
25
+ headers = {
26
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
27
+ "Chrome/80.0.3987.149 Safari/537.36",
28
+ "Referer": f"http://fundf10.eastmoney.com/jjgg_{symbol}_2.html",
29
+ }
30
+ params = {
31
+ "fundcode": symbol,
32
+ "pageIndex": "1",
33
+ "pageSize": "1000",
34
+ "type": "2",
35
+ "_": round(time.time() * 1000),
36
+ }
37
+ r = requests.get(url, params=params, headers=headers)
38
+ data_json = r.json()
39
+ temp_df = pd.DataFrame(data_json["Data"])
40
+ temp_df.columns = [
41
+ "基金代码",
42
+ "公告标题",
43
+ "基金名称",
44
+ "_",
45
+ "_",
46
+ "公告日期",
47
+ "_",
48
+ "报告ID",
49
+ ]
50
+ temp_df = temp_df[["基金代码", "公告标题", "基金名称", "公告日期", "报告ID"]]
51
+ temp_df.sort_values(by=["公告日期"], inplace=True, ignore_index=True)
52
+ temp_df["公告日期"] = pd.to_datetime(temp_df["公告日期"], errors="coerce").dt.date
53
+ return temp_df
54
+
55
+
56
+ def fund_announcement_report_em(symbol: str = "000001") -> pd.DataFrame:
57
+ """
58
+ 东方财富网站-天天基金网-基金档案-基金公告-定期报告
59
+ https://fundf10.eastmoney.com/jjgg_000001_3.html
60
+ :param symbol: 基金代码; 可以通过调用 ak.fund_name_em() 接口获取
61
+ :type symbol: str
62
+ :return: 定期报告-公告列表
63
+ :rtype: pandas.DataFrame
64
+ """
65
+ url = "http://api.fund.eastmoney.com/f10/JJGG"
66
+ headers = {
67
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
68
+ "Chrome/80.0.3987.149 Safari/537.36",
69
+ "Referer": f"http://fundf10.eastmoney.com/jjgg_{symbol}_3.html",
70
+ }
71
+ params = {
72
+ "fundcode": symbol,
73
+ "pageIndex": "1",
74
+ "pageSize": "1000",
75
+ "type": "3",
76
+ "_": round(time.time() * 1000),
77
+ }
78
+ r = requests.get(url, params=params, headers=headers)
79
+ data_json = r.json()
80
+ temp_df = pd.DataFrame(data_json["Data"])
81
+ temp_df.columns = [
82
+ "基金代码",
83
+ "公告标题",
84
+ "基金名称",
85
+ "_",
86
+ "_",
87
+ "公告日期",
88
+ "_",
89
+ "报告ID",
90
+ ]
91
+ temp_df = temp_df[["基金代码", "公告标题", "基金名称", "公告日期", "报告ID"]]
92
+ temp_df.sort_values(by=["公告日期"], inplace=True, ignore_index=True)
93
+ temp_df["公告日期"] = pd.to_datetime(temp_df["公告日期"], errors="coerce").dt.date
94
+ return temp_df
95
+
96
+
97
+ def fund_announcement_personnel_em(symbol: str = "000001") -> pd.DataFrame:
98
+ """
99
+ 东方财富网站-天天基金网-基金档案-基金公告-人事调整
100
+ https://fundf10.eastmoney.com/jjgg_000001_4.html
101
+ :param symbol: 基金代码; 可以通过调用 ak.fund_name_em() 接口获取
102
+ :type symbol: str
103
+ :return: 人事调整-公告列表
104
+ :rtype: pandas.DataFrame
105
+ """
106
+ url = "http://api.fund.eastmoney.com/f10/JJGG"
107
+ headers = {
108
+ "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",
109
+ "Referer": f"http://fundf10.eastmoney.com/jjgg_{symbol}_4.html",
110
+ }
111
+ params = {
112
+ "fundcode": symbol,
113
+ "pageIndex": "1",
114
+ "pageSize": "1000",
115
+ "type": "4",
116
+ "_": round(time.time() * 1000),
117
+ }
118
+ r = requests.get(url, params=params, headers=headers)
119
+ data_json = r.json()
120
+ temp_df = pd.DataFrame(data_json["Data"])
121
+ temp_df.columns = [
122
+ "基金代码",
123
+ "公告标题",
124
+ "基金名称",
125
+ "_",
126
+ "_",
127
+ "公告日期",
128
+ "_",
129
+ "报告ID",
130
+ ]
131
+ temp_df = temp_df[["基金代码", "公告标题", "基金名称", "公告日期", "报告ID"]]
132
+ temp_df.sort_values(by=["公告日期"], inplace=True, ignore_index=True)
133
+ temp_df["公告日期"] = pd.to_datetime(temp_df["公告日期"], errors="coerce").dt.date
134
+ return temp_df
135
+
136
+
137
+ if __name__ == "__main__":
138
+ fund_announcement_dividend_em_df = fund_announcement_dividend_em(symbol="000001")
139
+ print(fund_announcement_dividend_em_df)
140
+
141
+ fund_announcement_report_em_df = fund_announcement_report_em(symbol="000001")
142
+ print(fund_announcement_report_em_df)
143
+
144
+ fund_announcement_personnel_em_df = fund_announcement_personnel_em(symbol="000001")
145
+ print(fund_announcement_personnel_em_df)
@@ -4,6 +4,7 @@
4
4
  Date: 2023/11/11 16:30
5
5
  Desc: 东方财富-基金
6
6
  """
7
+
7
8
  from io import StringIO
8
9
 
9
10
  import pandas as pd
@@ -17,22 +18,27 @@ def fund_aum_em() -> pd.DataFrame:
17
18
  :return: 基金公司排名列表
18
19
  :rtype: pandas.DataFrame
19
20
  """
20
- url = 'https://fund.eastmoney.com/Company/home/gspmlist'
21
- params = {
22
- 'fundType': '0'
23
- }
21
+ url = "https://fund.eastmoney.com/Company/home/gspmlist"
22
+ params = {"fundType": "0"}
24
23
  r = requests.get(url, params=params)
25
24
  temp_df = pd.read_html(StringIO(r.text))[0]
26
- del temp_df['相关链接']
27
- del temp_df['天相评级']
28
- temp_df.columns = ['序号', '基金公司', '成立时间', '全部管理规模', '全部基金数', '全部经理数']
29
- expanded_df = temp_df['全部管理规模'].str.split(' ', expand=True)
30
- temp_df['全部管理规模'] = expanded_df.iloc[:, 0].str.replace(",", "")
31
- temp_df['更新日期'] = expanded_df.iloc[:, 1]
32
- temp_df['全部管理规模'] = pd.to_numeric(temp_df['全部管理规模'], errors="coerce")
33
- temp_df['全部基金数'] = pd.to_numeric(temp_df['全部基金数'], errors="coerce")
34
- temp_df['全部经理数'] = pd.to_numeric(temp_df['全部经理数'], errors="coerce")
35
- temp_df['成立时间'] = pd.to_datetime(temp_df['成立时间'], errors="coerce").dt.date
25
+ del temp_df["相关链接"]
26
+ del temp_df["天相评级"]
27
+ temp_df.columns = [
28
+ "序号",
29
+ "基金公司",
30
+ "成立时间",
31
+ "全部管理规模",
32
+ "全部基金数",
33
+ "全部经理数",
34
+ ]
35
+ expanded_df = temp_df["全部管理规模"].str.split(" ", expand=True)
36
+ temp_df["全部管理规模"] = expanded_df.iloc[:, 0].str.replace(",", "")
37
+ temp_df["更新日期"] = expanded_df.iloc[:, 1]
38
+ temp_df["全部管理规模"] = pd.to_numeric(temp_df["全部管理规模"], errors="coerce")
39
+ temp_df["全部基金数"] = pd.to_numeric(temp_df["全部基金数"], errors="coerce")
40
+ temp_df["全部经理数"] = pd.to_numeric(temp_df["全部经理数"], errors="coerce")
41
+ temp_df["成立时间"] = pd.to_datetime(temp_df["成立时间"], errors="coerce").dt.date
36
42
  return temp_df
37
43
 
38
44
 
@@ -43,17 +49,15 @@ def fund_aum_trend_em() -> pd.DataFrame:
43
49
  :return: 基金市场管理规模走势图
44
50
  :rtype: pandas.DataFrame
45
51
  """
46
- url = 'https://fund.eastmoney.com/Company/home/GetFundTotalScaleForChart'
47
- payload = {
48
- 'fundType': '0'
49
- }
52
+ url = "https://fund.eastmoney.com/Company/home/GetFundTotalScaleForChart"
53
+ payload = {"fundType": "0"}
50
54
  r = requests.get(url, data=payload)
51
55
  data_json = r.json()
52
56
  temp_df = pd.DataFrame()
53
- temp_df['date'] = data_json['x']
54
- temp_df['value'] = data_json['y']
55
- temp_df['date'] = pd.to_datetime(temp_df['date'], errors="coerce").dt.date
56
- temp_df['value'] = pd.to_numeric(temp_df['value'], errors="coerce")
57
+ temp_df["date"] = data_json["x"]
58
+ temp_df["value"] = data_json["y"]
59
+ temp_df["date"] = pd.to_datetime(temp_df["date"], errors="coerce").dt.date
60
+ temp_df["value"] = pd.to_numeric(temp_df["value"], errors="coerce")
57
61
  return temp_df
58
62
 
59
63
 
@@ -61,27 +65,37 @@ def fund_aum_hist_em(year: str = "2023") -> pd.DataFrame:
61
65
  """
62
66
  东方财富-基金-基金公司历年管理规模排行列表
63
67
  https://fund.eastmoney.com/Company/lsgm.html
68
+ :param year: query year
69
+ :type year: str
64
70
  :return: 基金公司历年管理规模排行列表
65
71
  :rtype: pandas.DataFrame
66
72
  """
67
- url = 'https://fund.eastmoney.com/Company/home/HistoryScaleTable'
68
- params = {
69
- 'year': year
70
- }
73
+ url = "https://fund.eastmoney.com/Company/home/HistoryScaleTable"
74
+ params = {"year": year}
71
75
  r = requests.get(url, params=params)
72
76
  temp_df = pd.read_html(StringIO(r.text))[0]
73
- temp_df.columns = ['序号', '基金公司', '总规模', '股票型', '混合型', '债券型', '指数型', 'QDII', '货币型']
74
- temp_df['总规模'] = pd.to_numeric(temp_df['总规模'], errors="coerce")
75
- temp_df['股票型'] = pd.to_numeric(temp_df['股票型'], errors="coerce")
76
- 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['QDII'] = pd.to_numeric(temp_df['QDII'], errors="coerce")
80
- temp_df['货币型'] = pd.to_numeric(temp_df['货币型'], errors="coerce")
77
+ temp_df.columns = [
78
+ "序号",
79
+ "基金公司",
80
+ "总规模",
81
+ "股票型",
82
+ "混合型",
83
+ "债券型",
84
+ "指数型",
85
+ "QDII",
86
+ "货币型",
87
+ ]
88
+ temp_df["总规模"] = pd.to_numeric(temp_df["总规模"], errors="coerce")
89
+ temp_df["股票型"] = pd.to_numeric(temp_df["股票型"], errors="coerce")
90
+ temp_df["混合型"] = pd.to_numeric(temp_df["混合型"], errors="coerce")
91
+ temp_df["债券型"] = pd.to_numeric(temp_df["债券型"], errors="coerce")
92
+ temp_df["指数型"] = pd.to_numeric(temp_df["指数型"], errors="coerce")
93
+ temp_df["QDII"] = pd.to_numeric(temp_df["QDII"], errors="coerce")
94
+ temp_df["货币型"] = pd.to_numeric(temp_df["货币型"], errors="coerce")
81
95
  return temp_df
82
96
 
83
97
 
84
- if __name__ == '__main__':
98
+ if __name__ == "__main__":
85
99
  fund_aum_em_df = fund_aum_em()
86
100
  print(fund_aum_em_df)
87
101