akshare 1.14.49__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 (343) hide show
  1. akshare/__init__.py +595 -129
  2. akshare/air/air_hebei.py +77 -54
  3. akshare/air/air_zhenqi.py +0 -4
  4. akshare/air/cons.py +1 -0
  5. akshare/air/crypto.js +1 -1
  6. akshare/air/outcrypto.js +1 -1
  7. akshare/article/cons.py +1 -0
  8. akshare/article/epu_index.py +4 -3
  9. akshare/article/ff_factor.py +19 -8
  10. akshare/article/fred_md.py +4 -1
  11. akshare/article/risk_rv.py +3 -8
  12. akshare/bank/bank_cbirc_2020.py +11 -11
  13. akshare/bank/cons.py +7 -6
  14. akshare/bond/bond_buy_back_em.py +228 -0
  15. akshare/bond/bond_cb_sina.py +1 -0
  16. akshare/bond/bond_cb_ths.py +17 -9
  17. akshare/bond/bond_cbond.py +19 -14
  18. akshare/bond/bond_china.py +38 -39
  19. akshare/bond/bond_china_money.py +1 -1
  20. akshare/bond/bond_convert.py +10 -9
  21. akshare/bond/bond_em.py +37 -17
  22. akshare/bond/bond_summary.py +38 -37
  23. akshare/bond/bond_zh_cov.py +31 -40
  24. akshare/bond/bond_zh_sina.py +4 -0
  25. akshare/bond/cons.py +14 -11
  26. akshare/cal/__init__.py +0 -0
  27. akshare/cal/rv.py +170 -0
  28. akshare/cost/cost_living.py +7 -5
  29. akshare/crypto/__init__.py +1 -1
  30. akshare/crypto/crypto_bitcoin_cme.py +9 -7
  31. akshare/crypto/crypto_hold.py +4 -2
  32. akshare/currency/currency.py +1 -0
  33. akshare/currency/currency_china_bank_sina.py +11 -6
  34. akshare/data/__init__.py +1 -1
  35. akshare/data/cninfo.js +1 -1
  36. akshare/datasets.py +10 -21
  37. akshare/economic/cons.py +10 -3
  38. akshare/economic/macro_australia.py +74 -69
  39. akshare/economic/macro_bank.py +95 -653
  40. akshare/economic/macro_canada.py +92 -81
  41. akshare/economic/macro_china.py +97 -105
  42. akshare/economic/macro_china_hk.py +0 -1
  43. akshare/economic/macro_euro.py +103 -56
  44. akshare/economic/macro_finance_ths.py +7 -5
  45. akshare/economic/macro_germany.py +1 -1
  46. akshare/economic/macro_japan.py +0 -1
  47. akshare/economic/macro_other.py +1 -6
  48. akshare/economic/macro_swiss.py +2 -3
  49. akshare/economic/macro_uk.py +1 -1
  50. akshare/economic/macro_usa.py +7 -9
  51. akshare/economic/marco_cnbs.py +11 -6
  52. akshare/energy/energy_carbon.py +0 -1
  53. akshare/energy/energy_oil_em.py +1 -2
  54. akshare/event/cons.py +1 -0
  55. akshare/exceptions.py +43 -0
  56. akshare/file_fold/calendar.json +245 -2
  57. akshare/forex/__init__.py +0 -0
  58. akshare/forex/cons.py +192 -0
  59. akshare/forex/forex_em.py +149 -0
  60. akshare/fortune/fortune_500.py +1 -37
  61. akshare/fortune/fortune_bloomberg.py +6 -3
  62. akshare/fortune/fortune_forbes_500.py +3 -6
  63. akshare/fortune/fortune_hurun.py +2 -1
  64. akshare/fortune/fortune_xincaifu_500.py +17 -14
  65. akshare/fund/fund_announcement_em.py +145 -0
  66. akshare/fund/fund_aum_em.py +49 -35
  67. akshare/fund/fund_em.py +251 -220
  68. akshare/fund/fund_etf_em.py +44 -35
  69. akshare/fund/fund_etf_sina.py +75 -27
  70. akshare/fund/fund_etf_ths.py +2 -0
  71. akshare/fund/fund_fee_em.py +172 -0
  72. akshare/fund/fund_fhsp_em.py +42 -32
  73. akshare/fund/fund_init_em.py +8 -5
  74. akshare/fund/fund_lof_em.py +12 -19
  75. akshare/fund/fund_manager.py +25 -11
  76. akshare/fund/fund_overview_em.py +42 -0
  77. akshare/fund/fund_portfolio_em.py +23 -21
  78. akshare/fund/fund_position_lg.py +19 -8
  79. akshare/fund/fund_rank_em.py +2 -5
  80. akshare/fund/fund_rating.py +33 -12
  81. akshare/fund/fund_scale_em.py +24 -13
  82. akshare/fund/fund_scale_sina.py +20 -10
  83. akshare/fund/fund_xq.py +3 -2
  84. akshare/futures/cons.py +135 -39
  85. akshare/futures/cot.py +55 -56
  86. akshare/futures/futures_basis.py +49 -11
  87. akshare/futures/futures_comex_em.py +1 -0
  88. akshare/futures/futures_comm_ctp.py +1 -1
  89. akshare/futures/futures_contract_detail.py +59 -9
  90. akshare/futures/futures_daily_bar.py +66 -59
  91. akshare/futures/futures_foreign.py +14 -8
  92. akshare/futures/futures_hf_em.py +215 -61
  93. akshare/futures/futures_hist_em.py +191 -0
  94. akshare/futures/futures_hq_sina.py +5 -3
  95. akshare/futures/futures_index_ccidx.py +24 -82
  96. akshare/futures/futures_inventory_99.py +70 -272
  97. akshare/futures/futures_inventory_em.py +14 -11
  98. akshare/futures/futures_news_shmet.py +2 -2
  99. akshare/futures/futures_roll_yield.py +11 -24
  100. akshare/futures/futures_rule.py +7 -3
  101. akshare/futures/futures_rule_em.py +38 -0
  102. akshare/futures/futures_settlement_price_sgx.py +21 -6
  103. akshare/futures/futures_stock_js.py +0 -1
  104. akshare/futures/futures_to_spot.py +5 -6
  105. akshare/futures/futures_warehouse_receipt.py +48 -47
  106. akshare/futures/futures_zh_sina.py +3 -3
  107. akshare/futures/receipt.py +298 -165
  108. akshare/futures/requests_fun.py +16 -3
  109. akshare/futures/symbol_var.py +32 -13
  110. akshare/futures_derivative/cons.py +100 -103
  111. akshare/futures_derivative/futures_contract_info_cffex.py +55 -39
  112. akshare/futures_derivative/futures_contract_info_czce.py +2 -0
  113. akshare/futures_derivative/futures_contract_info_dce.py +43 -17
  114. akshare/futures_derivative/futures_contract_info_gfex.py +43 -31
  115. akshare/futures_derivative/futures_contract_info_ine.py +43 -34
  116. akshare/futures_derivative/futures_contract_info_shfe.py +3 -4
  117. akshare/futures_derivative/futures_cot_sina.py +8 -6
  118. akshare/futures_derivative/futures_index_sina.py +25 -13
  119. akshare/fx/cons.py +12 -7
  120. akshare/fx/fx_c_swap_cm.py +62 -0
  121. akshare/fx/fx_quote.py +3 -2
  122. akshare/fx/fx_quote_baidu.py +2 -1
  123. akshare/hf/__init__.py +1 -1
  124. akshare/hf/hf_sp500.py +8 -7
  125. akshare/index/cons.py +132 -28
  126. akshare/index/index_cni.py +7 -7
  127. akshare/index/index_cons.py +2 -2
  128. akshare/index/index_csindex.py +68 -0
  129. akshare/index/index_cx.py +20 -20
  130. akshare/index/index_drewry.py +17 -16
  131. akshare/index/index_eri.py +1 -0
  132. akshare/index/index_global_em.py +167 -0
  133. akshare/index/index_global_sina.py +82 -0
  134. akshare/index/index_kq_fz.py +17 -14
  135. akshare/index/index_kq_ss.py +1 -0
  136. akshare/index/index_option_qvix.py +351 -16
  137. akshare/index/index_research_sw.py +21 -21
  138. akshare/index/index_spot.py +9 -5
  139. akshare/index/index_stock_hk.py +5 -9
  140. akshare/index/index_stock_zh.py +111 -24
  141. akshare/index/index_stock_zh_csindex.py +3 -367
  142. akshare/index/index_sugar.py +18 -4
  143. akshare/index/index_sw.py +10 -2
  144. akshare/index/index_yw.py +53 -75
  145. akshare/index/index_zh_em.py +15 -82
  146. akshare/interest_rate/interbank_rate_em.py +0 -1
  147. akshare/movie/jm.js +0 -1
  148. akshare/news/__init__.py +1 -1
  149. akshare/news/news_baidu.py +395 -222
  150. akshare/news/news_stock.py +49 -16
  151. akshare/option/cons.py +2 -2
  152. akshare/option/option_commodity.py +341 -220
  153. akshare/option/option_commodity_sina.py +22 -26
  154. akshare/option/option_contract_info_ctp.py +63 -0
  155. akshare/option/option_current_sse.py +61 -0
  156. akshare/option/option_current_szse.py +84 -0
  157. akshare/option/option_czce.py +37 -9
  158. akshare/option/option_daily_stats_sse_szse.py +0 -1
  159. akshare/option/option_em.py +4 -8
  160. akshare/option/option_finance.py +60 -12
  161. akshare/option/option_finance_sina.py +7 -7
  162. akshare/option/option_lhb_em.py +0 -1
  163. akshare/option/option_margin.py +62 -0
  164. akshare/option/option_premium_analysis_em.py +58 -53
  165. akshare/option/option_risk_analysis_em.py +11 -8
  166. akshare/option/option_risk_indicator_sse.py +3 -4
  167. akshare/option/option_value_analysis_em.py +62 -55
  168. akshare/other/__init__.py +1 -1
  169. akshare/pro/__init__.py +0 -1
  170. akshare/pro/client.py +6 -4
  171. akshare/pro/cons.py +3 -2
  172. akshare/pro/data_pro.py +6 -5
  173. akshare/qdii/__init__.py +0 -0
  174. akshare/qdii/qdii_jsl.py +233 -0
  175. akshare/qhkc/__init__.py +1 -6
  176. akshare/qhkc/qhkc_api.py +64 -22
  177. akshare/qhkc_web/__init__.py +1 -6
  178. akshare/qhkc_web/qhkc_fund.py +10 -6
  179. akshare/qhkc_web/qhkc_index.py +28 -14
  180. akshare/qhkc_web/qhkc_tool.py +62 -59
  181. akshare/rate/__init__.py +1 -1
  182. akshare/rate/repo_rate.py +36 -32
  183. akshare/reits/__init__.py +1 -1
  184. akshare/reits/reits_basic.py +149 -13
  185. akshare/request.py +117 -0
  186. akshare/spot/__init__.py +1 -1
  187. akshare/spot/spot_hog_soozhu.py +165 -3
  188. akshare/spot/spot_sge.py +70 -9
  189. akshare/stock/cons.py +60 -23
  190. akshare/stock/stock_allotment_cninfo.py +8 -8
  191. akshare/stock/stock_ask_bid_em.py +3 -78
  192. akshare/stock/stock_board_concept_em.py +160 -35
  193. akshare/stock/stock_board_industry_em.py +163 -70
  194. akshare/stock/stock_dividend_cninfo.py +31 -17
  195. akshare/stock/stock_dzjy_em.py +347 -260
  196. akshare/stock/stock_fund_em.py +72 -64
  197. akshare/stock/stock_fund_hold.py +1 -2
  198. akshare/stock/stock_gsrl_em.py +1 -0
  199. akshare/stock/stock_hk_comparison_em.py +175 -0
  200. akshare/stock/stock_hk_famous.py +4 -5
  201. akshare/stock/stock_hk_fhpx_ths.py +2 -1
  202. akshare/stock/stock_hk_hot_rank_em.py +1 -0
  203. akshare/stock/stock_hk_sina.py +84 -36
  204. akshare/stock/stock_hold_control_cninfo.py +82 -0
  205. akshare/stock/stock_hold_control_em.py +0 -2
  206. akshare/stock/stock_hot_rank_em.py +4 -1
  207. akshare/stock/stock_hot_search_baidu.py +32 -19
  208. akshare/stock/stock_hot_up_em.py +4 -1
  209. akshare/stock/stock_hsgt_em.py +155 -0
  210. akshare/stock/stock_industry.py +1 -0
  211. akshare/stock/stock_industry_cninfo.py +1 -2
  212. akshare/stock/stock_info.py +6 -4
  213. akshare/stock/stock_info_em.py +17 -11
  214. akshare/stock/stock_intraday_em.py +4 -78
  215. akshare/stock/stock_intraday_sina.py +2 -2
  216. akshare/stock/stock_news_cx.py +39 -0
  217. akshare/stock/stock_profile_cninfo.py +7 -7
  218. akshare/stock/stock_profile_em.py +302 -0
  219. akshare/stock/stock_rank_forecast.py +6 -5
  220. akshare/stock/stock_repurchase_em.py +7 -2
  221. akshare/stock/stock_share_changes_cninfo.py +7 -5
  222. akshare/stock/stock_share_hold.py +24 -20
  223. akshare/stock/stock_stop.py +6 -6
  224. akshare/stock/stock_summary.py +153 -417
  225. akshare/stock/stock_us_famous.py +5 -6
  226. akshare/stock/stock_us_js.py +3 -2
  227. akshare/stock/stock_us_pink.py +38 -27
  228. akshare/stock/stock_us_sina.py +7 -3
  229. akshare/stock/stock_weibo_nlp.py +18 -20
  230. akshare/stock/stock_xq.py +24 -22
  231. akshare/stock/stock_zh_a_sina.py +8 -5
  232. akshare/stock/stock_zh_a_special.py +240 -243
  233. akshare/stock/stock_zh_a_tick_tx.py +11 -3
  234. akshare/stock/stock_zh_ah_tx.py +23 -26
  235. akshare/stock/stock_zh_b_sina.py +2 -2
  236. akshare/stock/stock_zh_comparison_em.py +250 -0
  237. akshare/stock/stock_zh_kcb_sina.py +67 -64
  238. akshare/stock_a/__init__.py +0 -0
  239. akshare/stock_a/stock_board_concept_name_em.py +170 -0
  240. akshare/stock_a/stock_individual_fund_flow_rank.py +258 -0
  241. akshare/stock_a/stock_zh_a_spot.py +212 -0
  242. akshare/stock_feature/cons.py +1 -0
  243. akshare/stock_feature/stock_a_indicator.py +9 -54
  244. akshare/stock_feature/stock_a_pe_and_pb.py +23 -5
  245. akshare/stock_feature/stock_account_em.py +0 -1
  246. akshare/stock_feature/stock_all_pb.py +2 -1
  247. akshare/stock_feature/stock_analyst_em.py +36 -30
  248. akshare/stock_feature/stock_board_concept_ths.py +328 -0
  249. akshare/stock_feature/stock_board_industry_ths.py +57 -2
  250. akshare/stock_feature/stock_buffett_index_lg.py +10 -8
  251. akshare/stock_feature/stock_classify_sina.py +3 -6
  252. akshare/stock_feature/stock_comment_em.py +81 -144
  253. akshare/stock_feature/stock_congestion_lg.py +2 -1
  254. akshare/stock_feature/stock_cyq_em.py +5 -11
  255. akshare/stock_feature/stock_disclosure_cninfo.py +6 -6
  256. akshare/stock_feature/stock_dxsyl_em.py +121 -74
  257. akshare/stock_feature/stock_ebs_lg.py +5 -4
  258. akshare/stock_feature/stock_esg_sina.py +29 -7
  259. akshare/stock_feature/stock_fhps_em.py +2 -1
  260. akshare/stock_feature/stock_fhps_ths.py +15 -7
  261. akshare/stock_feature/stock_fund_flow.py +30 -22
  262. akshare/stock_feature/stock_gddh_em.py +19 -11
  263. akshare/stock_feature/stock_gdfx_em.py +226 -113
  264. akshare/stock_feature/stock_gdhs.py +75 -50
  265. akshare/stock_feature/stock_gdzjc_em.py +21 -10
  266. akshare/stock_feature/stock_gpzy_em.py +78 -46
  267. akshare/stock_feature/stock_gxl_lg.py +3 -2
  268. akshare/stock_feature/stock_hist_em.py +137 -234
  269. akshare/stock_feature/stock_hist_tx.py +13 -10
  270. akshare/stock_feature/stock_hk_valuation_baidu.py +20 -8
  271. akshare/stock_feature/stock_hot_xq.py +4 -6
  272. akshare/stock_feature/stock_hsgt_em.py +269 -97
  273. akshare/stock_feature/stock_hsgt_exchange_rate.py +115 -87
  274. akshare/stock_feature/stock_hsgt_min_em.py +13 -16
  275. akshare/stock_feature/stock_info.py +7 -80
  276. akshare/stock_feature/stock_inner_trade_xq.py +38 -31
  277. akshare/stock_feature/stock_jgdy_em.py +43 -40
  278. akshare/stock_feature/stock_lhb_em.py +119 -3
  279. akshare/stock_feature/stock_margin_em.py +0 -1
  280. akshare/stock_feature/stock_margin_sse.py +0 -2
  281. akshare/stock_feature/stock_pankou_em.py +71 -35
  282. akshare/stock_feature/stock_qsjy_em.py +13 -4
  283. akshare/stock_feature/stock_report_em.py +151 -7
  284. akshare/stock_feature/stock_research_report_em.py +55 -20
  285. akshare/stock_feature/stock_sy_em.py +20 -15
  286. akshare/stock_feature/stock_technology_ths.py +122 -77
  287. akshare/stock_feature/stock_tfp_em.py +2 -1
  288. akshare/stock_feature/stock_three_report_em.py +21 -5
  289. akshare/stock_feature/stock_ttm_lyr.py +18 -9
  290. akshare/stock_feature/stock_value_em.py +83 -0
  291. akshare/stock_feature/stock_yjbb_em.py +58 -32
  292. akshare/stock_feature/stock_yjyg_cninfo.py +6 -2
  293. akshare/stock_feature/stock_yjyg_em.py +1 -1
  294. akshare/stock_feature/stock_yzxdr_em.py +24 -22
  295. akshare/stock_feature/stock_zdhtmx_em.py +20 -6
  296. akshare/stock_feature/stock_zh_vote_baidu.py +4 -1
  297. akshare/stock_feature/stock_ztb_em.py +39 -24
  298. akshare/stock_fundamental/__init__.py +1 -1
  299. akshare/stock_fundamental/stock_basic_info_xq.py +119 -0
  300. akshare/stock_fundamental/{stock_finance_hk.py → stock_finance_hk_em.py} +23 -16
  301. akshare/stock_fundamental/{stock_finance.py → stock_finance_sina.py} +60 -7
  302. akshare/stock_fundamental/stock_finance_ths.py +524 -57
  303. akshare/stock_fundamental/stock_finance_us_em.py +268 -0
  304. akshare/stock_fundamental/stock_gbjg_em.py +80 -0
  305. akshare/stock_fundamental/stock_hold.py +26 -17
  306. akshare/stock_fundamental/stock_ipo_declare.py +1 -0
  307. akshare/stock_fundamental/stock_kcb_detail_sse.py +10 -10
  308. akshare/stock_fundamental/stock_kcb_sse.py +26 -25
  309. akshare/stock_fundamental/stock_notice.py +12 -3
  310. akshare/stock_fundamental/stock_profit_forecast_em.py +31 -13
  311. akshare/stock_fundamental/stock_profit_forecast_hk_etnet.py +64 -41
  312. akshare/stock_fundamental/stock_profit_forecast_ths.py +86 -35
  313. akshare/stock_fundamental/stock_recommend.py +20 -4
  314. akshare/stock_fundamental/stock_zygc.py +5 -62
  315. akshare/utils/context.py +43 -0
  316. akshare/utils/demjson.py +2009 -1338
  317. akshare/utils/func.py +49 -2
  318. akshare/utils/multi_decrypt.py +53 -0
  319. akshare/utils/token_process.py +6 -5
  320. {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info}/METADATA +54 -80
  321. akshare-1.17.99.dist-info/RECORD +409 -0
  322. {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info}/WHEEL +1 -1
  323. {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info/licenses}/LICENSE +1 -1
  324. tests/test_func.py +3 -5
  325. akshare/bond/bond_futures.py +0 -50
  326. akshare/bond/bond_investing.py +0 -139
  327. akshare/crypto/crypto_hist_investing.py +0 -249
  328. akshare/fund/fund_announcement.py +0 -56
  329. akshare/futures/futures_international.py +0 -170
  330. akshare/futures/futures_news_baidu.py +0 -54
  331. akshare/futures/inventory_data.py +0 -100
  332. akshare/futures_derivative/futures_index_price_nh.py +0 -61
  333. akshare/futures_derivative/futures_index_return_nh.py +0 -47
  334. akshare/futures_derivative/futures_index_volatility_nh.py +0 -53
  335. akshare/futures_derivative/futures_other_index_nh.py +0 -145
  336. akshare/index/index_fear_greed_funddb.py +0 -78
  337. akshare/index/index_investing.py +0 -232
  338. akshare/sport/__init__.py +0 -6
  339. akshare/sport/sport_olympic.py +0 -27
  340. akshare/stock_feature/stock_wencai.py +0 -104
  341. akshare/stock_fundamental/stock_mda_ym.py +0 -40
  342. akshare-1.14.49.dist-info/RECORD +0 -387
  343. {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info}/top_level.txt +0 -0
