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
akshare/index/index_cx.py CHANGED
@@ -1,22 +1,23 @@
1
1
  # -*- coding:utf-8 -*-
2
2
  # !/usr/bin/env python
3
3
  """
4
- Date: 2022/2/7 17:54
4
+ Date: 2025/8/7 18:30
5
5
  Desc: 财新数据-指数报告-数字经济指数
6
- https://s.ccxe.com.cn/indices/dei
6
+ https://yun.ccxe.com.cn/indices/dei
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
 
11
12
 
12
- def index_pmi_com_cx() -> pd.DataFrame():
13
+ def index_pmi_com_cx() -> pd.DataFrame:
13
14
  """
14
15
  财新数据-指数报告-财新中国 PMI-综合 PMI
15
- https://s.ccxe.com.cn/indices/pmi
16
+ https://yun.ccxe.com.cn/indices/pmi
16
17
  :return: 财新中国 PMI-综合 PMI
17
18
  :rtype: pandas.DataFrame
18
19
  """
19
- url = "https://s.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
20
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
20
21
  params = {"type": "com"}
21
22
  r = requests.get(url, params=params)
22
23
  data_json = r.json()
@@ -29,18 +30,22 @@ def index_pmi_com_cx() -> pd.DataFrame():
29
30
  "变化值",
30
31
  ]
31
32
  ]
32
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], unit="ms").dt.date
33
+ temp_df["日期"] = (
34
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
35
+ .dt.tz_convert("Asia/Shanghai")
36
+ .dt.date
37
+ )
33
38
  return temp_df
34
39
 
35
40
 
36
- def index_pmi_man_cx() -> pd.DataFrame():
41
+ def index_pmi_man_cx() -> pd.DataFrame:
37
42
  """
38
43
  财新数据-指数报告-财新中国 PMI-制造业 PMI
39
- https://s.ccxe.com.cn/indices/pmi
44
+ https://yun.ccxe.com.cn/indices/pmi
40
45
  :return: 财新中国 PMI-制造业 PMI
41
46
  :rtype: pandas.DataFrame
42
47
  """
43
- url = "https://s.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
48
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
44
49
  params = {"type": "man"}
45
50
  r = requests.get(url, params=params)
46
51
  data_json = r.json()
@@ -53,18 +58,22 @@ def index_pmi_man_cx() -> pd.DataFrame():
53
58
  "变化值",
54
59
  ]
55
60
  ]
56
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], unit="ms").dt.date
61
+ temp_df["日期"] = (
62
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
63
+ .dt.tz_convert("Asia/Shanghai")
64
+ .dt.date
65
+ )
57
66
  return temp_df
58
67
 
59
68
 
60
- def index_pmi_ser_cx() -> pd.DataFrame():
69
+ def index_pmi_ser_cx() -> pd.DataFrame:
61
70
  """
62
71
  财新数据-指数报告-财新中国 PMI-服务业 PMI
63
- https://s.ccxe.com.cn/indices/pmi
72
+ https://yun.ccxe.com.cn/indices/pmi
64
73
  :return: 财新中国 PMI-服务业 PMI
65
74
  :rtype: pandas.DataFrame
66
75
  """
67
- url = "https://s.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
76
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
68
77
  params = {"type": "ser"}
69
78
  r = requests.get(url, params=params)
70
79
  data_json = r.json()
@@ -77,18 +86,22 @@ def index_pmi_ser_cx() -> pd.DataFrame():
77
86
  "变化值",
78
87
  ]
79
88
  ]
80
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], unit="ms").dt.date
89
+ temp_df["日期"] = (
90
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
91
+ .dt.tz_convert("Asia/Shanghai")
92
+ .dt.date
93
+ )
81
94
  return temp_df
82
95
 
83
96
 
84
- def index_dei_cx() -> pd.DataFrame():
97
+ def index_dei_cx() -> pd.DataFrame:
85
98
  """
86
99
  财新数据-指数报告-数字经济指数
87
- https://s.ccxe.com.cn/indices/dei
100
+ https://yun.ccxe.com.cn/indices/dei
88
101
  :return: 数字经济指数
