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,12 +1,13 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/2/29 18:00
4
+ Date: 2024/7/24 13:00
5
5
  Desc: 东方财富网-数据中心-开放基金排行
6
6
  https://fund.eastmoney.com/data/fundranking.html
7
7
  名词解释
8
8
  https://help.1234567.com.cn/list_236.html
9
9
  """
10
+
10
11
  from datetime import datetime, date
11
12
 
12
13
  import pandas as pd
@@ -33,7 +34,7 @@ def fund_open_fund_rank_em(symbol: str = "全部") -> pd.DataFrame:
33
34
  """
34
35
  东方财富网-数据中心-开放基金排行
35
36
  https://fund.eastmoney.com/data/fundranking.html
36
- :param symbol: choice of {"全部", "股票型", "混合型", "债券型", "指数型", "QDII", "LOF", "FOF"}
37
+ :param symbol: choice of {"全部", "股票型", "混合型", "债券型", "指数型", "QDII", "FOF"}
37
38
  :type symbol: str
38
39
  :return: 开放基金排行
39
40
  :rtype: pandas.DataFrame
@@ -64,17 +65,18 @@ def fund_open_fund_rank_em(symbol: str = "全部") -> pd.DataFrame:
64
65
  "qdii": "",
65
66
  "tabSubtype": ",,,,,",
66
67
  "pi": "1",
67
- "pn": "20000",
68
+ "pn": "30000",
68
69
  "dx": "1",
69
70
  "v": "0.1591891419018292",
70
71
  }
71
72
  headers = {
72
- "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",
73
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
74
+ "Chrome/81.0.4044.138 Safari/537.36",
73
75
  "Referer": "https://fund.eastmoney.com/fundguzhi.html",
74
76
  }
75
77
  r = requests.get(url, params=params, headers=headers)
76
78
  data_text = r.text
77
- data_json = demjson.decode(data_text[data_text.find("{"): -1])
79
+ data_json = demjson.decode(data_text[data_text.find("{") : -1])
78
80
  temp_df = pd.DataFrame(data_json["datas"])
79
81
  temp_df = temp_df.iloc[:, 0].str.split(",", expand=True)
80
82
  temp_df.reset_index(inplace=True)
@@ -129,20 +131,20 @@ def fund_open_fund_rank_em(symbol: str = "全部") -> pd.DataFrame:
129
131
  "手续费",
130
132
  ]
131
133
  ]
132
- temp_df['日期'] = pd.to_datetime(temp_df['日期'], errors="coerce").dt.date
133
- 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['近1周'] = pd.to_numeric(temp_df['近1周'], errors="coerce")
137
- temp_df['近1月'] = pd.to_numeric(temp_df['近1月'], errors="coerce")
138
- temp_df['近3月'] = pd.to_numeric(temp_df['近3月'], errors="coerce")
139
- temp_df['近6月'] = pd.to_numeric(temp_df['近6月'], errors="coerce")
140
- temp_df['近1年'] = pd.to_numeric(temp_df['近1年'], errors="coerce")
141
- temp_df['近2年'] = pd.to_numeric(temp_df['近2年'], errors="coerce")
142
- temp_df['近3年'] = pd.to_numeric(temp_df['近3年'], errors="coerce")
143
- temp_df['今年来'] = pd.to_numeric(temp_df['今年来'], errors="coerce")
144
- temp_df['成立来'] = pd.to_numeric(temp_df['成立来'], errors="coerce")
145
- temp_df['自定义'] = pd.to_numeric(temp_df['自定义'], errors="coerce")
134
+ temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
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["近1周"] = pd.to_numeric(temp_df["近1周"], errors="coerce")
139
+ temp_df["近1月"] = pd.to_numeric(temp_df["近1月"], errors="coerce")
140
+ temp_df["近3月"] = pd.to_numeric(temp_df["近3月"], errors="coerce")
141
+ temp_df["近6月"] = pd.to_numeric(temp_df["近6月"], errors="coerce")
142
+ temp_df["近1年"] = pd.to_numeric(temp_df["近1年"], errors="coerce")
143
+ temp_df["近2年"] = pd.to_numeric(temp_df["近2年"], errors="coerce")
144
+ temp_df["近3年"] = pd.to_numeric(temp_df["近3年"], errors="coerce")
145
+ temp_df["今年来"] = pd.to_numeric(temp_df["今年来"], errors="coerce")
146
+ temp_df["成立来"] = pd.to_numeric(temp_df["成立来"], errors="coerce")
147
+ temp_df["自定义"] = pd.to_numeric(temp_df["自定义"], errors="coerce")
146
148
  return temp_df