akshare/index/cons.py CHANGED
@@ -4,9 +4,11 @@
4
4
  Date: 2021/5/27 20:19
5
5
  Desc: 指数配置文件
6
6
  """
7
+
7
8
  # weibo-user-agent
8
9
  index_weibo_headers = {
9
- "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1",
10
+ "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) "
11
+ "AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1",
10
12
  "Referer": "http://data.weibo.com/index/newindex",
11
13
  "Accept": "application/json",
12
14
  "Origin": "https://data.weibo.com",
@@ -24,7 +26,8 @@ sw_cons_headers = {
24
26
  "Host": "www.swsindex.com",
25
27
  "Origin": "http://www.swsindex.com",
26
28
  "Referer": "http://www.swsindex.com/idx0210.aspx?swindexcode=801010",
27
- 'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36",
29
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
30
+ "Chrome/78.0.3904.108 Safari/537.36",
28
31
  "X-AjaxPro-Method": "ReturnContent",
29
32
  }
30
33
 
@@ -36,7 +39,10 @@ sw_payload = {
36
39
  "tablename": "swzs",
37
40
  "key": "L1",
38
41
  "p": "1",
39
- "where": "L1 in('801010','801020','801030','801040','801050','801080','801110','801120','801130','801140','801150','801160','801170','801180','801200','801210','801230','801710','801720','801730','801740','801750','801760','801770','801780','801790','801880','801890','801950','801960','801970','801980')",
42
+ "where": "L1 in('801010','801020','801030','801040','801050','801080','801110','801120','801130',"
43
+ "'801140','801150','801160','801170','801180','801200','801210','801230','801710','801720',"
44
+ "'801730','801740','801750','801760','801770','801780','801790','801880','801890','801950',"
45
+ "'801960','801970','801980')",
40
46
  "orderby": "",
41
47
  "fieldlist": "L1,L2,L3,L4,L5,L6,L7,L8,L11",
42
48
  "pagecount": "28",
@@ -45,47 +51,145 @@ sw_payload = {
45
51
 
46
52
  # sw-headers
47
53
  sw_headers = {
48
- 'Accept': 'application/json, text/javascript, */*',
49
- 'Accept-Encoding': 'gzip, deflate',
50
- 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
51
- 'Cache-Control': 'no-cache',
52
- 'Content-Type': 'application/x-www-form-urlencoded',
53
- 'DNT': '1',
54
- 'Host': 'www.swsindex.com',
55
- 'Origin': 'http://www.swsindex.com',
56
- 'Pragma': 'no-cache',
57
- 'Referer': 'http://www.swsindex.com/idx0120.aspx?columnid=8832',
58
- 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36',
59
- 'X-Requested-With': 'XMLHttpRequest'
54
+ "Accept": "application/json, text/javascript, */*",
55
+ "Accept-Encoding": "gzip, deflate",
56
+ "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
57
+ "Cache-Control": "no-cache",
58
+ "Content-Type": "application/x-www-form-urlencoded",
59
+ "DNT": "1",
60
+ "Host": "www.swsindex.com",
61
+ "Origin": "http://www.swsindex.com",
62
+ "Pragma": "no-cache",
63
+ "Referer": "http://www.swsindex.com/idx0120.aspx?columnid=8832",
64
+ "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
65
+ "Chrome/74.0.3729.169 Safari/537.36",
66
+ "X-Requested-With": "XMLHttpRequest",
60
67
  }
61
68
 
62
69
  # zh-sina-a
63
- zh_sina_index_stock_url = "http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeDataSimple"
70
+ zh_sina_index_stock_url = (
71
+ "http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/"
72
+ "Market_Center.getHQNodeDataSimple"
73
+ )
64
74
  zh_sina_index_stock_payload = {
65
75
  "page": "1",
66
76
  "num": "80",
67
77
  "sort": "symbol",
68
78
  "asc": "1",
69
79
  "node": "hs_s",
70
- "_s_r_a": "page"
80
+ "_s_r_a": "page",
71
81
  }
72
- zh_sina_index_stock_count_url = "http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeStockCountSimple?node=hs_s"
73
- zh_sina_index_stock_hist_url = "https://finance.sina.com.cn/realstock/company/{}/hisdata/klc_kl.js"
82
+ zh_sina_index_stock_count_url = (
83
+ "http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/"
84
+ "Market_Center.getHQNodeStockCountSimple?node=hs_s"
85
+ )
86
+ zh_sina_index_stock_hist_url = (
87
+ "https://finance.sina.com.cn/realstock/company/{}/hisdata/klc_kl.js"
88
+ )
74
89
 
75
90
  # investing
76
91
  short_headers = {
77
- 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36'
92
+ "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
93
+ "Chrome/61.0.3163.91 Safari/537.36"
78
94
  }
79
95
 
80
96
  long_headers = {
81
- 'accept': 'text/plain, */*; q=0.01',
97
+ "accept": "text/plain, */*; q=0.01",
82
98
  # 'accept-encoding': 'gzip, deflate, br',
83
- 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
99
+ "accept-language": "zh-CN,zh;q=0.9,en;q=0.8",
84
100
  # 'cache-control': 'no-cache',
85
- 'content-length': '267',
86
- 'content-type': 'application/x-www-form-urlencoded',
87
- 'origin': 'https://cn.investing.com',
88
- 'referer': 'https://cn.investing.com/commodities/brent-oil-historical-data',
89
- 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36',
90
- 'x-requested-with': 'XMLHttpRequest',
101
+ "content-length": "267",
102
+ "content-type": "application/x-www-form-urlencoded",
103
+ "origin": "https://cn.investing.com",
104
+ "referer": "https://cn.investing.com/commodities/brent-oil-historical-data",
105
+ "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
106
+ "Chrome/61.0.3163.91 Safari/537.36",
107
+ "x-requested-with": "XMLHttpRequest",
108
+ }
109
+
110
+ index_global_sina_symbol_map = {
111
+ # 欧洲股市
112
+ "英国富时100指数": "UKX",
113
+ "德国DAX 30种股价指数": "DAX",
114
+ "俄罗斯MICEX指数": "INDEXCF",
115
+ "法CAC40指数": "CAC",
116
+ "瑞士股票指数": "SWI20",
117
+ "富时意大利MIB指数": "FTSEMIB",
118
+ "荷兰AEX综合指数": "AEX",
119
+ "西班牙IBEX指数": "IBEX",
120
+ "欧洲Stoxx50指数": "SX5E",
121
+ # 美洲股市
122
+ "加拿大S&P/TSX综合指数": "GSPTSE",
123
+ "墨西哥BOLSA指数": "MXX",
124
+ "巴西BOVESPA股票指数": "IBOV",
125
+ # 亚洲股市
126
+ "中国台湾加权指数": "TWJQ",
127
+ "日经225指数": "NKY",
128
+ "首尔综合指数": "KOSPI",
129
+ "印度尼西亚雅加达综合指数": "JCI",
130
+ "印度孟买SENSEX指数": "SENSEX",
131
+ # 澳洲股市
132
+ "澳大利亚标准普尔200指数": "AS51",
133
+ "新西兰NZSE 50指数": "NZ250",
134
+ # 非洲股市
135
+ "埃及CASE 30指数": "CASE",
136
+ }
137
+
138
+ index_global_em_symbol_map = {
139
+ "波罗的海BDI指数": {"code": "BDI", "market": "100"},
140
+ "葡萄牙PSI20": {"code": "PSI20", "market": "100"},
141
+ "菲律宾马尼拉": {"code": "PSI", "market": "100"},
142
+ "泰国SET": {"code": "SET", "market": "100"},
143
+ "俄罗斯RTS": {"code": "RTS", "market": "100"},
144
+ "巴基斯坦卡拉奇": {"code": "KSE100", "market": "100"},
145
+ "越南胡志明": {"code": "VNINDEX", "market": "100"},
146
+ "红筹指数": {"code": "HSCCI", "market": "124"},
147
+ "印尼雅加达综合": {"code": "JKSE", "market": "100"},
148
+ "希腊雅典ASE": {"code": "ASE", "market": "100"},
149
+ "墨西哥BOLSA": {"code": "MXX", "market": "100"},
150
+ "挪威OSEBX": {"code": "OSEBX", "market": "100"},
151
+ "巴西BOVESPA": {"code": "BVSP", "market": "100"},
152
+ "波兰WIG": {"code": "WIG", "market": "100"},
153
+ "印度孟买SENSEX": {"code": "SENSEX", "market": "100"},
154
+ "布拉格指数": {"code": "PX", "market": "100"},
155
+ "荷兰AEX": {"code": "AEX", "market": "100"},
156
+ "冰岛ICEX": {"code": "ICEXI", "market": "100"},
157
+ "斯里兰卡科伦坡": {"code": "CSEALL", "market": "100"},
158
+ "富时新加坡海峡时报": {"code": "STI", "market": "100"},
159
+ "富时意大利MIB": {"code": "MIB", "market": "100"},
160
+ "路透CRB商品指数": {"code": "CRB", "market": "100"},
161
+ "比利时BFX": {"code": "BFX", "market": "100"},
162
+ "富时AIM全股": {"code": "AXX", "market": "100"},
163
+ "新西兰50": {"code": "NZ50", "market": "100"},
164
+ "上证指数": {"code": "000001", "market": "1"},
165
+ "国企指数": {"code": "HSCEI", "market": "100"},
166
+ "沪深300": {"code": "000300", "market": "1"},
167
+ "英国富时100": {"code": "FTSE", "market": "100"},
168
+ "中小100": {"code": "399005", "market": "0"},
169
+ "瑞士SMI": {"code": "SSMI", "market": "100"},
170
+ "西班牙IBEX35": {"code": "IBEX", "market": "100"},
171
+ "瑞典OMXSPI": {"code": "OMXSPI", "market": "100"},
172
+ "爱尔兰综合": {"code": "ISEQ", "market": "100"},
173
+ "韩国KOSPI": {"code": "KS11", "market": "100"},
174
+ "深证成指": {"code": "399001", "market": "0"},
175
+ "韩国KOSPI200": {"code": "KOSPI200", "market": "100"},
176
+ "芬兰赫尔辛基": {"code": "HEX", "market": "100"},
177
+ "恒生指数": {"code": "HSI", "market": "100"},
178
+ "欧洲斯托克50": {"code": "SX5E", "market": "100"},
179
+ "美元指数": {"code": "UDI", "market": "100"},
180
+ "法国CAC40": {"code": "FCHI", "market": "100"},
181
+ "台湾加权": {"code": "TWII", "market": "100"},
182
+ "英国富时250": {"code": "MCX", "market": "100"},
183
+ "富时马来西亚KLCI": {"code": "KLSE", "market": "100"},
184
+ "OMX哥本哈根20": {"code": "OMXC20", "market": "100"},
185
+ "道琼斯": {"code": "DJIA", "market": "100"},
186
+ "奥地利ATX": {"code": "ATX", "market": "100"},
187
+ "加拿大S&P/TSX": {"code": "TSX", "market": "100"},
188
+ "德国DAX30": {"code": "GDAXI", "market": "100"},
189
+ "创业板指": {"code": "399006", "market": "0"},
190
+ "澳大利亚普通股": {"code": "AORD", "market": "100"},
191
+ "标普500": {"code": "SPX", "market": "100"},
192
+ "澳大利亚标普200": {"code": "AS51", "market": "100"},
193
+ "日经225": {"code": "N225", "market": "100"},
194
+ "纳斯达克": {"code": "NDX", "market": "100"},
91
195
  }
@@ -143,19 +143,19 @@ def index_hist_cni(
143
143
  return temp_df
144
144
 
145
145
 
146
- def index_detail_cni(symbol: str = "399001", date: str = "202404") -> pd.DataFrame:
146
+ def index_detail_cni(symbol: str = "399001") -> pd.DataFrame:
147
147
  """