89
102
  :rtype: pandas.DataFrame
90
103
  """
91
- url = "https://s.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
104
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
92
105
  params = {"type": "dei"}
93
106
  r = requests.get(url, params=params)
94
107
  data_json = r.json()
@@ -101,18 +114,22 @@ def index_dei_cx() -> pd.DataFrame():
101
114
  "变化值",
102
115
  ]
103
116
  ]
104
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], unit="ms").dt.date
117
+ temp_df["日期"] = (
118
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
119
+ .dt.tz_convert("Asia/Shanghai")
120
+ .dt.date
121
+ )
105
122
  return temp_df
106
123
 
107
124
 
108
- def index_ii_cx() -> pd.DataFrame():
125
+ def index_ii_cx() -> pd.DataFrame:
109
126
  """
110
127
  财新数据-指数报告-产业指数
111
- https://s.ccxe.com.cn/indices/dei
128
+ https://yun.ccxe.com.cn/indices/dei
112
129
  :return: 产业指数
113
130
  :rtype: pandas.DataFrame
114
131
  """
115
- url = "https://s.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
132
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
116
133
  params = {"type": "ii"}
117
134
  r = requests.get(url, params=params)
118
135
  data_json = r.json()
@@ -125,18 +142,22 @@ def index_ii_cx() -> pd.DataFrame():
125
142
  "变化值",
126
143
  ]
127
144
  ]
128
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], unit="ms").dt.date
145
+ temp_df["日期"] = (
146
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
147
+ .dt.tz_convert("Asia/Shanghai")
148
+ .dt.date
149
+ )
129
150
  return temp_df
130
151
 
131
152
 
132
- def index_si_cx() -> pd.DataFrame():
153
+ def index_si_cx() -> pd.DataFrame:
133
154
  """
134
155
  财新数据-指数报告-溢出指数
135
- https://s.ccxe.com.cn/indices/dei
156
+ https://yun.ccxe.com.cn/indices/dei
136
157
  :return: 溢出指数
137
158
  :rtype: pandas.DataFrame
138
159
  """
139
- url = "https://s.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
160
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
140
161
  params = {"type": "si"}
141
162
  r = requests.get(url, params=params)
142
163
  data_json = r.json()
@@ -149,18 +170,22 @@ def index_si_cx() -> pd.DataFrame():
149
170
  "变化值",
150
171
  ]
151
172
  ]
152
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], unit="ms").dt.date
173
+ temp_df["日期"] = (
174
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
175
+ .dt.tz_convert("Asia/Shanghai")
176
+ .dt.date
177
+ )
153
178
  return temp_df
154
179
 
155
180
 
156
- def index_fi_cx() -> pd.DataFrame():
181
+ def index_fi_cx() -> pd.DataFrame:
157
182
  """
158
183
  财新数据-指数报告-融合指数
159
- https://s.ccxe.com.cn/indices/dei
184
+ https://yun.ccxe.com.cn/indices/dei
160
185
  :return: 融合指数
161
186
  :rtype: pandas.DataFrame
162
187
  """
163
- url = "https://s.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
188
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
164
189
  params = {"type": "fi"}
165
190
  r = requests.get(url, params=params)
166
191
  data_json = r.json()
@@ -173,18 +198,22 @@ def index_fi_cx() -> pd.DataFrame():
173
198
  "变化值",
174
199
  ]
175
200
  ]
176
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], unit="ms").dt.date
201
+ temp_df["日期"] = (
202
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
203
+ .dt.tz_convert("Asia/Shanghai")
204
+ .dt.date
205
+ )
177
206
  return temp_df
178
207
 
179
208
 
180
- def index_bi_cx() -> pd.DataFrame():
209
+ def index_bi_cx() -> pd.DataFrame:
181
210
  """
182
211
  财新数据-指数报告-基础指数
183
- https://s.ccxe.com.cn/indices/dei
212
+ https://yun.ccxe.com.cn/indices/dei
184
213
  :return: 基础指数
185
214
  :rtype: pandas.DataFrame