147
149
 
148
150
 
@@ -163,16 +165,17 @@ def fund_exchange_rank_em() -> pd.DataFrame:
163
165
  "sc": "1nzf",
164
166
  "st": "desc",
165
167
  "pi": "1",
166
- "pn": "10000",
168
+ "pn": "30000",
167
169
  "v": "0.1591891419018292",
168
170
  }
169
171
  headers = {
170
- "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",
172
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
173
+ "Chrome/81.0.4044.138 Safari/537.36",
171
174
  "Referer": "https://fund.eastmoney.com/fundguzhi.html",
172
175
  }
173
176
  r = requests.get(url, params=params, headers=headers)
174
177
  text_data = r.text
175
- json_data = demjson.decode(text_data[text_data.find("{"): -1])
178
+ json_data = demjson.decode(text_data[text_data.find("{") : -1])
176
179
  temp_df = pd.DataFrame(json_data["datas"])
177
180
  temp_df = temp_df.iloc[:, 0].str.split(",", expand=True)
178
181
  temp_df.reset_index(inplace=True)
@@ -224,19 +227,19 @@ def fund_exchange_rank_em() -> pd.DataFrame:
224
227
  "成立日期",
225
228
  ]
226
229
  ]
227
- temp_df['日期'] = pd.to_datetime(temp_df['日期']).dt.date
228
- temp_df['成立日期'] = pd.to_datetime(temp_df['成立日期']).dt.date
229
- temp_df['单位净值'] = pd.to_numeric(temp_df['单位净值'], errors="coerce")
230
- temp_df['累计净值'] = pd.to_numeric(temp_df['累计净值'], errors="coerce")
231
- temp_df['近1周'] = pd.to_numeric(temp_df['近1周'], errors="coerce")
232
- temp_df['近1月'] = pd.to_numeric(temp_df['近1月'], errors="coerce")
233
- temp_df['近3月'] = pd.to_numeric(temp_df['近3月'], errors="coerce")
234
- temp_df['近6月'] = pd.to_numeric(temp_df['近6月'], errors="coerce")
235
- temp_df['近1年'] = pd.to_numeric(temp_df['近1年'], errors="coerce")
236
- temp_df['近2年'] = pd.to_numeric(temp_df['近2年'], errors="coerce")
237
- temp_df['近3年'] = pd.to_numeric(temp_df['近3年'], errors="coerce")
238
- temp_df['今年来'] = pd.to_numeric(temp_df['今年来'], errors="coerce")
239
- temp_df['成立来'] = pd.to_numeric(temp_df['成立来'], errors="coerce")
230
+ temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
231
+ temp_df["成立日期"] = pd.to_datetime(temp_df["成立日期"]).dt.date
232
+ temp_df["单位净值"] = pd.to_numeric(temp_df["单位净值"], errors="coerce")
233
+ temp_df["累计净值"] = pd.to_numeric(temp_df["累计净值"], errors="coerce")
234
+ temp_df["近1周"] = pd.to_numeric(temp_df["近1周"], errors="coerce")
235
+ temp_df["近1月"] = pd.to_numeric(temp_df["近1月"], errors="coerce")
236
+ temp_df["近3月"] = pd.to_numeric(temp_df["近3月"], errors="coerce")
237
+ temp_df["近6月"] = pd.to_numeric(temp_df["近6月"], errors="coerce")
238
+ temp_df["近1年"] = pd.to_numeric(temp_df["近1年"], errors="coerce")
239
+ temp_df["近2年"] = pd.to_numeric(temp_df["近2年"], errors="coerce")
240
+ temp_df["近3年"] = pd.to_numeric(temp_df["近3年"], errors="coerce")
241
+ temp_df["今年来"] = pd.to_numeric(temp_df["今年来"], errors="coerce")
242
+ temp_df["成立来"] = pd.to_numeric(temp_df["成立来"], errors="coerce")
240
243
  return temp_df
241
244
 
242
245
 
@@ -256,10 +259,10 @@ def fund_money_rank_em() -> pd.DataFrame:
256
259
  "orderType": "desc",
257
260
  "pageIndex": "1",
258
261
  "pageSize": "10000",
259
- "_": "1603867224251",
260
262
  }
261
263
  headers = {
262
- "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",
264
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
265
+ "Chrome/81.0.4044.138 Safari/537.36",
263
266
  "Referer": "https://fund.eastmoney.com/fundguzhi.html",
264
267
  }
265
268
  r = requests.get(url, params=params, headers=headers)
@@ -319,20 +322,24 @@ def fund_money_rank_em() -> pd.DataFrame:
319
322
  "手续费",
320
323
  ]