148
148
  国证指数-样本详情-指定日期的样本成份
149
- http://www.cnindex.com.cn/module/index-detail.html?act_menu=1&indexCode=399001
149
+ https://www.cnindex.com.cn/module/index-detail.html?act_menu=1&indexCode=399001
150
150
  :param symbol: 指数代码
151
151
  :type symbol: str
152
- :param date: 指定月份
153
- :type date: str
154
152
  :return: 指定日期的样本成份
155
153
  :rtype: pandas.DataFrame
156
154
  """
157
- url = "http://www.cnindex.com.cn/sample-detail/download"
158
- params = {"indexcode": symbol, "dateStr": "-".join([date[:4], date[4:]])}
155
+ import warnings
156
+ warnings.simplefilter(action="ignore", category=UserWarning)
157
+ url = "https://www.cnindex.com.cn/sample-detail/download-history"
158
+ params = {"indexcode": symbol}
159
159
  r = requests.get(url, params=params)
160
160
  temp_df = pd.read_excel(BytesIO(r.content))
161
161
  temp_df["样本代码"] = temp_df["样本代码"].astype(str).str.zfill(6)
@@ -268,7 +268,7 @@ if __name__ == "__main__":
268
268
  )
269
269
  print(index_hist_cni_df)
270
270
 
271
- index_detail_cni_df = index_detail_cni(symbol="399001", date="202404")
271
+ index_detail_cni_df = index_detail_cni(symbol="399001")
272
272
  print(index_detail_cni_df)
273
273
 
274
274
  index_detail_hist_cni_df = index_detail_hist_cni(symbol="399101", date="202404")
@@ -133,7 +133,7 @@ def index_stock_cons_csindex(symbol: str = "000300") -> pd.DataFrame:
133
133
  :rtype: pandas.DataFrame
134
134
  """