186
215
  """
187
- url = "https://s.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
216
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
188
217
  params = {"type": "bi"}
189
218
  r = requests.get(url, params=params)
190
219
  data_json = r.json()
@@ -197,18 +226,22 @@ def index_bi_cx() -> pd.DataFrame():
197
226
  "变化值",
198
227
  ]
199
228
  ]
200
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], unit="ms").dt.date
229
+ temp_df["日期"] = (
230
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
231
+ .dt.tz_convert("Asia/Shanghai")
232
+ .dt.date
233
+ )
201
234
  return temp_df
202
235
 
203
236
 
204
- def index_nei_cx() -> pd.DataFrame():
237
+ def index_nei_cx() -> pd.DataFrame:
205
238
  """
206
239
  财新数据-指数报告-中国新经济指数
207
- https://s.ccxe.com.cn/indices/nei
240
+ https://yun.ccxe.com.cn/indices/nei
208
241
  :return: 中国新经济指数
209
242
  :rtype: pandas.DataFrame
210
243
  """
211
- url = "https://s.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
244
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
212
245
  params = {"type": "nei"}
213
246
  r = requests.get(url, params=params)
214
247
  data_json = r.json()
@@ -221,18 +254,22 @@ def index_nei_cx() -> pd.DataFrame():
221
254
  "变化值",
222
255
  ]
223
256
  ]
224
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], unit="ms").dt.date
257
+ temp_df["日期"] = (
258
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
259
+ .dt.tz_convert("Asia/Shanghai")
260
+ .dt.date
261
+ )
225
262
  return temp_df
226
263
 
227
264
 
228
- def index_li_cx() -> pd.DataFrame():
265
+ def index_li_cx() -> pd.DataFrame:
229
266
  """
230
267
  财新数据-指数报告-劳动力投入指数
231
- https://s.ccxe.com.cn/indices/nei
268
+ https://yun.ccxe.com.cn/indices/nei
232
269
  :return: 劳动力投入指数
233
270
  :rtype: pandas.DataFrame
234
271
  """
235
- url = "https://s.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
272
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
236
273
  params = {"type": "li"}
237
274
  r = requests.get(url, params=params)
238
275
  data_json = r.json()
@@ -245,18 +282,22 @@ def index_li_cx() -> pd.DataFrame():
245
282
  "变化值",
246
283
  ]
247
284
  ]
248
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], unit="ms").dt.date
285
+ temp_df["日期"] = (
286
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
287
+ .dt.tz_convert("Asia/Shanghai")
288
+ .dt.date
289
+ )
249
290
  return temp_df
250
291
 
251
292
 
252
- def index_ci_cx() -> pd.DataFrame():
293
+ def index_ci_cx() -> pd.DataFrame:
253
294
  """
254
295
  财新数据-指数报告-资本投入指数
255
- https://s.ccxe.com.cn/indices/nei
296
+ https://yun.ccxe.com.cn/indices/nei
256
297
  :return: 资本投入指数
257
298
  :rtype: pandas.DataFrame
258
299
  """
259
- url = "https://s.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
300
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
260
301
  params = {"type": "ci"}
261
302
  r = requests.get(url, params=params)
262
303
  data_json = r.json()
@@ -269,18 +310,22 @@ def index_ci_cx() -> pd.DataFrame():
269
310
  "变化值",
270
311
  ]
271
312
  ]
272
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], unit="ms").dt.date
313
+ temp_df["日期"] = (
314
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
315
+ .dt.tz_convert("Asia/Shanghai")
316
+ .dt.date
317
+ )
273
318
  return temp_df
274
319
 
275
320
 
276
- def index_ti_cx() -> pd.DataFrame():
321
+ def index_ti_cx() -> pd.DataFrame:
277
322
  """
278
323
  财新数据-指数报告-科技投入指数
279
- https://s.ccxe.com.cn/indices/nei
324
+ https://yun.ccxe.com.cn/indices/nei
280
325
  :return: 科技投入指数
281
326
  :rtype: pandas.DataFrame