321
324
  ]
322
- temp_df['日期'] = pd.to_datetime(temp_df['日期']).dt.date
323
- temp_df['万份收益'] = pd.to_numeric(temp_df['万份收益'], errors="coerce")
324
- temp_df['年化收益率7日'] = pd.to_numeric(temp_df['年化收益率7日'], errors="coerce")
325
- temp_df['年化收益率14日'] = pd.to_numeric(temp_df['年化收益率14日'], errors="coerce")
326
- temp_df['年化收益率28'] = pd.to_numeric(temp_df['年化收益率28日'], errors="coerce")
327
- temp_df['近1月'] = pd.to_numeric(temp_df['近1月'], errors="coerce")
328
- temp_df['近3月'] = pd.to_numeric(temp_df['近3月'], errors="coerce")
329
- temp_df['近6月'] = pd.to_numeric(temp_df['近6月'], errors="coerce")
330
- temp_df['近1年'] = pd.to_numeric(temp_df['近1年'], errors="coerce")
331
- temp_df['2年'] = pd.to_numeric(temp_df['2年'], errors="coerce")
332
- temp_df['近3年'] = pd.to_numeric(temp_df['近3年'], errors="coerce")
333
- temp_df['5年'] = pd.to_numeric(temp_df['5年'], errors="coerce")
334
- temp_df['今年来'] = pd.to_numeric(temp_df['今年来'], errors="coerce")
335
- temp_df['成立来'] = pd.to_numeric(temp_df['成立来'], errors="coerce")
325
+ temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
326
+ temp_df["万份收益"] = pd.to_numeric(temp_df["万份收益"], errors="coerce")
327
+ temp_df["年化收益率7日"] = pd.to_numeric(temp_df["年化收益率7日"], errors="coerce")
328
+ temp_df["年化收益率14日"] = pd.to_numeric(
329
+ temp_df["年化收益率14"], errors="coerce"
330
+ )
331
+ temp_df["年化收益率28日"] = pd.to_numeric(
332
+ temp_df["年化收益率28日"], errors="coerce"
333
+ )
334
+ temp_df["1月"] = pd.to_numeric(temp_df["1月"], errors="coerce")
335
+ temp_df["近3月"] = pd.to_numeric(temp_df["近3月"], errors="coerce")
336
+ temp_df["6月"] = pd.to_numeric(temp_df["6月"], errors="coerce")
337
+ temp_df["近1年"] = pd.to_numeric(temp_df["近1年"], errors="coerce")
338
+ temp_df["近2年"] = pd.to_numeric(temp_df["近2年"], errors="coerce")
339
+ temp_df["近3年"] = pd.to_numeric(temp_df["近3年"], errors="coerce")
340
+ temp_df["近5年"] = pd.to_numeric(temp_df["近5年"], errors="coerce")
341
+ temp_df["今年来"] = pd.to_numeric(temp_df["今年来"], errors="coerce")
342
+ temp_df["成立来"] = pd.to_numeric(temp_df["成立来"], errors="coerce")
336
343
  return temp_df
337
344
 
338
345
 
@@ -355,16 +362,16 @@ def fund_lcx_rank_em() -> pd.DataFrame:
355
362
  "pageSize": "50",
356
363
  "FBQ": "",
357
364
  "callback": "jQuery18303264654966943197_1603867158043",
358
- "_": "1603867224251",
359
365
  }
360
366
  headers = {
361
- "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",
367
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
368
+ "Chrome/81.0.4044.138 Safari/537.36",
362
369
  "Referer": "https://fund.eastmoney.com/fundguzhi.html",
363
370
  }
364
371
  r = requests.get(url, params=params, headers=headers)
365
372
  try:
366
373
  data_json = r.json()
367
- except:
374
+ except: # noqa: E722
368
375
  return pd.DataFrame()
369
376
  temp_df = pd.DataFrame(data_json["Data"])
370
377
  temp_df.reset_index(inplace=True)
@@ -427,21 +434,21 @@ def fund_hk_rank_em() -> pd.DataFrame:
427
434
  format_date = datetime.now().date().isoformat()
428
435
  url = "https://overseas.1234567.com.cn/overseasapi/OpenApiHander.ashx"
429
436
  params = {
430
- 'api': 'HKFDApi',
431
- 'm': 'MethodFundList',
432
- 'action': '1',
433
- 'pageindex': '0',
434
- 'pagesize': '5000',
435
- 'dy': '1',
436
- 'date1': format_date,
437
- 'date2': format_date,
438
- 'sortfield': 'Y',
439
- 'sorttype': '-1',
440
- 'isbuy': '0',
441
- '_': '1610790553848',
437
+ "api": "HKFDApi",
438
+ "m": "MethodFundList",
439
+ "action": "1",
440
+ "pageindex": "0",
441
+ "pagesize": "5000",
442
+ "dy": "1",
443
+ "date1": format_date,
444
+ "date2": format_date,
445
+ "sortfield": "Y",
446
+ "sorttype": "-1",
447
+ "isbuy": "0",
442
448
  }