135
135
  url = (
136
- f"https://csi-web-dev.oss-cn-shanghai-finance-1-pub.aliyuncs.com/static/"
136
+ f"https://oss-ch.csindex.com.cn/static/"
137
137
  f"html/csindex/public/uploads/file/autofile/cons/{symbol}cons.xls"
138
138
  )
139
139
  r = requests.get(url)
@@ -167,7 +167,7 @@ def index_stock_cons_weight_csindex(symbol: str = "000300") -> pd.DataFrame:
167
167
  :rtype: pandas.DataFrame
168
168
  """
169
169
  url = (
170
- f"https://csi-web-dev.oss-cn-shanghai-finance-1-pub.aliyuncs.com/static/html/csindex/"
170
+ f"https://oss-ch.csindex.com.cn/static/html/csindex/"
171
171
  f"public/uploads/file/autofile/closeweight/{symbol}closeweight.xls"
172
172
  )
173
173
  r = requests.get(url)
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ Date: 2025/8/4 14:00
5
+ Desc: 中证指数网站-指数列表
6
+ 网站:https://www.csindex.com.cn/#/indices/family/list?index_series=1
7
+ """
8
+ import warnings
9
+ from io import BytesIO
10
+
11
+ import pandas as pd
12
+ import requests
13
+
14
+
15
+ def index_csindex_all() -> pd.DataFrame:
16
+ """
17
+ 中证指数网站-指数列表
18
+ https://www.csindex.com.cn/#/indices/family/list?index_series=1
19
+ Note: 但是不知道数据更新时间
20
+ :return: 最新指数的列表,
21
+ :rtype: pandas.DataFrame
22
+ """
23
+ warnings.filterwarnings("ignore", category=UserWarning, message="Workbook contains no default style")
24
+ url = (
25
+ f"https://www.csindex.com.cn/csindex-home/exportExcel/indexAll/CH"
26
+ )
27
+
28
+ headers = {
29
+ "Content-Type": "application/json;charset=UTF-8",
30
+ }
31
+ playloads = {
32
+ "sorter": {
33
+ "sortField": "null",
34
+ "sortOrder": None
35
+ },
36
+ "pager": {
37
+ "pageNum": 1,
38
+ "pageSize": 10
39
+ },
40
+ "indexFilter": {
41
+ "ifCustomized": None,
42
+ "ifTracked": None,
43
+ "ifWeightCapped": None,
44
+ "indexCompliance": None,
45
+ "hotSpot": None,
46
+ "indexClassify": None,
47
+ "currency": None,
48
+ "region": None,
49
+ "indexSeries": ["1"],
50
+ "undefined": None
51
+ }
52
+ }
53
+ r = requests.post(url, json=playloads, headers=headers)
54
+
55
+ temp_df = pd.read_excel(BytesIO(r.content))
56
+ temp_df["基日"] = pd.to_datetime(
57
+ temp_df["基日"], format="%Y-%m-%d", errors="coerce"
58
+ ).dt.date
59
+ temp_df["发布时间"] = pd.to_datetime(
60
+ temp_df["发布时间"], format="%Y-%m-%d", errors="coerce"
61
+ ).dt.date
62
+ temp_df["指数代码"] = temp_df["指数代码"].astype(str).str.zfill(6)
63
+ return temp_df
64
+
65
+
66
+ if __name__ == "__main__":
67
+ index_csindex_all_df = index_csindex_all()
68
+ print(index_csindex_all_df)
akshare/index/index_cx.py CHANGED
@@ -1,7 +1,7 @@
1
1
  # -*- coding:utf-8 -*-