282
327
  """
283
- url = "https://s.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
328
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
284
329
  params = {"type": "ti"}
285
330
  r = requests.get(url, params=params)
286
331
  data_json = r.json()
@@ -293,18 +338,22 @@ def index_ti_cx() -> pd.DataFrame():
293
338
  "变化值",
294
339
  ]
295
340
  ]
296
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], unit="ms").dt.date
341
+ temp_df["日期"] = (
342
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
343
+ .dt.tz_convert("Asia/Shanghai")
344
+ .dt.date
345
+ )
297
346
  return temp_df
298
347
 
299
348
 
300
- def index_neaw_cx() -> pd.DataFrame():
349
+ def index_neaw_cx() -> pd.DataFrame:
301
350
  """
302
351
  财新数据-指数报告-新经济行业入职平均工资水平
303
- https://s.ccxe.com.cn/indices/nei
352
+ https://yun.ccxe.com.cn/indices/nei
304
353
  :return: 新经济行业入职平均工资水平
305
354
  :rtype: pandas.DataFrame
306
355
  """
307
- url = "https://s.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
356
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
308
357
  params = {"type": "neaw"}
309
358
  r = requests.get(url, params=params)
310
359
  data_json = r.json()
@@ -317,18 +366,22 @@ def index_neaw_cx() -> pd.DataFrame():
317
366
  "变化值",
318
367
  ]
319
368
  ]
320
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], unit="ms").dt.date
369
+ temp_df["日期"] = (
370
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
371
+ .dt.tz_convert("Asia/Shanghai")
372
+ .dt.date
373
+ )
321
374
  return temp_df
322
375
 
323
376
 
324
- def index_awpr_cx() -> pd.DataFrame():
377
+ def index_awpr_cx() -> pd.DataFrame:
325
378
  """
326
379
  财新数据-指数报告-新经济入职工资溢价水平
327
- https://s.ccxe.com.cn/indices/nei
380
+ https://yun.ccxe.com.cn/indices/nei
328
381
  :return: 新经济入职工资溢价水平
329
382
  :rtype: pandas.DataFrame
330
383
  """
331
- url = "https://s.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
384
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
332
385
  params = {"type": "awpr"}
333
386
  r = requests.get(url, params=params)
334
387
  data_json = r.json()
@@ -341,18 +394,22 @@ def index_awpr_cx() -> pd.DataFrame():
341
394
  "变化值",
342
395
  ]
343
396
  ]
344
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], unit="ms").dt.date
397
+ temp_df["日期"] = (
398
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
399
+ .dt.tz_convert("Asia/Shanghai")
400
+ .dt.date
401
+ )
345
402
  return temp_df
346
403
 
347
404
 
348
- def index_cci_cx() -> pd.DataFrame():
405
+ def index_cci_cx() -> pd.DataFrame:
349
406
  """
350
407
  财新数据-指数报告-大宗商品指数
351
- https://s.ccxe.com.cn/indices/cci
408
+ https://yun.ccxe.com.cn/indices/nei
352
409
  :return: 大宗商品指数
353
410
  :rtype: pandas.DataFrame