443
449
  headers = {
444
- "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",
450
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
451
+ "Chrome/81.0.4044.138 Safari/537.36",
445
452
  "Referer": "https://fund.eastmoney.com/fundguzhi.html",
446
453
  }
447
454
  r = requests.get(url, params=params, headers=headers)
@@ -494,20 +501,22 @@ def fund_hk_rank_em() -> pd.DataFrame:
494
501
  "香港基金代码",
495
502
  ]
496
503
  ]
497
- temp_df['日期'] = pd.to_datetime(temp_df['日期']).dt.date
498
- temp_df['单位净值'] = pd.to_numeric(temp_df['单位净值'], errors="coerce")
499
- temp_df['日增长率'] = pd.to_numeric(temp_df['日增长率'], errors="coerce")
500
- temp_df['近1周'] = pd.to_numeric(temp_df['近1周'], errors="coerce")
501
- temp_df['近1月'] = pd.to_numeric(temp_df['近1月'], errors="coerce")
502
- temp_df['近3月'] = pd.to_numeric(temp_df['近3月'], errors="coerce")
503
- temp_df['近6月'] = pd.to_numeric(temp_df['近6月'], errors="coerce")
504
- temp_df['近1年'] = pd.to_numeric(temp_df['近1年'], errors="coerce")
505
- temp_df['近2年'] = pd.to_numeric(temp_df['近2年'], errors="coerce")
506
- temp_df['近3年'] = pd.to_numeric(temp_df['近3年'], errors="coerce")
507
- temp_df['今年来'] = pd.to_numeric(temp_df['今年来'], errors="coerce")
508
- temp_df['成立来'] = pd.to_numeric(temp_df['成立来'], errors="coerce")
509
- temp_df['成立来'] = pd.to_numeric(temp_df['成立来'], errors="coerce")
510
- temp_df['可购买'] = temp_df['可购买'].map(lambda x: "可购买" if x == "1" else "不可购买")
504
+ temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
505
+ temp_df["单位净值"] = pd.to_numeric(temp_df["单位净值"], errors="coerce")
506
+ temp_df["日增长率"] = pd.to_numeric(temp_df["日增长率"], errors="coerce")
507
+ temp_df["近1周"] = pd.to_numeric(temp_df["近1周"], errors="coerce")
508
+ temp_df["近1月"] = pd.to_numeric(temp_df["近1月"], errors="coerce")
509
+ temp_df["近3月"] = pd.to_numeric(temp_df["近3月"], errors="coerce")
510
+ temp_df["近6月"] = pd.to_numeric(temp_df["近6月"], errors="coerce")
511
+ temp_df["近1年"] = pd.to_numeric(temp_df["近1年"], errors="coerce")
512
+ temp_df["近2年"] = pd.to_numeric(temp_df["近2年"], errors="coerce")
513
+ temp_df["近3年"] = pd.to_numeric(temp_df["近3年"], errors="coerce")
514
+ temp_df["今年来"] = pd.to_numeric(temp_df["今年来"], errors="coerce")
515
+ temp_df["成立来"] = pd.to_numeric(temp_df["成立来"], errors="coerce")
516
+ temp_df["成立来"] = pd.to_numeric(temp_df["成立来"], errors="coerce")
517
+ temp_df["可购买"] = temp_df["可购买"].map(
518
+ lambda x: "可购买" if x == "1" else "不可购买"
519
+ )
511
520
  return temp_df
512
521
 
513
522
 
@@ -530,9 +539,6 @@ if __name__ == "__main__":
530
539
  fund_open_fund_rank_em_df = fund_open_fund_rank_em(symbol="QDII")
531
540
  print(fund_open_fund_rank_em_df)
532
541
 
533
- fund_open_fund_rank_em_df = fund_open_fund_rank_em(symbol="LOF")
534
- print(fund_open_fund_rank_em_df)
535
-
536
542
  fund_open_fund_rank_em_df = fund_open_fund_rank_em(symbol="FOF")
537
543
  print(fund_open_fund_rank_em_df)
538
544
 
@@ -5,6 +5,7 @@ Date: 2023/12/12 16:30
5
5
  Desc: 基金评级
6
6
  https://fund.eastmoney.com/data/fundrating.html
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
  from bs4 import BeautifulSoup