2
2
  # !/usr/bin/env python
3
3
  """
4
- Date: 2024/6/4 18:30
4
+ Date: 2025/8/7 18:30
5
5
  Desc: 财新数据-指数报告-数字经济指数
6
6
  https://yun.ccxe.com.cn/indices/dei
7
7
  """
@@ -10,7 +10,7 @@ import pandas as pd
10
10
  import requests
11
11
 
12
12
 
13
- def index_pmi_com_cx() -> pd.DataFrame():
13
+ def index_pmi_com_cx() -> pd.DataFrame:
14
14
  """
15
15
  财新数据-指数报告-财新中国 PMI-综合 PMI
16
16
  https://yun.ccxe.com.cn/indices/pmi
@@ -38,7 +38,7 @@ def index_pmi_com_cx() -> pd.DataFrame():
38
38
  return temp_df
39
39
 
40
40
 
41
- def index_pmi_man_cx() -> pd.DataFrame():
41
+ def index_pmi_man_cx() -> pd.DataFrame:
42
42
  """
43
43
  财新数据-指数报告-财新中国 PMI-制造业 PMI
44
44
  https://yun.ccxe.com.cn/indices/pmi
@@ -66,7 +66,7 @@ def index_pmi_man_cx() -> pd.DataFrame():
66
66
  return temp_df