354
411
  """
355
- url = "https://s.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
412
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
356
413
  params = {
357
414
  "type": "cci",
358
415
  "code": "1000050",
@@ -369,7 +426,139 @@ def index_cci_cx() -> pd.DataFrame():
369
426
  "变化值",
370
427
  ]
371
428
  ]
372
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], unit="ms").dt.date
429
+ temp_df["日期"] = (
430
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
431
+ .dt.tz_convert("Asia/Shanghai")
432
+ .dt.date
433
+ )
434
+ return temp_df
435
+
436
+
437
+ def index_qli_cx() -> pd.DataFrame:
438
+ """
439
+ 财新数据-指数报告-高质量因子
440
+ https://yun.ccxe.com.cn/indices/qli
441
+ :return: 高质量因子
442
+ :rtype: pandas.DataFrame
443
+ """
444
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
445
+ params = {
446
+ "type": "qli",
447
+ "code": "1000050",
448
+ "month": "-1",
449
+ }
450
+ r = requests.get(url, params=params)
451
+ data_json = r.json()
452
+ temp_df = pd.DataFrame(data_json["data"])
453
+ temp_df.columns = ["变化幅度", "高质量因子指数", "日期"]
454
+ temp_df = temp_df[
455
+ [
456
+ "日期",
457
+ "高质量因子指数",
458
+ "变化幅度",
459
+ ]
460
+ ]
461
+ temp_df["日期"] = (
462
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
463
+ .dt.tz_convert("Asia/Shanghai")
464
+ .dt.date
465
+ )
466
+ return temp_df
467
+
468
+
469
+ def index_ai_cx() -> pd.DataFrame:
470
+ """
471
+ 财新数据-指数报告-AI策略指数
472
+ https://yun.ccxe.com.cn/indices/ai
473
+ :return: AI策略指数
474
+ :rtype: pandas.DataFrame
475
+ """
476
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
477
+ params = {
478
+ "type": "ai",
479
+ "code": "1000050",
480
+ "month": "-1",
481
+ }
482
+ r = requests.get(url, params=params)
483
+ data_json = r.json()
484
+ temp_df = pd.DataFrame(data_json["data"])
485
+ temp_df.columns = ["变化幅度", "AI策略指数", "日期"]
486
+ temp_df = temp_df[
487
+ [
488
+ "日期",
489
+ "AI策略指数",
490
+ "变化幅度",
491
+ ]
492
+ ]
493
+ temp_df["日期"] = (
494
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
495
+ .dt.tz_convert("Asia/Shanghai")
496
+ .dt.date
497
+ )
498
+ return temp_df
499
+
500
+
501
+ def index_bei_cx() -> pd.DataFrame:
502
+ """
503
+ 财新数据-指数报告-基石经济指数
504
+ https://yun.ccxe.com.cn/indices/bei
505
+ :return: 基石经济指数
506
+ :rtype: pandas.DataFrame
507
+ """
508
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
509
+ params = {
510
+ "type": "ind",
511
+ "code": "930927",
512
+ "month": "-1",
513
+ }
514
+ r = requests.get(url, params=params)
515
+ data_json = r.json()
516
+ temp_df = pd.DataFrame(data_json["data"])
517
+ temp_df.columns = ["变化幅度", "基石经济指数", "日期"]
518
+ temp_df = temp_df[
519
+ [
520
+ "日期",
521
+ "基石经济指数",
522
+ "变化幅度",
523
+ ]
524
+ ]
525
+ temp_df["日期"] = (
526
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
527
+ .dt.tz_convert("Asia/Shanghai")
528
+ .dt.date
529
+ )
530
+ return temp_df
531
+
532
+
533
+ def index_neei_cx() -> pd.DataFrame:
534
+ """
535
+ 财新数据-指数报告-新动能指数
536
+ https://yun.ccxe.com.cn/indices/neei
537
+ :return: 新动能指数
538
+ :rtype: pandas.DataFrame
539
+ """
540
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
541
+ params = {
542
+ "type": "ind",
543
+ "code": "930928",
544
+ "month": "1",
545
+ }
546
+ r = requests.get(url, params=params)
547
+ data_json = r.json()
548
+ temp_df = pd.DataFrame(data_json["data"])
549
+ temp_df.columns = ["变化幅度", "新动能指数", "日期"]
550
+ temp_df = temp_df[
551
+ [
552
+ "日期",
553
+ "新动能指数",
554
+ "变化幅度",
555
+ ]
556
+ ]
557
+ temp_df["日期"] = (
558
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
559
+ .dt.tz_convert("Asia/Shanghai")
560
+ .dt.date
561
+ )
373
562
  return temp_df
374
563
 
375
564
 
@@ -418,3 +607,15 @@ if __name__ == "__main__":
418
607
 
419
608
  index_cci_cx_df = index_cci_cx()
420
609
  print(index_cci_cx_df)
610
+
611
+ index_qli_cx_df = index_qli_cx()
612
+ print(index_qli_cx_df)
613
+
614
+ index_ai_cx_df = index_ai_cx()
615
+ print(index_ai_cx_df)
616
+
617
+ index_bei_cx_df = index_bei_cx()
618
+ print(index_bei_cx_df)
619
+
620
+ index_neei_cx_df = index_neei_cx()
621
+ print(index_neei_cx_df)
@@ -1,11 +1,12 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/9/30 15:30
4
+ Date: 2024/9/26 18:00
5
5
  Desc: Drewry 集装箱指数
6
6
  https://www.drewry.co.uk/supply-chain-advisors/supply-chain-expertise/world-container-index-assessed-by-drewry
7
7
  https://infogram.com/world-container-index-1h17493095xl4zj
8
8
  """