@@ -19,8 +20,8 @@ def fund_rating_all() -> pd.DataFrame:
19
20
  """
20
21
  url = "https://fund.eastmoney.com/data/fundrating.html"
21
22
  r = requests.get(url)
22
- soup = BeautifulSoup(r.text, "lxml")
23
- data_text = soup.find("div", attrs={"id": "fundinfo"}).find("script").string
23
+ soup = BeautifulSoup(r.text, features="lxml")
24
+ data_text = soup.find(name="div", attrs={"id": "fundinfo"}).find("script").string
24
25
  data_content = [
25
26
  item.split("|")
26
27
  for item in data_text.split("var")[6]
@@ -47,7 +48,7 @@ def fund_rating_all() -> pd.DataFrame:
47
48
  "-",
48
49
  "上海证券",
49
50
  "-",
50
- "-",
51
+ "晨星评级",
51
52
  "-",
52
53
  "济安金信",
53
54
  "-",
@@ -71,6 +72,7 @@ def fund_rating_all() -> pd.DataFrame:
71
72
  "上海证券",
72
73
  "招商证券",
73
74
  "济安金信",
75
+ "晨星评级",
74
76
  "手续费",
75
77
  "类型",
76
78
  ]
@@ -79,7 +81,10 @@ def fund_rating_all() -> pd.DataFrame:
79
81
  temp_df["上海证券"] = pd.to_numeric(temp_df["上海证券"], errors="coerce")
80
82
  temp_df["招商证券"] = pd.to_numeric(temp_df["招商证券"], errors="coerce")
81
83
  temp_df["济安金信"] = pd.to_numeric(temp_df["济安金信"], errors="coerce")
82
- temp_df["手续费"] = pd.to_numeric(temp_df["手续费"].str.strip("%"), errors="coerce") / 100
84
+ temp_df["晨星评级"] = pd.to_numeric(temp_df["晨星评级"], errors="coerce")
85
+ temp_df["手续费"] = (
86
+ pd.to_numeric(temp_df["手续费"].str.strip("%"), errors="coerce") / 100
87
+ )
83
88
  return temp_df
84
89
 
85
90
 
@@ -161,10 +166,18 @@ def fund_rating_sh(date: str = "20230630") -> pd.DataFrame:
161
166
  ]
162
167
  ]
163
168
  temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
164
- temp_df["3年期评级-3年评级"] = pd.to_numeric(temp_df["3年期评级-3年评级"], errors="coerce")
165
- temp_df["3年期评级-较上期"] = pd.to_numeric(temp_df["3年期评级-较上期"], errors="coerce")
166
- temp_df["5年期评级-5年评级"] = pd.to_numeric(temp_df["5年期评级-5年评级"], errors="coerce")
167
- temp_df["5年期评级-较上期"] = pd.to_numeric(temp_df["5年期评级-较上期"], errors="coerce")
169
+ temp_df["3年期评级-3年评级"] = pd.to_numeric(
170
+ temp_df["3年期评级-3年评级"], errors="coerce"
171
+ )
172
+ temp_df["3年期评级-较上期"] = pd.to_numeric(
173
+ temp_df["3年期评级-较上期"], errors="coerce"
174
+ )
175
+ temp_df["5年期评级-5年评级"] = pd.to_numeric(
176
+ temp_df["5年期评级-5年评级"], errors="coerce"
177
+ )
178
+ temp_df["5年期评级-较上期"] = pd.to_numeric(
179
+ temp_df["5年期评级-较上期"], errors="coerce"
180
+ )
168
181
  temp_df["单位净值"] = pd.to_numeric(temp_df["单位净值"], errors="coerce")
169
182
  temp_df["日增长率"] = pd.to_numeric(temp_df["日增长率"], errors="coerce")
170
183
  temp_df["近1年涨幅"] = pd.to_numeric(temp_df["近1年涨幅"], errors="coerce")
@@ -246,8 +259,12 @@ def fund_rating_zs(date: str = "20230331") -> pd.DataFrame:
246
259
  ]
247
260
  ]
248
261
  temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
249
- temp_df["3年期评级-3年评级"] = pd.to_numeric(temp_df["3年期评级-3年评级"], errors="coerce")
250
- temp_df["3年期评级-较上期"] = pd.to_numeric(temp_df["3年期评级-较上期"], errors="coerce")
262
+ temp_df["3年期评级-3年评级"] = pd.to_numeric(
263
+ temp_df["3年期评级-3年评级"], errors="coerce"
264
+ )
265
+ temp_df["3年期评级-较上期"] = pd.to_numeric(
266
+ temp_df["3年期评级-较上期"], errors="coerce"
267
+ )
251
268
  temp_df["单位净值"] = pd.to_numeric(temp_df["单位净值"], errors="coerce")
252
269
  temp_df["日增长率"] = pd.to_numeric(temp_df["日增长率"], errors="coerce")
253
270
  temp_df["近1年涨幅"] = pd.to_numeric(temp_df["近1年涨幅"], errors="coerce")
@@ -330,8 +347,12 @@ def fund_rating_ja(date: str = "20230331") -> pd.DataFrame:
330
347
  ]
331
348
  ]
332
349
  temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
333
- temp_df["3年期评级-3年评级"] = pd.to_numeric(temp_df["3年期评级-3年评级"], errors="coerce")
334
- temp_df["3年期评级-较上期"] = pd.to_numeric(temp_df["3年期评级-较上期"], errors="coerce")
350
+ temp_df["3年期评级-3年评级"] = pd.to_numeric(
351
+ temp_df["3年期评级-3年评级"], errors="coerce"
352
+ )
353
+ temp_df["3年期评级-较上期"] = pd.to_numeric(
354
+ temp_df["3年期评级-较上期"], errors="coerce"
355
+ )
335
356
  temp_df["单位净值"] = pd.to_numeric(temp_df["单位净值"], errors="coerce")
336
357
  temp_df["日增长率"] = pd.to_numeric(temp_df["日增长率"], errors="coerce")
337
358
  temp_df["近1年涨幅"] = pd.to_numeric(temp_df["近1年涨幅"], errors="coerce")
@@ -1,13 +1,14 @@
1
1
  # -*- coding:utf-8 -*-
2
2
  # !/usr/bin/env python
3
3
  """