67
67
 
68
68
 
69
- def index_pmi_ser_cx() -> pd.DataFrame():
69
+ def index_pmi_ser_cx() -> pd.DataFrame:
70
70
  """
71
71
  财新数据-指数报告-财新中国 PMI-服务业 PMI
72
72
  https://yun.ccxe.com.cn/indices/pmi
@@ -94,7 +94,7 @@ def index_pmi_ser_cx() -> pd.DataFrame():
94
94
  return temp_df
95
95
 
96
96
 
97
- def index_dei_cx() -> pd.DataFrame():
97
+ def index_dei_cx() -> pd.DataFrame:
98
98
  """
99
99
  财新数据-指数报告-数字经济指数
100
100
  https://yun.ccxe.com.cn/indices/dei
@@ -122,7 +122,7 @@ def index_dei_cx() -> pd.DataFrame():
122
122
  return temp_df
123
123
 
124
124
 
125
- def index_ii_cx() -> pd.DataFrame():
125
+ def index_ii_cx() -> pd.DataFrame:
126
126
  """
127
127
  财新数据-指数报告-产业指数
128
128
  https://yun.ccxe.com.cn/indices/dei
@@ -150,7 +150,7 @@ def index_ii_cx() -> pd.DataFrame():
150
150
  return temp_df
151
151
 
152
152
 
153
- def index_si_cx() -> pd.DataFrame():
153
+ def index_si_cx() -> pd.DataFrame:
154
154
  """
