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.
- akshare/__init__.py +595 -129
- akshare/air/air_hebei.py +77 -54
- akshare/air/air_zhenqi.py +0 -4
- akshare/air/cons.py +1 -0
- akshare/air/crypto.js +1 -1
- akshare/air/outcrypto.js +1 -1
- akshare/article/cons.py +1 -0
- akshare/article/epu_index.py +4 -3
- akshare/article/ff_factor.py +19 -8
- akshare/article/fred_md.py +4 -1
- akshare/article/risk_rv.py +3 -8
- akshare/bank/bank_cbirc_2020.py +11 -11
- akshare/bank/cons.py +7 -6
- akshare/bond/bond_buy_back_em.py +228 -0
- akshare/bond/bond_cb_sina.py +1 -0
- akshare/bond/bond_cb_ths.py +17 -9
- akshare/bond/bond_cbond.py +19 -14
- akshare/bond/bond_china.py +38 -39
- akshare/bond/bond_china_money.py +1 -1
- akshare/bond/bond_convert.py +10 -9
- akshare/bond/bond_em.py +37 -17
- akshare/bond/bond_summary.py +38 -37
- akshare/bond/bond_zh_cov.py +31 -40
- akshare/bond/bond_zh_sina.py +4 -0
- akshare/bond/cons.py +14 -11
- akshare/cal/__init__.py +0 -0
- akshare/cal/rv.py +170 -0
- akshare/cost/cost_living.py +7 -5
- akshare/crypto/__init__.py +1 -1
- akshare/crypto/crypto_bitcoin_cme.py +9 -7
- akshare/crypto/crypto_hold.py +4 -2
- akshare/currency/currency.py +1 -0
- akshare/currency/currency_china_bank_sina.py +11 -6
- akshare/data/__init__.py +1 -1
- akshare/data/cninfo.js +1 -1
- akshare/datasets.py +10 -21
- akshare/economic/cons.py +10 -3
- akshare/economic/macro_australia.py +74 -69
- akshare/economic/macro_bank.py +95 -653
- akshare/economic/macro_canada.py +92 -81
- akshare/economic/macro_china.py +97 -105
- akshare/economic/macro_china_hk.py +0 -1
- akshare/economic/macro_euro.py +103 -56
- akshare/economic/macro_finance_ths.py +7 -5
- akshare/economic/macro_germany.py +1 -1
- akshare/economic/macro_japan.py +0 -1
- akshare/economic/macro_other.py +1 -6
- akshare/economic/macro_swiss.py +2 -3
- akshare/economic/macro_uk.py +1 -1
- akshare/economic/macro_usa.py +7 -9
- akshare/economic/marco_cnbs.py +11 -6
- akshare/energy/energy_carbon.py +0 -1
- akshare/energy/energy_oil_em.py +1 -2
- akshare/event/cons.py +1 -0
- akshare/exceptions.py +43 -0
- akshare/file_fold/calendar.json +245 -2
- akshare/forex/__init__.py +0 -0
- akshare/forex/cons.py +192 -0
- akshare/forex/forex_em.py +149 -0
- akshare/fortune/fortune_500.py +1 -37
- akshare/fortune/fortune_bloomberg.py +6 -3
- akshare/fortune/fortune_forbes_500.py +3 -6
- akshare/fortune/fortune_hurun.py +2 -1
- akshare/fortune/fortune_xincaifu_500.py +17 -14
- akshare/fund/fund_announcement_em.py +145 -0
- akshare/fund/fund_aum_em.py +49 -35
- akshare/fund/fund_em.py +251 -220
- akshare/fund/fund_etf_em.py +44 -35
- akshare/fund/fund_etf_sina.py +75 -27
- akshare/fund/fund_etf_ths.py +2 -0
- akshare/fund/fund_fee_em.py +172 -0
- akshare/fund/fund_fhsp_em.py +42 -32
- akshare/fund/fund_init_em.py +8 -5
- akshare/fund/fund_lof_em.py +12 -19
- akshare/fund/fund_manager.py +25 -11
- akshare/fund/fund_overview_em.py +42 -0
- akshare/fund/fund_portfolio_em.py +23 -21
- akshare/fund/fund_position_lg.py +19 -8
- akshare/fund/fund_rank_em.py +2 -5
- akshare/fund/fund_rating.py +33 -12
- akshare/fund/fund_scale_em.py +24 -13
- akshare/fund/fund_scale_sina.py +20 -10
- akshare/fund/fund_xq.py +3 -2
- akshare/futures/cons.py +135 -39
- akshare/futures/cot.py +55 -56
- akshare/futures/futures_basis.py +49 -11
- akshare/futures/futures_comex_em.py +1 -0
- akshare/futures/futures_comm_ctp.py +1 -1
- akshare/futures/futures_contract_detail.py +59 -9
- akshare/futures/futures_daily_bar.py +66 -59
- akshare/futures/futures_foreign.py +14 -8
- akshare/futures/futures_hf_em.py +215 -61
- akshare/futures/futures_hist_em.py +191 -0
- akshare/futures/futures_hq_sina.py +5 -3
- akshare/futures/futures_index_ccidx.py +24 -82
- akshare/futures/futures_inventory_99.py +70 -272
- akshare/futures/futures_inventory_em.py +14 -11
- akshare/futures/futures_news_shmet.py +2 -2
- akshare/futures/futures_roll_yield.py +11 -24
- akshare/futures/futures_rule.py +7 -3
- akshare/futures/futures_rule_em.py +38 -0
- akshare/futures/futures_settlement_price_sgx.py +21 -6
- akshare/futures/futures_stock_js.py +0 -1
- akshare/futures/futures_to_spot.py +5 -6
- akshare/futures/futures_warehouse_receipt.py +48 -47
- akshare/futures/futures_zh_sina.py +3 -3
- akshare/futures/receipt.py +298 -165
- akshare/futures/requests_fun.py +16 -3
- akshare/futures/symbol_var.py +32 -13
- akshare/futures_derivative/cons.py +100 -103
- akshare/futures_derivative/futures_contract_info_cffex.py +55 -39
- akshare/futures_derivative/futures_contract_info_czce.py +2 -0
- akshare/futures_derivative/futures_contract_info_dce.py +43 -17
- akshare/futures_derivative/futures_contract_info_gfex.py +43 -31
- akshare/futures_derivative/futures_contract_info_ine.py +43 -34
- akshare/futures_derivative/futures_contract_info_shfe.py +3 -4
- akshare/futures_derivative/futures_cot_sina.py +8 -6
- akshare/futures_derivative/futures_index_sina.py +25 -13
- akshare/fx/cons.py +12 -7
- akshare/fx/fx_c_swap_cm.py +62 -0
- akshare/fx/fx_quote.py +3 -2
- akshare/fx/fx_quote_baidu.py +2 -1
- akshare/hf/__init__.py +1 -1
- akshare/hf/hf_sp500.py +8 -7
- akshare/index/cons.py +132 -28
- akshare/index/index_cni.py +7 -7
- akshare/index/index_cons.py +2 -2
- akshare/index/index_csindex.py +68 -0
- akshare/index/index_cx.py +20 -20
- akshare/index/index_drewry.py +17 -16
- akshare/index/index_eri.py +1 -0
- akshare/index/index_global_em.py +167 -0
- akshare/index/index_global_sina.py +82 -0
- akshare/index/index_kq_fz.py +17 -14
- akshare/index/index_kq_ss.py +1 -0
- akshare/index/index_option_qvix.py +351 -16
- akshare/index/index_research_sw.py +21 -21
- akshare/index/index_spot.py +9 -5
- akshare/index/index_stock_hk.py +5 -9
- akshare/index/index_stock_zh.py +111 -24
- akshare/index/index_stock_zh_csindex.py +3 -367
- akshare/index/index_sugar.py +18 -4
- akshare/index/index_sw.py +10 -2
- akshare/index/index_yw.py +53 -75
- akshare/index/index_zh_em.py +15 -82
- akshare/interest_rate/interbank_rate_em.py +0 -1
- akshare/movie/jm.js +0 -1
- akshare/news/__init__.py +1 -1
- akshare/news/news_baidu.py +395 -222
- akshare/news/news_stock.py +49 -16
- akshare/option/cons.py +2 -2
- akshare/option/option_commodity.py +341 -220
- akshare/option/option_commodity_sina.py +22 -26
- akshare/option/option_contract_info_ctp.py +63 -0
- akshare/option/option_current_sse.py +61 -0
- akshare/option/option_current_szse.py +84 -0
- akshare/option/option_czce.py +37 -9
- akshare/option/option_daily_stats_sse_szse.py +0 -1
- akshare/option/option_em.py +4 -8
- akshare/option/option_finance.py +60 -12
- akshare/option/option_finance_sina.py +7 -7
- akshare/option/option_lhb_em.py +0 -1
- akshare/option/option_margin.py +62 -0
- akshare/option/option_premium_analysis_em.py +58 -53
- akshare/option/option_risk_analysis_em.py +11 -8
- akshare/option/option_risk_indicator_sse.py +3 -4
- akshare/option/option_value_analysis_em.py +62 -55
- akshare/other/__init__.py +1 -1
- akshare/pro/__init__.py +0 -1
- akshare/pro/client.py +6 -4
- akshare/pro/cons.py +3 -2
- akshare/pro/data_pro.py +6 -5
- akshare/qdii/__init__.py +0 -0
- akshare/qdii/qdii_jsl.py +233 -0
- akshare/qhkc/__init__.py +1 -6
- akshare/qhkc/qhkc_api.py +64 -22
- akshare/qhkc_web/__init__.py +1 -6
- akshare/qhkc_web/qhkc_fund.py +10 -6
- akshare/qhkc_web/qhkc_index.py +28 -14
- akshare/qhkc_web/qhkc_tool.py +62 -59
- akshare/rate/__init__.py +1 -1
- akshare/rate/repo_rate.py +36 -32
- akshare/reits/__init__.py +1 -1
- akshare/reits/reits_basic.py +149 -13
- akshare/request.py +117 -0
- akshare/spot/__init__.py +1 -1
- akshare/spot/spot_hog_soozhu.py +165 -3
- akshare/spot/spot_sge.py +70 -9
- akshare/stock/cons.py +60 -23
- akshare/stock/stock_allotment_cninfo.py +8 -8
- akshare/stock/stock_ask_bid_em.py +3 -78
- akshare/stock/stock_board_concept_em.py +160 -35
- akshare/stock/stock_board_industry_em.py +163 -70
- akshare/stock/stock_dividend_cninfo.py +31 -17
- akshare/stock/stock_dzjy_em.py +347 -260
- akshare/stock/stock_fund_em.py +72 -64
- akshare/stock/stock_fund_hold.py +1 -2
- akshare/stock/stock_gsrl_em.py +1 -0
- akshare/stock/stock_hk_comparison_em.py +175 -0
- akshare/stock/stock_hk_famous.py +4 -5
- akshare/stock/stock_hk_fhpx_ths.py +2 -1
- akshare/stock/stock_hk_hot_rank_em.py +1 -0
- akshare/stock/stock_hk_sina.py +84 -36
- akshare/stock/stock_hold_control_cninfo.py +82 -0
- akshare/stock/stock_hold_control_em.py +0 -2
- akshare/stock/stock_hot_rank_em.py +4 -1
- akshare/stock/stock_hot_search_baidu.py +32 -19
- akshare/stock/stock_hot_up_em.py +4 -1
- akshare/stock/stock_hsgt_em.py +155 -0
- akshare/stock/stock_industry.py +1 -0
- akshare/stock/stock_industry_cninfo.py +1 -2
- akshare/stock/stock_info.py +6 -4
- akshare/stock/stock_info_em.py +17 -11
- akshare/stock/stock_intraday_em.py +4 -78
- akshare/stock/stock_intraday_sina.py +2 -2
- akshare/stock/stock_news_cx.py +39 -0
- akshare/stock/stock_profile_cninfo.py +7 -7
- akshare/stock/stock_profile_em.py +302 -0
- akshare/stock/stock_rank_forecast.py +6 -5
- akshare/stock/stock_repurchase_em.py +7 -2
- akshare/stock/stock_share_changes_cninfo.py +7 -5
- akshare/stock/stock_share_hold.py +24 -20
- akshare/stock/stock_stop.py +6 -6
- akshare/stock/stock_summary.py +153 -417
- akshare/stock/stock_us_famous.py +5 -6
- akshare/stock/stock_us_js.py +3 -2
- akshare/stock/stock_us_pink.py +38 -27
- akshare/stock/stock_us_sina.py +7 -3
- akshare/stock/stock_weibo_nlp.py +18 -20
- akshare/stock/stock_xq.py +24 -22
- akshare/stock/stock_zh_a_sina.py +8 -5
- akshare/stock/stock_zh_a_special.py +240 -243
- akshare/stock/stock_zh_a_tick_tx.py +11 -3
- akshare/stock/stock_zh_ah_tx.py +23 -26
- akshare/stock/stock_zh_b_sina.py +2 -2
- akshare/stock/stock_zh_comparison_em.py +250 -0
- akshare/stock/stock_zh_kcb_sina.py +67 -64
- akshare/stock_a/__init__.py +0 -0
- akshare/stock_a/stock_board_concept_name_em.py +170 -0
- akshare/stock_a/stock_individual_fund_flow_rank.py +258 -0
- akshare/stock_a/stock_zh_a_spot.py +212 -0
- akshare/stock_feature/cons.py +1 -0
- akshare/stock_feature/stock_a_indicator.py +9 -54
- akshare/stock_feature/stock_a_pe_and_pb.py +23 -5
- akshare/stock_feature/stock_account_em.py +0 -1
- akshare/stock_feature/stock_all_pb.py +2 -1
- akshare/stock_feature/stock_analyst_em.py +36 -30
- akshare/stock_feature/stock_board_concept_ths.py +328 -0
- akshare/stock_feature/stock_board_industry_ths.py +57 -2
- akshare/stock_feature/stock_buffett_index_lg.py +10 -8
- akshare/stock_feature/stock_classify_sina.py +3 -6
- akshare/stock_feature/stock_comment_em.py +81 -144
- akshare/stock_feature/stock_congestion_lg.py +2 -1
- akshare/stock_feature/stock_cyq_em.py +5 -11
- akshare/stock_feature/stock_disclosure_cninfo.py +6 -6
- akshare/stock_feature/stock_dxsyl_em.py +121 -74
- akshare/stock_feature/stock_ebs_lg.py +5 -4
- akshare/stock_feature/stock_esg_sina.py +29 -7
- akshare/stock_feature/stock_fhps_em.py +2 -1
- akshare/stock_feature/stock_fhps_ths.py +15 -7
- akshare/stock_feature/stock_fund_flow.py +30 -22
- akshare/stock_feature/stock_gddh_em.py +19 -11
- akshare/stock_feature/stock_gdfx_em.py +226 -113
- akshare/stock_feature/stock_gdhs.py +75 -50
- akshare/stock_feature/stock_gdzjc_em.py +21 -10
- akshare/stock_feature/stock_gpzy_em.py +78 -46
- akshare/stock_feature/stock_gxl_lg.py +3 -2
- akshare/stock_feature/stock_hist_em.py +137 -234
- akshare/stock_feature/stock_hist_tx.py +13 -10
- akshare/stock_feature/stock_hk_valuation_baidu.py +20 -8
- akshare/stock_feature/stock_hot_xq.py +4 -6
- akshare/stock_feature/stock_hsgt_em.py +269 -97
- akshare/stock_feature/stock_hsgt_exchange_rate.py +115 -87
- akshare/stock_feature/stock_hsgt_min_em.py +13 -16
- akshare/stock_feature/stock_info.py +7 -80
- akshare/stock_feature/stock_inner_trade_xq.py +38 -31
- akshare/stock_feature/stock_jgdy_em.py +43 -40
- akshare/stock_feature/stock_lhb_em.py +119 -3
- akshare/stock_feature/stock_margin_em.py +0 -1
- akshare/stock_feature/stock_margin_sse.py +0 -2
- akshare/stock_feature/stock_pankou_em.py +71 -35
- akshare/stock_feature/stock_qsjy_em.py +13 -4
- akshare/stock_feature/stock_report_em.py +151 -7
- akshare/stock_feature/stock_research_report_em.py +55 -20
- akshare/stock_feature/stock_sy_em.py +20 -15
- akshare/stock_feature/stock_technology_ths.py +122 -77
- akshare/stock_feature/stock_tfp_em.py +2 -1
- akshare/stock_feature/stock_three_report_em.py +21 -5
- akshare/stock_feature/stock_ttm_lyr.py +18 -9
- akshare/stock_feature/stock_value_em.py +83 -0
- akshare/stock_feature/stock_yjbb_em.py +58 -32
- akshare/stock_feature/stock_yjyg_cninfo.py +6 -2
- akshare/stock_feature/stock_yjyg_em.py +1 -1
- akshare/stock_feature/stock_yzxdr_em.py +24 -22
- akshare/stock_feature/stock_zdhtmx_em.py +20 -6
- akshare/stock_feature/stock_zh_vote_baidu.py +4 -1
- akshare/stock_feature/stock_ztb_em.py +39 -24
- akshare/stock_fundamental/__init__.py +1 -1
- akshare/stock_fundamental/stock_basic_info_xq.py +119 -0
- akshare/stock_fundamental/{stock_finance_hk.py → stock_finance_hk_em.py} +23 -16
- akshare/stock_fundamental/{stock_finance.py → stock_finance_sina.py} +60 -7
- akshare/stock_fundamental/stock_finance_ths.py +524 -57
- akshare/stock_fundamental/stock_finance_us_em.py +268 -0
- akshare/stock_fundamental/stock_gbjg_em.py +80 -0
- akshare/stock_fundamental/stock_hold.py +26 -17
- akshare/stock_fundamental/stock_ipo_declare.py +1 -0
- akshare/stock_fundamental/stock_kcb_detail_sse.py +10 -10
- akshare/stock_fundamental/stock_kcb_sse.py +26 -25
- akshare/stock_fundamental/stock_notice.py +12 -3
- akshare/stock_fundamental/stock_profit_forecast_em.py +31 -13
- akshare/stock_fundamental/stock_profit_forecast_hk_etnet.py +64 -41
- akshare/stock_fundamental/stock_profit_forecast_ths.py +86 -35
- akshare/stock_fundamental/stock_recommend.py +20 -4
- akshare/stock_fundamental/stock_zygc.py +5 -62
- akshare/utils/context.py +43 -0
- akshare/utils/demjson.py +2009 -1338
- akshare/utils/func.py +49 -2
- akshare/utils/multi_decrypt.py +53 -0
- akshare/utils/token_process.py +6 -5
- {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info}/METADATA +54 -80
- akshare-1.17.99.dist-info/RECORD +409 -0
- {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info}/WHEEL +1 -1
- {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info/licenses}/LICENSE +1 -1
- tests/test_func.py +3 -5
- akshare/bond/bond_futures.py +0 -50
- akshare/bond/bond_investing.py +0 -139
- akshare/crypto/crypto_hist_investing.py +0 -249
- akshare/fund/fund_announcement.py +0 -56
- akshare/futures/futures_international.py +0 -170
- akshare/futures/futures_news_baidu.py +0 -54
- akshare/futures/inventory_data.py +0 -100
- akshare/futures_derivative/futures_index_price_nh.py +0 -61
- akshare/futures_derivative/futures_index_return_nh.py +0 -47
- akshare/futures_derivative/futures_index_volatility_nh.py +0 -53
- akshare/futures_derivative/futures_other_index_nh.py +0 -145
- akshare/index/index_fear_greed_funddb.py +0 -78
- akshare/index/index_investing.py +0 -232
- akshare/sport/__init__.py +0 -6
- akshare/sport/sport_olympic.py +0 -27
- akshare/stock_feature/stock_wencai.py +0 -104
- akshare/stock_fundamental/stock_mda_ym.py +0 -40
- akshare-1.14.49.dist-info/RECORD +0 -387
- {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)
|
|
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
|
-
|
|
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',
|
|
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
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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 =
|
|
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 =
|
|
73
|
-
|
|
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
|
-
|
|
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
|
-
|
|
97
|
+
"accept": "text/plain, */*; q=0.01",
|
|
82
98
|
# 'accept-encoding': 'gzip, deflate, br',
|
|
83
|
-
|
|
99
|
+
"accept-language": "zh-CN,zh;q=0.9,en;q=0.8",
|
|
84
100
|
# 'cache-control': 'no-cache',
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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
|
}
|
akshare/index/index_cni.py
CHANGED
|
@@ -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"
|
|
146
|
+
def index_detail_cni(symbol: str = "399001") -> pd.DataFrame:
|
|
147
147
|
"""
|
|
148
148
|
国证指数-样本详情-指定日期的样本成份
|
|
149
|
-
|
|
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
|
-
|
|
158
|
-
|
|
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"
|
|
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")
|
akshare/index/index_cons.py
CHANGED
|
@@ -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://
|
|
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://
|
|
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:
|
|
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
|
akshare/index/index_drewry.py
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
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",
|
|
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
|
-
|
|
41
|
-
|
|
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"] =
|
|
44
|
-
|
|
45
|
-
|
|
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
|
|