4
- Date: 2023/6/13 16:12
4
+ Date: 2024/7/24 23:30
5
5
  Desc: 巨潮资讯-数据中心-专题统计-基金报表
6
- http://webapi.cninfo.com.cn/#/thematicStatistics
6
+ https://webapi.cninfo.com.cn/#/thematicStatistics
7
7
  """
8
+
8
9
  import pandas as pd
10
+ import py_mini_racer
9
11
  import requests
10
- from py_mini_racer import py_mini_racer
11
12
 
12
13
  from akshare.datasets import get_ths_js
13
14
 
@@ -21,7 +22,7 @@ def _get_file_content_cninfo(file: str = "cninfo.js") -> str:
21
22
  :rtype: str
22
23
  """
23
24
  setting_file_path = get_ths_js(file)
24
- with open(setting_file_path) as f:
25
+ with open(setting_file_path, encoding="utf-8") as f:
25
26
  file_data = f.read()
26
27
  return file_data
27
28
 
@@ -29,13 +30,13 @@ def _get_file_content_cninfo(file: str = "cninfo.js") -> str:
29
30
  def fund_report_stock_cninfo(date: str = "20210630") -> pd.DataFrame:
30
31
  """
31
32
  巨潮资讯-数据中心-专题统计-基金报表-基金重仓股
32
- http://webapi.cninfo.com.cn/#/thematicStatistics
33
+ https://webapi.cninfo.com.cn/#/thematicStatistics
33
34
  :param date: 报告时间; choice of {"XXXX0331", "XXXX0630", "XXXX0930", "XXXX1231"}
34
35
  :type date: str
35
36
  :return: 基金重仓股
36
37
  :rtype: pandas.DataFrame
37
38
  """
38
- url = "http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1112"
39
+ url = "https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1112"
39
40
  js_code = py_mini_racer.MiniRacer()
40
41
  js_content = _get_file_content_cninfo("cninfo.js")
41
42
  js_code.eval(js_content)
@@ -48,11 +49,12 @@ def fund_report_stock_cninfo(date: str = "20210630") -> pd.DataFrame:
48
49
  "Cache-Control": "no-cache",
49
50
  "Content-Length": "0",
50
51
  "Host": "webapi.cninfo.com.cn",
51
- "Origin": "http://webapi.cninfo.com.cn",
52
+ "Origin": "https://webapi.cninfo.com.cn",
52
53
  "Pragma": "no-cache",
53
54
  "Proxy-Connection": "keep-alive",
54
- "Referer": "http://webapi.cninfo.com.cn/",
55
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36",
55
+ "Referer": "https://webapi.cninfo.com.cn/",
56
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
57
+ "Chrome/93.0.4577.63 Safari/537.36",
56
58
  "X-Requested-With": "XMLHttpRequest",
57
59
  }