155
155
  财新数据-指数报告-溢出指数
156
156
  https://yun.ccxe.com.cn/indices/dei
@@ -178,7 +178,7 @@ def index_si_cx() -> pd.DataFrame():
178
178
  return temp_df
179
179
 
180
180
 
181
- def index_fi_cx() -> pd.DataFrame():
181
+ def index_fi_cx() -> pd.DataFrame:
182
182
  """
183
183
  财新数据-指数报告-融合指数
184
184
  https://yun.ccxe.com.cn/indices/dei
@@ -206,7 +206,7 @@ def index_fi_cx() -> pd.DataFrame():
206
206
  return temp_df
207
207
 
208
208
 
209
- def index_bi_cx() -> pd.DataFrame():
209
+ def index_bi_cx() -> pd.DataFrame:
210
210
  """
211
211
  财新数据-指数报告-基础指数
212
212
  https://yun.ccxe.com.cn/indices/dei
@@ -234,7 +234,7 @@ def index_bi_cx() -> pd.DataFrame():
234
234
  return temp_df
235
235
 
236
236
 
237
- def index_nei_cx() -> pd.DataFrame():
237
+ def index_nei_cx() -> pd.DataFrame:
238
238
  """
239
239
  财新数据-指数报告-中国新经济指数
240
240
  https://yun.ccxe.com.cn/indices/nei
@@ -262,7 +262,7 @@ def index_nei_cx() -> pd.DataFrame():
262
262
  return temp_df
263
263
 
264
264
 
265
- def index_li_cx() -> pd.DataFrame():
265
+ def index_li_cx() -> pd.DataFrame:
266
266
  """