9
+
9
10
  import pandas as pd
10
11
  import requests
11
12
  from bs4 import BeautifulSoup
@@ -17,7 +18,8 @@ def drewry_wci_index(symbol: str = "composite") -> pd.DataFrame:
17
18
  """
18
19
  Drewry 集装箱指数
19
20
  https://infogram.com/world-container-index-1h17493095xl4zj
20
- :param symbol: choice of {"composite", "shanghai-rotterdam", "rotterdam-shanghai", "shanghai-los angeles", "los angeles-shanghai", "shanghai-genoa", "new york-rotterdam", "rotterdam-new york"}
21
+ :param symbol: choice of {"composite", "shanghai-rotterdam", "rotterdam-shanghai", "shanghai-los angeles",
22
+ "los angeles-shanghai", "shanghai-genoa", "new york-rotterdam", "rotterdam-new york"}
21
23
  :type symbol: str
22
24
  :return: Drewry 集装箱指数
23
25
  :rtype: pandas.DataFrame
@@ -34,24 +36,23 @@ def drewry_wci_index(symbol: str = "composite") -> pd.DataFrame:
34
36
  }
35
37
  url = "https://infogram.com/world-container-index-1h17493095xl4zj"
36
38
  r = requests.get(url)
37
- soup = BeautifulSoup(r.text, "lxml")
39
+ soup = BeautifulSoup(r.text, features="lxml")
38
40
  data_text = soup.find_all("script")[-4].string.strip("window.infographicData=")[:-1]
39
41
  data_json = demjson.decode(data_text)
40
- temp_df = pd.DataFrame(data_json["elements"][2]["data"][symbol_map[symbol]])
41
- temp_df = temp_df.iloc[1:, :]
42
+ data_json_need = data_json["elements"]["content"]["content"]["entities"][
43
+ "7a55585f-3fb3-44e6-9b54-beea1cd20b4d"
44
+ ]["data"][symbol_map[symbol]]
45
+ date_list = [item[0]["value"] for item in data_json_need[1:]]
46
+ try:
47
+ value_list = [item[1]["value"] for item in data_json_need[1:]]
48
+ except TypeError:
49
+ value_list = [item[1]["value"] for item in data_json_need[1:-1]]
50
+ temp_df = pd.DataFrame([date_list, value_list]).T
42
51
  temp_df.columns = ["date", "wci"]
43
- temp_df["date"] = [item["value"] for item in temp_df["date"]]
44
- temp_df["wci"] = [item["value"] for item in temp_df["wci"]]
45
- day = temp_df["date"].str.split("-", expand=True).iloc[:, 0].str.strip()
46
- month = temp_df["date"].str.split("-", expand=True).iloc[:, 1].str.strip()
47
- month = month.str.replace("July", "Jul")
48
- year = temp_df["date"].str.split("-", expand=True).iloc[:, 2].str.strip()
49
- temp_df["date"] = day + "-" + month + "-" + year
50
- # 修正数据源中日期格式的错误
51
- temp_df["date"] = temp_df["date"].str.replace("Sept", "Sep")
52
- temp_df["date"] = pd.to_datetime(temp_df["date"], format="%d-%b-%y").dt.date
52
+ temp_df["date"] = pd.to_datetime(
53
+ temp_df["date"], format="%d-%b-%y", errors="coerce"
54
+ ).dt.date
53
55
  temp_df["wci"] = pd.to_numeric(temp_df["wci"], errors="coerce")
54
- temp_df.reset_index(inplace=True, drop=True)
55
56
  return temp_df
56
57
 
57
58
 
@@ -5,6 +5,7 @@ Date: 2023/6/19 18:16
5
5
  Desc: 浙江省排污权交易指数
6
6
  https://zs.zjpwq.net/
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11