58
60
  params = {
@@ -88,19 +90,20 @@ def fund_report_stock_cninfo(date: str = "20210630") -> pd.DataFrame:
88
90
  temp_df["持股总数"] = pd.to_numeric(temp_df["持股总数"], errors="coerce")
89
91
  temp_df["持股总市值"] = pd.to_numeric(temp_df["持股总市值"], errors="coerce")
90
92
  temp_df["基金覆盖家数"] = pd.to_numeric(temp_df["基金覆盖家数"], errors="coerce")
93
+ temp_df["序号"] = range(1, len(temp_df) + 1)
91
94
  return temp_df
92
95
 
93
96
 
94
97
  def fund_report_industry_allocation_cninfo(date: str = "20210630") -> pd.DataFrame:
95
98
  """
96
99
  巨潮资讯-数据中心-专题统计-基金报表-基金行业配置
97
- http://webapi.cninfo.com.cn/#/thematicStatistics
100
+ https://webapi.cninfo.com.cn/#/thematicStatistics
98
101
  :param date: 报告时间; choice of {"XXXX0331", "XXXX0630", "XXXX0930", "XXXX1231"}, 从 2017 年开始
99
102
  :type date: str
100
103
  :return: 基金行业配置
101
104
  :rtype: pandas.DataFrame
102
105
  """
103
- url = "http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1113"
106
+ url = "https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1113"
104
107
  js_code = py_mini_racer.MiniRacer()
105
108
  js_content = _get_file_content_cninfo("cninfo.js")
106
109
  js_code.eval(js_content)
@@ -113,11 +116,12 @@ def fund_report_industry_allocation_cninfo(date: str = "20210630") -> pd.DataFra
113
116
  "Cache-Control": "no-cache",
114
117
  "Content-Length": "0",
115
118
  "Host": "webapi.cninfo.com.cn",
116
- "Origin": "http://webapi.cninfo.com.cn",
119
+ "Origin": "https://webapi.cninfo.com.cn",
117
120
  "Pragma": "no-cache",
118
121
  "Proxy-Connection": "keep-alive",
119
- "Referer": "http://webapi.cninfo.com.cn/",
120
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36",
122
+ "Referer": "https://webapi.cninfo.com.cn/",
123
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
124
+ "Chrome/93.0.4577.63 Safari/537.36",
121
125
  "X-Requested-With": "XMLHttpRequest",
122
126
  }
123
127
  params = {
@@ -128,23 +132,23 @@ def fund_report_industry_allocation_cninfo(date: str = "20210630") -> pd.DataFra
128
132
  temp_df = pd.DataFrame(data_json["records"])
129
133
  temp_df.rename(
130
134
  columns={
131
- 'F004N': '行业规模',
132
- 'F003N': '基金覆盖家数',
133
- 'F002V': '证监会行业名称',
134
- 'F001V': '行业编码',
135
- 'ENDDATE': '报告期',
136
- 'F005N': '占净资产比例'
135
+ "F004N": "行业规模",
136
+ "F003N": "基金覆盖家数",
137
+ "F002V": "证监会行业名称",
138
+ "F001V": "行业编码",
139
+ "ENDDATE": "报告期",
140
+ "F005N": "占净资产比例",
137
141
  },
138
142
  inplace=True,
139
143
  )
140
144
  temp_df = temp_df[
141
145
  [
142
- '行业编码',
143
- '证监会行业名称',
144
- '报告期',
145
- '基金覆盖家数',
146
- '行业规模',
147
- '占净资产比例',
146
+ "行业编码",
147
+ "证监会行业名称",
148
+ "报告期",
149
+ "基金覆盖家数",
150
+ "行业规模",
151
+ "占净资产比例",
148
152
  ]
149
153
  ]
150
154
  temp_df["报告期"] = pd.to_datetime(temp_df["报告期"], errors="coerce").dt.date
@@ -157,11 +161,11 @@ def fund_report_industry_allocation_cninfo(date: str = "20210630") -> pd.DataFra
157
161
  def fund_report_asset_allocation_cninfo() -> pd.DataFrame:
158
162
  """
159
163
  巨潮资讯-数据中心-专题统计-基金报表-基金资产配置
160
- http://webapi.cninfo.com.cn/#/thematicStatistics
164
+ https://webapi.cninfo.com.cn/#/thematicStatistics
161
165
  :return: 基金资产配置
162
166
  :rtype: pandas.DataFrame
163
167
  """
164
- url = "http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1114"
168
+ url = "https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1114"
165
169
  js_code = py_mini_racer.MiniRacer()
166
170
  js_content = _get_file_content_cninfo("cninfo.js")
167
171
  js_code.eval(js_content)
@@ -174,11 +178,12 @@ def fund_report_asset_allocation_cninfo() -> pd.DataFrame:
174
178
  "Cache-Control": "no-cache",
175
179
  "Content-Length": "0",
176
180
  "Host": "webapi.cninfo.com.cn",
177
- "Origin": "http://webapi.cninfo.com.cn",
181
+ "Origin": "https://webapi.cninfo.com.cn",
178
182
  "Pragma": "no-cache",
179
183
  "Proxy-Connection": "keep-alive",
180
- "Referer": "http://webapi.cninfo.com.cn/",
181
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36",
184
+ "Referer": "https://webapi.cninfo.com.cn/",
185
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
186
+ "Chrome/93.0.4577.63 Safari/537.36",
182
187
  "X-Requested-With": "XMLHttpRequest",
183
188
  }