267
267
  财新数据-指数报告-劳动力投入指数
268
268
  https://yun.ccxe.com.cn/indices/nei
@@ -290,7 +290,7 @@ def index_li_cx() -> pd.DataFrame():
290
290
  return temp_df
291
291
 
292
292
 
293
- def index_ci_cx() -> pd.DataFrame():
293
+ def index_ci_cx() -> pd.DataFrame:
294
294
  """
295
295
  财新数据-指数报告-资本投入指数
296
296
  https://yun.ccxe.com.cn/indices/nei
@@ -318,7 +318,7 @@ def index_ci_cx() -> pd.DataFrame():
318
318
  return temp_df
319
319
 
320
320
 
321
- def index_ti_cx() -> pd.DataFrame():
321
+ def index_ti_cx() -> pd.DataFrame:
322
322
  """
323
323
  财新数据-指数报告-科技投入指数
324
324
  https://yun.ccxe.com.cn/indices/nei
@@ -346,7 +346,7 @@ def index_ti_cx() -> pd.DataFrame():
346
346
  return temp_df
347
347
 
348
348
 
349
- def index_neaw_cx() -> pd.DataFrame():
349
+ def index_neaw_cx() -> pd.DataFrame:
350
350
  """
351
351
  财新数据-指数报告-新经济行业入职平均工资水平
352
352
  https://yun.ccxe.com.cn/indices/nei
@@ -374,7 +374,7 @@ def index_neaw_cx() -> pd.DataFrame():
374
374
  return temp_df
375
375
 
376
376
 
377
- def index_awpr_cx() -> pd.DataFrame():
377
+ def index_awpr_cx() -> pd.DataFrame:
378
378
  """
379
379
  财新数据-指数报告-新经济入职工资溢价水平
380
380
  https://yun.ccxe.com.cn/indices/nei
@@ -402,7 +402,7 @@ def index_awpr_cx() -> pd.DataFrame():
402
402
  return temp_df
403
403
 
404
404
 
405
- def index_cci_cx() -> pd.DataFrame():
405
+ def index_cci_cx() -> pd.DataFrame:
406
406
  """
407
407
  财新数据-指数报告-大宗商品指数
408
408
  https://yun.ccxe.com.cn/indices/nei
@@ -434,7 +434,7 @@ def index_cci_cx() -> pd.DataFrame():
434
434
  return temp_df
435
435
 
436
436
 
437
- def index_qli_cx() -> pd.DataFrame():
437
+ def index_qli_cx() -> pd.DataFrame:
438
438
  """
439
439
  财新数据-指数报告-高质量因子
440
440
  https://yun.ccxe.com.cn/indices/qli
@@ -466,7 +466,7 @@ def index_qli_cx() -> pd.DataFrame():
466
466
  return temp_df
467
467
 
468
468
 
469
- def index_ai_cx() -> pd.DataFrame():
469
+ def index_ai_cx() -> pd.DataFrame:
470
470
  """
471
471
  财新数据-指数报告-AI策略指数
472
472
  https://yun.ccxe.com.cn/indices/ai
@@ -498,7 +498,7 @@ def index_ai_cx() -> pd.DataFrame():
498
498
  return temp_df
499
499
 
500
500
 
501
- def index_bei_cx() -> pd.DataFrame():
501
+ def index_bei_cx() -> pd.DataFrame:
502
502
  """
503
503
  财新数据-指数报告-基石经济指数
504
504
  https://yun.ccxe.com.cn/indices/bei
@@ -530,7 +530,7 @@ def index_bei_cx() -> pd.DataFrame():
530
530
  return temp_df
531
531
 
532
532
 
533
- def index_neei_cx() -> pd.DataFrame():
533
+ def index_neei_cx() -> pd.DataFrame:
534
534
  """
535
535
  财新数据-指数报告-新动能指数
536
536
  https://yun.ccxe.com.cn/indices/neei
@@ -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