184
189
  r = requests.post(url, headers=headers)
@@ -186,31 +191,39 @@ def fund_report_asset_allocation_cninfo() -> pd.DataFrame:
186
191
  temp_df = pd.DataFrame(data_json["records"])
187
192
  temp_df.rename(
188
193
  columns={
189
- 'F001N': '基金覆盖家数',
190
- 'F008N': '现金货币类占净资产比例',
191
- 'F007N': '债券固定收益类占净资产比例',
192
- 'F006N': '股票权益类占净资产比例',
193
- 'ENDDATE': '报告期',
194
- 'F005N': '基金市场净资产规模'
194
+ "F001N": "基金覆盖家数",
195
+ "F008N": "现金货币类占净资产比例",
196
+ "F007N": "债券固定收益类占净资产比例",
197
+ "F006N": "股票权益类占净资产比例",
198
+ "ENDDATE": "报告期",
199
+ "F005N": "基金市场净资产规模",
195
200
  },
196
201
  inplace=True,
197
202
  )
198
203
  temp_df = temp_df[
199
204
  [
200
- '报告期',
201
- '基金覆盖家数',
202
- '股票权益类占净资产比例',
203
- '债券固定收益类占净资产比例',
204
- '现金货币类占净资产比例',
205
- '基金市场净资产规模',
205
+ "报告期",
206
+ "基金覆盖家数",
207
+ "股票权益类占净资产比例",
208
+ "债券固定收益类占净资产比例",
209
+ "现金货币类占净资产比例",
210
+ "基金市场净资产规模",
206
211
  ]
207
212
  ]
208
213
  temp_df["报告期"] = pd.to_datetime(temp_df["报告期"], errors="coerce").dt.date
209
214
  temp_df["基金覆盖家数"] = pd.to_numeric(temp_df["基金覆盖家数"], errors="coerce")
210
- temp_df["股票权益类占净资产比例"] = pd.to_numeric(temp_df["股票权益类占净资产比例"], errors="coerce")
211
- temp_df["债券固定收益类占净资产比例"] = pd.to_numeric(temp_df["债券固定收益类占净资产比例"], errors="coerce")
212
- temp_df["现金货币类占净资产比例"] = pd.to_numeric(temp_df["现金货币类占净资产比例"], errors="coerce")
213
- temp_df["基金市场净资产规模"] = pd.to_numeric(temp_df["基金市场净资产规模"], errors="coerce")
215
+ temp_df["股票权益类占净资产比例"] = pd.to_numeric(
216
+ temp_df["股票权益类占净资产比例"], errors="coerce"
217
+ )
218
+ temp_df["债券固定收益类占净资产比例"] = pd.to_numeric(
219
+ temp_df["债券固定收益类占净资产比例"], errors="coerce"
220
+ )
221
+ temp_df["现金货币类占净资产比例"] = pd.to_numeric(
222
+ temp_df["现金货币类占净资产比例"], errors="coerce"
223
+ )
224
+ temp_df["基金市场净资产规模"] = pd.to_numeric(
225
+ temp_df["基金市场净资产规模"], errors="coerce"
226
+ )
214
227
  return temp_df
215
228
 
216
229
 
@@ -218,7 +231,9 @@ if __name__ == "__main__":
218
231
  fund_report_stock_cninfo_df = fund_report_stock_cninfo(date="20210630")
219
232
  print(fund_report_stock_cninfo_df)
220
233
 
221
- fund_report_industry_allocation_cninfo_df = fund_report_industry_allocation_cninfo(date="20210930")
234
+ fund_report_industry_allocation_cninfo_df = fund_report_industry_allocation_cninfo(
235
+ date="20210930"
236
+ )
222
237
  print(fund_report_industry_allocation_cninfo_df)
223
238
 
224
239
  fund_report_asset_allocation_cninfo_df = fund_report_asset_allocation_cninfo()