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.
- akshare/__init__.py +757 -161
- akshare/air/air_hebei.py +79 -53
- akshare/air/air_zhenqi.py +3 -7
- akshare/air/cons.py +1 -0
- akshare/air/crypto.js +1 -1
- akshare/air/outcrypto.js +1 -1
- akshare/air/sunrise_tad.py +32 -17
- 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 +75 -48
- akshare/bond/bond_convert.py +10 -9
- akshare/bond/bond_em.py +37 -17
- akshare/bond/bond_info_cm.py +28 -8
- akshare/bond/bond_issue_cninfo.py +73 -30
- akshare/bond/bond_summary.py +38 -37
- akshare/bond/bond_zh_cov.py +31 -40
- akshare/bond/bond_zh_sina.py +61 -51
- 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/currency/currency_safe.py +7 -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 +163 -117
- akshare/economic/macro_china_hk.py +0 -1
- akshare/economic/macro_china_nbs.py +24 -7
- akshare/economic/macro_euro.py +103 -56
- akshare/economic/macro_finance_ths.py +135 -0
- akshare/economic/macro_germany.py +1 -1
- akshare/economic/macro_info_ws.py +100 -0
- 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 +94 -126
- akshare/energy/energy_oil_em.py +1 -2
- akshare/event/cons.py +1 -0
- akshare/event/migration.py +3 -2
- 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 +15 -48
- 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_amac.py +38 -15
- 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 +76 -27
- akshare/fund/fund_etf_ths.py +95 -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 +78 -66
- akshare/fund/fund_position_lg.py +19 -8
- akshare/fund/fund_rank_em.py +90 -84
- akshare/fund/fund_rating.py +33 -12
- akshare/fund/fund_report_cninfo.py +63 -48
- 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 +141 -46
- akshare/futures/cot.py +89 -88
- akshare/futures/futures_basis.py +99 -33
- akshare/futures/futures_comex_em.py +1 -0
- akshare/futures/futures_comm_ctp.py +13 -2
- akshare/futures/futures_contract_detail.py +59 -9
- akshare/futures/futures_daily_bar.py +75 -62
- 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 +79 -61
- 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 +1 -2
- akshare/futures/futures_to_spot.py +43 -39
- akshare/futures/futures_warehouse_receipt.py +53 -48
- akshare/futures/futures_zh_sina.py +4 -4
- 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 +7 -8
- akshare/futures_derivative/futures_cot_sina.py +28 -19
- akshare/futures_derivative/futures_index_sina.py +25 -13
- akshare/fx/cons.py +12 -7
- akshare/fx/currency_investing.py +19 -285
- 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_cflp.py +29 -26
- akshare/index/index_cni.py +89 -91
- akshare/index/index_cons.py +26 -10
- akshare/index/index_csindex.py +68 -0
- akshare/index/index_cx.py +263 -62
- 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 +38 -38
- akshare/index/index_spot.py +9 -5
- akshare/index/index_stock_hk.py +6 -10
- akshare/index/index_stock_us_sina.py +1 -1
- akshare/index/index_stock_zh.py +193 -101
- akshare/index/index_stock_zh_csindex.py +15 -369
- akshare/index/index_sugar.py +18 -4
- akshare/index/index_sw.py +62 -34
- akshare/index/index_yw.py +53 -75
- akshare/index/index_zh_em.py +15 -82
- akshare/interest_rate/interbank_rate_em.py +14 -10
- akshare/movie/artist_yien.py +32 -5
- akshare/movie/jm.js +0 -1
- akshare/movie/movie_yien.py +92 -18
- akshare/movie/video_yien.py +28 -5
- akshare/news/__init__.py +1 -1
- akshare/news/news_baidu.py +395 -220
- akshare/news/news_cctv.py +38 -38
- akshare/news/news_stock.py +49 -13
- akshare/nlp/nlp_interface.py +7 -8
- akshare/option/cons.py +12 -12
- akshare/option/option_comm_qihuo.py +86 -0
- akshare/option/option_commodity.py +355 -211
- 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 +145 -0
- akshare/option/option_em.py +4 -8
- akshare/option/option_finance.py +60 -12
- akshare/option/option_finance_sina.py +28 -26
- akshare/option/option_lhb_em.py +62 -57
- 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 +18 -16
- akshare/option/option_value_analysis_em.py +62 -55
- akshare/other/__init__.py +1 -1
- akshare/other/other_car_cpca.py +20 -20
- 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 +232 -0
- akshare/spot/spot_price_qh.py +121 -0
- akshare/spot/spot_sge.py +70 -9
- akshare/stock/cons.py +60 -23
- akshare/stock/stock_allotment_cninfo.py +10 -9
- 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_cg_equity_mortgage.py +15 -11
- akshare/stock/stock_cg_guarantee.py +41 -51
- akshare/stock/stock_cg_lawsuit.py +36 -35
- akshare/stock/stock_dividend_cninfo.py +36 -16
- akshare/stock/stock_dzjy_em.py +347 -260
- akshare/stock/stock_fund_em.py +73 -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 +107 -0
- 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 +91 -42
- akshare/stock/stock_hold_control_cninfo.py +100 -15
- akshare/stock/stock_hold_control_em.py +4 -5
- akshare/stock/stock_hold_num_cninfo.py +18 -12
- 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 +25 -20
- akshare/stock/stock_industry_pe_cninfo.py +45 -31
- akshare/stock/stock_industry_sw.py +5 -9
- akshare/stock/stock_info.py +31 -19
- akshare/stock/stock_info_em.py +17 -11
- akshare/stock/stock_intraday_em.py +9 -80
- akshare/stock/stock_intraday_sina.py +2 -2
- akshare/stock/stock_ipo_summary_cninfo.py +25 -10
- akshare/stock/stock_new_cninfo.py +32 -19
- akshare/stock/stock_news_cx.py +39 -0
- akshare/stock/stock_profile_cninfo.py +9 -8
- akshare/stock/stock_profile_em.py +302 -0
- akshare/stock/stock_rank_forecast.py +8 -6
- akshare/stock/stock_repurchase_em.py +7 -2
- akshare/stock/stock_share_changes_cninfo.py +18 -14
- 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 +19 -11
- akshare/stock/stock_us_js.py +3 -2
- akshare/stock/stock_us_pink.py +38 -27
- akshare/stock/stock_us_sina.py +15 -12
- akshare/stock/stock_weibo_nlp.py +18 -20
- akshare/stock/stock_xq.py +36 -9
- akshare/stock/stock_zh_a_sina.py +58 -80
- 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 +32 -55
- akshare/stock/stock_zh_comparison_em.py +250 -0
- akshare/stock/stock_zh_kcb_report.py +11 -9
- 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_below_net_asset_statistics.py +5 -2
- akshare/stock_feature/stock_a_high_low.py +5 -2
- akshare/stock_feature/stock_a_indicator.py +15 -57
- akshare/stock_feature/stock_a_pe_and_pb.py +39 -9
- 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 +144 -252
- akshare/stock_feature/stock_board_industry_ths.py +137 -401
- 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_concept_futu.py +183 -0
- 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 +20 -10
- 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 +33 -15
- akshare/stock_feature/stock_fhps_em.py +62 -26
- akshare/stock_feature/stock_fhps_ths.py +34 -7
- akshare/stock_feature/stock_fund_flow.py +38 -25
- 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 +158 -237
- 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 +8 -81
- akshare/stock_feature/stock_inner_trade_xq.py +38 -31
- akshare/stock_feature/stock_irm_cninfo.py +32 -9
- akshare/stock_feature/stock_jgdy_em.py +43 -40
- akshare/stock_feature/stock_lh_yybpm.py +36 -37
- akshare/stock_feature/stock_lhb_em.py +165 -35
- akshare/stock_feature/stock_lhb_sina.py +93 -46
- akshare/stock_feature/stock_margin_em.py +101 -0
- akshare/stock_feature/{stock_sse_margin.py → stock_margin_sse.py} +21 -17
- akshare/stock_feature/{stock_szse_margin.py → stock_margin_szse.py} +7 -7
- akshare/stock_feature/stock_market_legu.py +4 -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 +152 -8
- akshare/stock_feature/stock_research_report_em.py +55 -20
- akshare/stock_feature/stock_sns_sseinfo.py +15 -12
- akshare/stock_feature/stock_sy_em.py +20 -15
- akshare/stock_feature/stock_technology_ths.py +152 -120
- akshare/stock_feature/stock_tfp_em.py +37 -14
- akshare/stock_feature/stock_three_report_em.py +120 -78
- 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_valuation_baidu.py +3 -2
- 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} +203 -59
- 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 +41 -18
- 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_register_em.py +448 -0
- akshare/stock_fundamental/stock_zygc.py +5 -62
- akshare/tool/trade_date_hist.py +1 -1
- 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/utils/tqdm.py +13 -3
- {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info}/METADATA +56 -86
- akshare-1.17.99.dist-info/RECORD +409 -0
- {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info}/WHEEL +1 -1
- {akshare-1.13.46.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/fortune/fortune_it_juzi.py +0 -123
- 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 -51
- 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/sport/sport_olympic_winter.py +0 -39
- akshare/stock_feature/stock_wencai.py +0 -104
- akshare/stock_fundamental/stock_mda_ym.py +0 -40
- akshare/stock_fundamental/stock_register.py +0 -292
- akshare-1.13.46.dist-info/RECORD +0 -380
- {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info}/top_level.txt +0 -0
akshare/stock/stock_hot_up_em.py
CHANGED
|
@@ -5,6 +5,7 @@ Date: 2023/6/15 15:15
|
|
|
5
5
|
Desc: 东方财富个股人气榜
|
|
6
6
|
https://guba.eastmoney.com/rank/
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
import pandas as pd
|
|
9
10
|
import requests
|
|
10
11
|
|
|
@@ -62,7 +63,9 @@ def stock_hot_up_em() -> pd.DataFrame:
|
|
|
62
63
|
"涨跌幅",
|
|
63
64
|
]
|
|
64
65
|
]
|
|
65
|
-
temp_df["排名较昨日变动"] = pd.to_numeric(
|
|
66
|
+
temp_df["排名较昨日变动"] = pd.to_numeric(
|
|
67
|
+
temp_df["排名较昨日变动"], errors="coerce"
|
|
68
|
+
)
|
|
66
69
|
temp_df["当前排名"] = pd.to_numeric(temp_df["当前排名"], errors="coerce")
|
|
67
70
|
temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce")
|
|
68
71
|
temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"], errors="coerce")
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# -*- coding:utf-8 -*-
|
|
3
|
+
"""
|
|
4
|
+
Date: 2025/3/9 23:00
|
|
5
|
+
Desc: 东方财富网-行情中心-沪深港通
|
|
6
|
+
https://quote.eastmoney.com/center/gridlist.html#ah_comparison
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import math
|
|
10
|
+
|
|
11
|
+
import pandas as pd
|
|
12
|
+
import requests
|
|
13
|
+
|
|
14
|
+
from akshare.utils.tqdm import get_tqdm
|
|
15
|
+
from akshare.utils.func import fetch_paginated_data
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def stock_zh_ah_spot_em() -> pd.DataFrame:
|
|
19
|
+
"""
|
|
20
|
+
东方财富网-行情中心-沪深港通-AH股比价-实时行情
|
|
21
|
+
https://quote.eastmoney.com/center/gridlist.html#ah_comparison
|
|
22
|
+
:return: 东方财富网-行情中心-沪深港通-AH股比价-实时行情
|
|
23
|
+
:rtype: pandas.DataFrame
|
|
24
|
+
"""
|
|
25
|
+
url = "https://push2.eastmoney.com/api/qt/clist/get"
|
|
26
|
+
params = {
|
|
27
|
+
"np": "1",
|
|
28
|
+
"fltt": "1",
|
|
29
|
+
"invt": "2",
|
|
30
|
+
"fs": "b:DLMK0101",
|
|
31
|
+
"fields": "f193,f191,f192,f12,f13,f14,f1,f2,f4,f3,f152,f186,f190,f187,f189,f188",
|
|
32
|
+
"fid": "f3",
|
|
33
|
+
"pn": "1",
|
|
34
|
+
"pz": "100",
|
|
35
|
+
"po": "1",
|
|
36
|
+
"dect": "1",
|
|
37
|
+
"wbp2u": "|0|0|0|web",
|
|
38
|
+
}
|
|
39
|
+
temp_df = fetch_paginated_data(url, params)
|
|
40
|
+
temp_df.reset_index(inplace=True)
|
|
41
|
+
temp_df["index"] = temp_df["index"].astype(int) + 1
|
|
42
|
+
temp_df.rename(
|
|
43
|
+
columns={
|
|
44
|
+
"index": "序号",
|
|
45
|
+
"f193": "名称",
|
|
46
|
+
"f12": "H股代码",
|
|
47
|
+
"f2": "最新价-HKD",
|
|
48
|
+
"f3": "H股-涨跌幅",
|
|
49
|
+
"f191": "A股代码",
|
|
50
|
+
"f186": "最新价-RMB",
|
|
51
|
+
"f187": "A股-涨跌幅",
|
|
52
|
+
"f189": "比价",
|
|
53
|
+
"f188": "溢价",
|
|
54
|
+
},
|
|
55
|
+
inplace=True,
|
|
56
|
+
)
|
|
57
|
+
temp_df = temp_df[
|
|
58
|
+
[
|
|
59
|
+
"序号",
|
|
60
|
+
"名称",
|
|
61
|
+
"H股代码",
|
|
62
|
+
"最新价-HKD",
|
|
63
|
+
"H股-涨跌幅",
|
|
64
|
+
"A股代码",
|
|
65
|
+
"最新价-RMB",
|
|
66
|
+
"A股-涨跌幅",
|
|
67
|
+
"比价",
|
|
68
|
+
"溢价",
|
|
69
|
+
]
|
|
70
|
+
]
|
|
71
|
+
temp_df["最新价-HKD"] = pd.to_numeric(temp_df["最新价-HKD"], errors="coerce") / 1000
|
|
72
|
+
temp_df["H股-涨跌幅"] = pd.to_numeric(temp_df["H股-涨跌幅"], errors="coerce") / 100
|
|
73
|
+
temp_df["最新价-RMB"] = pd.to_numeric(temp_df["最新价-RMB"], errors="coerce") / 100
|
|
74
|
+
temp_df["A股-涨跌幅"] = pd.to_numeric(temp_df["A股-涨跌幅"], errors="coerce") / 100
|
|
75
|
+
temp_df["比价"] = pd.to_numeric(temp_df["比价"], errors="coerce") / 100
|
|
76
|
+
temp_df["溢价"] = pd.to_numeric(temp_df["溢价"], errors="coerce") / 100
|
|
77
|
+
return temp_df
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def stock_hsgt_sh_hk_spot_em() -> pd.DataFrame:
|
|
81
|
+
"""
|
|
82
|
+
东方财富网-行情中心-沪深港通-港股通(沪>港)-股票
|
|
83
|
+
https://quote.eastmoney.com/center/gridlist.html#hk_sh_stocks
|
|
84
|
+
:return: 东方财富网-行情中心-沪深港通-港股通(沪>港)-股票
|
|
85
|
+
:rtype: pandas.DataFrame
|
|
86
|
+
"""
|
|
87
|
+
url = "https://push2.eastmoney.com/api/qt/clist/get"
|
|
88
|
+
params = {
|
|
89
|
+
"np": "1",
|
|
90
|
+
"fltt": "1",
|
|
91
|
+
"invt": "2",
|
|
92
|
+
"fs": "b:DLMK0144",
|
|
93
|
+
"fields": "f12,f13,f14,f19,f1,f2,f4,f3,f152,f17,f18,f15,f16,f5,f6",
|
|
94
|
+
"fid": "f12",
|
|
95
|
+
"pn": "1",
|
|
96
|
+
"pz": "100",
|
|
97
|
+
"po": "1",
|
|
98
|
+
"dect": "1",
|
|
99
|
+
"wbp2u": "|0|0|0|web",
|
|
100
|
+
}
|
|
101
|
+
temp_df = fetch_paginated_data(url, params)
|
|
102
|
+
temp_df.rename(
|
|
103
|
+
columns={
|
|
104
|
+
"f12": "代码",
|
|
105
|
+
"f14": "名称",
|
|
106
|
+
"f2": "最新价",
|
|
107
|
+
"f4": "涨跌额",
|
|
108
|
+
"f3": "涨跌幅",
|
|
109
|
+
"f17": "今开",
|
|
110
|
+
"f15": "最高",
|
|
111
|
+
"f16": "最低",
|
|
112
|
+
"f18": "昨收",
|
|
113
|
+
"f5": "成交量",
|
|
114
|
+
"f6": "成交额",
|
|
115
|
+
},
|
|
116
|
+
inplace=True,
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
temp_df = temp_df[
|
|
120
|
+
[
|
|
121
|
+
"代码",
|
|
122
|
+
"名称",
|
|
123
|
+
"最新价",
|
|
124
|
+
"涨跌额",
|
|
125
|
+
"涨跌幅",
|
|
126
|
+
"今开",
|
|
127
|
+
"最高",
|
|
128
|
+
"最低",
|
|
129
|
+
"昨收",
|
|
130
|
+
"成交量",
|
|
131
|
+
"成交额",
|
|
132
|
+
]
|
|
133
|
+
]
|
|
134
|
+
temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce") / 1000
|
|
135
|
+
temp_df["涨跌额"] = pd.to_numeric(temp_df["涨跌额"], errors="coerce") / 1000
|
|
136
|
+
temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"], errors="coerce") / 100
|
|
137
|
+
temp_df["今开"] = pd.to_numeric(temp_df["今开"], errors="coerce") / 1000
|
|
138
|
+
temp_df["最高"] = pd.to_numeric(temp_df["最高"], errors="coerce") / 1000
|
|
139
|
+
temp_df["最低"] = pd.to_numeric(temp_df["最低"], errors="coerce") / 1000
|
|
140
|
+
temp_df["昨收"] = pd.to_numeric(temp_df["昨收"], errors="coerce") / 1000
|
|
141
|
+
temp_df["成交量"] = pd.to_numeric(temp_df["成交量"], errors="coerce") / 100000000
|
|
142
|
+
temp_df["成交额"] = pd.to_numeric(temp_df["成交额"], errors="coerce") / 100000000
|
|
143
|
+
temp_df.sort_values(["代码"], ignore_index=True, inplace=True)
|
|
144
|
+
temp_df.reset_index(inplace=True)
|
|
145
|
+
temp_df["index"] = temp_df["index"].astype(int) + 1
|
|
146
|
+
temp_df.rename(columns={"index": "序号"}, inplace=True)
|
|
147
|
+
return temp_df
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
if __name__ == "__main__":
|
|
151
|
+
stock_zh_ah_spot_em_df = stock_zh_ah_spot_em()
|
|
152
|
+
print(stock_zh_ah_spot_em_df)
|
|
153
|
+
|
|
154
|
+
stock_hsgt_sh_hk_spot_em_df = stock_hsgt_sh_hk_spot_em()
|
|
155
|
+
print(stock_hsgt_sh_hk_spot_em_df)
|
akshare/stock/stock_industry.py
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
# -*- coding:utf-8 -*-
|
|
2
2
|
# !/usr/bin/env python
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2024/5/19 18:34
|
|
5
5
|
Desc: 巨潮资讯-行业分类数据
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
https://webapi.cninfo.com.cn/#/apiDoc
|
|
7
|
+
https://webapi.cninfo.com.cn/api/stock/p_stock2110
|
|
8
8
|
"""
|
|
9
|
+
|
|
9
10
|
import numpy as np
|
|
10
11
|
import pandas as pd
|
|
11
12
|
import requests
|
|
12
|
-
|
|
13
|
+
import py_mini_racer
|
|
13
14
|
|
|
14
15
|
from akshare.datasets import get_ths_js
|
|
15
16
|
|
|
@@ -23,7 +24,7 @@ def _get_file_content_ths(file: str = "cninfo.js") -> str:
|
|
|
23
24
|
:rtype: str
|
|
24
25
|
"""
|
|
25
26
|
setting_file_path = get_ths_js(file)
|
|
26
|
-
with open(setting_file_path) as f:
|
|
27
|
+
with open(setting_file_path, encoding="utf-8") as f:
|
|
27
28
|
file_data = f.read()
|
|
28
29
|
return file_data
|
|
29
30
|
|
|
@@ -31,9 +32,10 @@ def _get_file_content_ths(file: str = "cninfo.js") -> str:
|
|
|
31
32
|
def stock_industry_category_cninfo(symbol: str = "巨潮行业分类标准") -> pd.DataFrame:
|
|
32
33
|
"""
|
|
33
34
|
巨潮资讯-行业分类数据
|
|
34
|
-
|
|
35
|
+
https://webapi.cninfo.com.cn/#/apiDoc
|
|
35
36
|
查询 p_public0002 接口
|
|
36
|
-
:param symbol: 行业类型; choice of {"证监会行业分类标准", "巨潮行业分类标准", "申银万国行业分类标准",
|
|
37
|
+
:param symbol: 行业类型; choice of {"证监会行业分类标准", "巨潮行业分类标准", "申银万国行业分类标准",
|
|
38
|
+
"新财富行业分类标准", "国资委行业分类标准", "巨潮产业细分标准", "天相行业分类标准", "全球行业分类标准"}
|
|
37
39
|
:type symbol: str
|
|
38
40
|
:return: 行业分类数据
|
|
39
41
|
:rtype: pandas.DataFrame
|
|
@@ -48,7 +50,7 @@ def stock_industry_category_cninfo(symbol: str = "巨潮行业分类标准") ->
|
|
|
48
50
|
"天相行业分类标准": "008007",
|
|
49
51
|
"全球行业分类标准": "008008",
|
|
50
52
|
}
|
|
51
|
-
url = "
|
|
53
|
+
url = "https://webapi.cninfo.com.cn/api/stock/p_public0002"
|
|
52
54
|
params = {"indcode": "", "indtype": symbol_map[symbol], "format": "json"}
|
|
53
55
|
js_code = py_mini_racer.MiniRacer()
|
|
54
56
|
js_content = _get_file_content_ths("cninfo.js")
|
|
@@ -62,11 +64,12 @@ def stock_industry_category_cninfo(symbol: str = "巨潮行业分类标准") ->
|
|
|
62
64
|
"Content-Length": "0",
|
|
63
65
|
"Host": "webapi.cninfo.com.cn",
|
|
64
66
|
"Accept-Enckey": mcode,
|
|
65
|
-
"Origin": "
|
|
67
|
+
"Origin": "https://webapi.cninfo.com.cn",
|
|
66
68
|
"Pragma": "no-cache",
|
|
67
69
|
"Proxy-Connection": "keep-alive",
|
|
68
|
-
"Referer": "
|
|
69
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
70
|
+
"Referer": "https://webapi.cninfo.com.cn/",
|
|
71
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
72
|
+
"Chrome/93.0.4577.63 Safari/537.36",
|
|
70
73
|
"X-Requested-With": "XMLHttpRequest",
|
|
71
74
|
}
|
|
72
75
|
r = requests.get(url, params=params, headers=headers)
|
|
@@ -89,11 +92,13 @@ def stock_industry_category_cninfo(symbol: str = "巨潮行业分类标准") ->
|
|
|
89
92
|
g = tmp.groupby("len")
|
|
90
93
|
level = 0
|
|
91
94
|
for k in g.groups.keys():
|
|
92
|
-
temp_df.loc[temp_df["类目编码"].isin(g.get_group(k)["类目编码"]), "Level"] =
|
|
95
|
+
temp_df.loc[temp_df["类目编码"].isin(g.get_group(k)["类目编码"]), "Level"] = (
|
|
96
|
+
level
|
|
97
|
+
)
|
|
93
98
|
level += 1
|
|
94
99
|
temp_df["Level"] = temp_df["Level"].astype(int)
|
|
95
100
|
temp_df.rename(columns={"Level": "分级"}, inplace=True)
|
|
96
|
-
temp_df["终止日期"] = pd.to_datetime(temp_df["终止日期"]).dt.date
|
|
101
|
+
temp_df["终止日期"] = pd.to_datetime(temp_df["终止日期"], errors="coerce").dt.date
|
|
97
102
|
return temp_df
|
|
98
103
|
|
|
99
104
|
|
|
@@ -104,7 +109,7 @@ def stock_industry_change_cninfo(
|
|
|
104
109
|
) -> pd.DataFrame:
|
|
105
110
|
"""
|
|
106
111
|
巨潮资讯-上市公司行业归属的变动情况
|
|
107
|
-
|
|
112
|
+
https://webapi.cninfo.com.cn/#/apiDoc
|
|
108
113
|
查询 p_stock2110 接口
|
|
109
114
|
:param symbol: 股票代码
|
|
110
115
|
:type symbol: str
|
|
@@ -115,13 +120,12 @@ def stock_industry_change_cninfo(
|
|
|
115
120
|
:return: 行业归属的变动情况
|
|
116
121
|
:rtype: pandas.DataFrame
|
|
117
122
|
"""
|
|
118
|
-
url = "
|
|
123
|
+
url = "https://webapi.cninfo.com.cn/api/stock/p_stock2110"
|
|
119
124
|
params = {
|
|
120
125
|
"scode": symbol,
|
|
121
126
|
"sdate": "-".join([start_date[:4], start_date[4:6], start_date[6:]]),
|
|
122
127
|
"edate": "-".join([end_date[:4], end_date[4:6], end_date[6:]]),
|
|
123
128
|
}
|
|
124
|
-
|
|
125
129
|
js_code = py_mini_racer.MiniRacer()
|
|
126
130
|
js_content = _get_file_content_ths("cninfo.js")
|
|
127
131
|
js_code.eval(js_content)
|
|
@@ -134,11 +138,12 @@ def stock_industry_change_cninfo(
|
|
|
134
138
|
"Content-Length": "0",
|
|
135
139
|
"Host": "webapi.cninfo.com.cn",
|
|
136
140
|
"Accept-Enckey": mcode,
|
|
137
|
-
"Origin": "
|
|
141
|
+
"Origin": "https://webapi.cninfo.com.cn",
|
|
138
142
|
"Pragma": "no-cache",
|
|
139
143
|
"Proxy-Connection": "keep-alive",
|
|
140
|
-
"Referer": "
|
|
141
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
144
|
+
"Referer": "https://webapi.cninfo.com.cn/",
|
|
145
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
146
|
+
"Chrome/93.0.4577.63 Safari/537.36",
|
|
142
147
|
"X-Requested-With": "XMLHttpRequest",
|
|
143
148
|
}
|
|
144
149
|
r = requests.post(url, params=params, headers=headers)
|
|
@@ -161,7 +166,7 @@ def stock_industry_change_cninfo(
|
|
|
161
166
|
ignore_cols = ["最新记录标识"]
|
|
162
167
|
temp_df.rename(columns=cols_map, inplace=True)
|
|
163
168
|
temp_df.fillna(np.nan, inplace=True)
|
|
164
|
-
temp_df["变更日期"] = pd.to_datetime(temp_df["变更日期"]).dt.date
|
|
169
|
+
temp_df["变更日期"] = pd.to_datetime(temp_df["变更日期"], errors="coerce").dt.date
|
|
165
170
|
data_df = temp_df[[c for c in temp_df.columns if c not in ignore_cols]]
|
|
166
171
|
return data_df
|
|
167
172
|
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2024/6/18 18:30
|
|
5
5
|
Desc: 巨潮资讯-数据中心-行业分析-行业市盈率
|
|
6
6
|
http://webapi.cninfo.com.cn/#/thematicStatistics?name=%E6%8A%95%E8%B5%84%E8%AF%84%E7%BA%A7
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
import pandas as pd
|
|
9
10
|
import requests
|
|
10
|
-
|
|
11
|
+
import py_mini_racer
|
|
11
12
|
|
|
12
13
|
from akshare.datasets import get_ths_js
|
|
13
14
|
|
|
@@ -21,12 +22,14 @@ def _get_file_content_ths(file: str = "cninfo.js") -> str:
|
|
|
21
22
|
:rtype: str
|
|
22
23
|
"""
|
|
23
24
|
setting_file_path = get_ths_js(file)
|
|
24
|
-
with open(setting_file_path) as f:
|
|
25
|
+
with open(setting_file_path, encoding="utf-8") as f:
|
|
25
26
|
file_data = f.read()
|
|
26
27
|
return file_data
|
|
27
28
|
|
|
28
29
|
|
|
29
|
-
def stock_industry_pe_ratio_cninfo(
|
|
30
|
+
def stock_industry_pe_ratio_cninfo(
|
|
31
|
+
symbol: str = "证监会行业分类", date: str = "20210910"
|
|
32
|
+
) -> pd.DataFrame:
|
|
30
33
|
"""
|
|
31
34
|
巨潮资讯-数据中心-行业分析-行业市盈率
|
|
32
35
|
http://webapi.cninfo.com.cn/#/thematicStatistics
|
|
@@ -37,14 +40,12 @@ def stock_industry_pe_ratio_cninfo(symbol: str = "证监会行业分类", date:
|
|
|
37
40
|
:return: 行业市盈率
|
|
38
41
|
:rtype: pandas.DataFrame
|
|
39
42
|
"""
|
|
40
|
-
sort_code_map = {
|
|
41
|
-
"证监会行业分类": "008001",
|
|
42
|
-
"国证行业分类": "008200"
|
|
43
|
-
}
|
|
43
|
+
sort_code_map = {"证监会行业分类": "008001", "国证行业分类": "008200"}
|
|
44
44
|
url = "http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1087"
|
|
45
|
-
params = {
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
params = {
|
|
46
|
+
"tdate": "-".join([date[:4], date[4:6], date[6:]]),
|
|
47
|
+
"sortcode": sort_code_map[symbol],
|
|
48
|
+
}
|
|
48
49
|
js_code = py_mini_racer.MiniRacer()
|
|
49
50
|
js_content = _get_file_content_ths("cninfo.js")
|
|
50
51
|
js_code.eval(js_content)
|
|
@@ -61,7 +62,8 @@ def stock_industry_pe_ratio_cninfo(symbol: str = "证监会行业分类", date:
|
|
|
61
62
|
"Pragma": "no-cache",
|
|
62
63
|
"Proxy-Connection": "keep-alive",
|
|
63
64
|
"Referer": "http://webapi.cninfo.com.cn/",
|
|
64
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
65
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
66
|
+
"Chrome/93.0.4577.63 Safari/537.36",
|
|
65
67
|
"X-Requested-With": "XMLHttpRequest",
|
|
66
68
|
}
|
|
67
69
|
r = requests.post(url, params=params, headers=headers)
|
|
@@ -81,31 +83,43 @@ def stock_industry_pe_ratio_cninfo(symbol: str = "证监会行业分类", date:
|
|
|
81
83
|
"变动日期",
|
|
82
84
|
"公司数量",
|
|
83
85
|
]
|
|
84
|
-
temp_df = temp_df[
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
86
|
+
temp_df = temp_df[
|
|
87
|
+
[
|
|
88
|
+
"变动日期",
|
|
89
|
+
"行业分类",
|
|
90
|
+
"行业层级",
|
|
91
|
+
"行业编码",
|
|
92
|
+
"行业名称",
|
|
93
|
+
"公司数量",
|
|
94
|
+
"纳入计算公司数量",
|
|
95
|
+
"总市值-静态",
|
|
96
|
+
"净利润-静态",
|
|
97
|
+
"静态市盈率-加权平均",
|
|
98
|
+
"静态市盈率-中位数",
|
|
99
|
+
"静态市盈率-算术平均",
|
|
100
|
+
]
|
|
101
|
+
]
|
|
98
102
|
temp_df["行业层级"] = pd.to_numeric(temp_df["行业层级"], errors="coerce")
|
|
99
103
|
temp_df["公司数量"] = pd.to_numeric(temp_df["公司数量"], errors="coerce")
|
|
100
|
-
temp_df["纳入计算公司数量"] = pd.to_numeric(
|
|
104
|
+
temp_df["纳入计算公司数量"] = pd.to_numeric(
|
|
105
|
+
temp_df["纳入计算公司数量"], errors="coerce"
|
|
106
|
+
)
|
|
101
107
|
temp_df["总市值-静态"] = pd.to_numeric(temp_df["总市值-静态"], errors="coerce")
|
|
102
108
|
temp_df["净利润-静态"] = pd.to_numeric(temp_df["净利润-静态"], errors="coerce")
|
|
103
|
-
temp_df["静态市盈率-加权平均"] = pd.to_numeric(
|
|
104
|
-
|
|
105
|
-
|
|
109
|
+
temp_df["静态市盈率-加权平均"] = pd.to_numeric(
|
|
110
|
+
temp_df["静态市盈率-加权平均"], errors="coerce"
|
|
111
|
+
)
|
|
112
|
+
temp_df["静态市盈率-中位数"] = pd.to_numeric(
|
|
113
|
+
temp_df["静态市盈率-中位数"], errors="coerce"
|
|
114
|
+
)
|
|
115
|
+
temp_df["静态市盈率-算术平均"] = pd.to_numeric(
|
|
116
|
+
temp_df["静态市盈率-算术平均"], errors="coerce"
|
|
117
|
+
)
|
|
106
118
|
return temp_df
|
|
107
119
|
|
|
108
120
|
|
|
109
121
|
if __name__ == "__main__":
|
|
110
|
-
stock_industry_pe_ratio_cninfo_df = stock_industry_pe_ratio_cninfo(
|
|
122
|
+
stock_industry_pe_ratio_cninfo_df = stock_industry_pe_ratio_cninfo(
|
|
123
|
+
symbol="国证行业分类", date="20240617"
|
|
124
|
+
)
|
|
111
125
|
print(stock_industry_pe_ratio_cninfo_df)
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date: 2024/
|
|
4
|
+
Date: 2024/7/22 17:30
|
|
5
5
|
Desc: 申万宏源研究-行业分类
|
|
6
|
-
|
|
6
|
+
http://www.swhyresearch.com/institute_sw/allIndex/downloadCenter/industryType
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
9
|
import io
|
|
@@ -11,6 +11,8 @@ import io
|
|
|
11
11
|
import pandas as pd
|
|
12
12
|
import requests
|
|
13
13
|
|
|
14
|
+
from akshare.utils.cons import headers
|
|
15
|
+
|
|
14
16
|
|
|
15
17
|
def stock_industry_clf_hist_sw() -> pd.DataFrame:
|
|
16
18
|
"""
|
|
@@ -19,13 +21,7 @@ def stock_industry_clf_hist_sw() -> pd.DataFrame:
|
|
|
19
21
|
:return: 个股行业分类变动历史
|
|
20
22
|
:rtype: pandas.DataFrame
|
|
21
23
|
"""
|
|
22
|
-
url =
|
|
23
|
-
"https://www.swsresearch.com/swindex/pdf/SwClass2021/StockClassifyUse_stock.xls"
|
|
24
|
-
)
|
|
25
|
-
headers = {
|
|
26
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
27
|
-
"Chrome/102.0.0.0 Safari/537.36"
|
|
28
|
-
}
|
|
24
|
+
url = "https://www.swsresearch.com/swindex/pdf/SwClass2021/StockClassifyUse_stock.xls" # 此处为 https
|
|
29
25
|
r = requests.get(url, headers=headers)
|
|
30
26
|
temp_df = pd.read_excel(
|
|
31
27
|
io.BytesIO(r.content), dtype={"股票代码": "str", "行业代码": "str"}
|
akshare/stock/stock_info.py
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date: 2024/
|
|
4
|
+
Date: 2024/5/27 15:30
|
|
5
5
|
Desc: 股票基本信息
|
|
6
6
|
"""
|
|
7
|
+
|
|
7
8
|
import json
|
|
8
9
|
import warnings
|
|
9
10
|
from functools import lru_cache
|
|
@@ -133,7 +134,8 @@ def stock_info_sh_name_code(symbol: str = "主板A股") -> pd.DataFrame:
|
|
|
133
134
|
"Host": "query.sse.com.cn",
|
|
134
135
|
"Pragma": "no-cache",
|
|
135
136
|
"Referer": "https://www.sse.com.cn/assortment/stock/list/share/",
|
|
136
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
137
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
138
|
+
"Chrome/81.0.4044.138 Safari/537.36",
|
|
137
139
|
}
|
|
138
140
|
params = {
|
|
139
141
|
"STOCK_TYPE": indicator_map[symbol],
|
|
@@ -149,7 +151,6 @@ def stock_info_sh_name_code(symbol: str = "主板A股") -> pd.DataFrame:
|
|
|
149
151
|
"pageHelp.pageSize": "10000",
|
|
150
152
|
"pageHelp.pageNo": "1",
|
|
151
153
|
"pageHelp.endPage": "1",
|
|
152
|
-
"_": "1653291270045",
|
|
153
154
|
}
|
|
154
155
|
r = requests.get(url, params=params, headers=headers)
|
|
155
156
|
data_json = r.json()
|
|
@@ -158,7 +159,9 @@ def stock_info_sh_name_code(symbol: str = "主板A股") -> pd.DataFrame:
|
|
|
158
159
|
temp_df.rename(
|
|
159
160
|
columns={
|
|
160
161
|
col_stock_code: "证券代码",
|
|
161
|
-
"
|
|
162
|
+
"SEC_NAME_CN": "证券简称",
|
|
163
|
+
"SEC_NAME_FULL": "证券全称",
|
|
164
|
+
"COMPANY_ABBR": "公司简称",
|
|
162
165
|
"FULL_NAME": "公司全称",
|
|
163
166
|
"LIST_DATE": "上市日期",
|
|
164
167
|
},
|
|
@@ -168,6 +171,8 @@ def stock_info_sh_name_code(symbol: str = "主板A股") -> pd.DataFrame:
|
|
|
168
171
|
[
|
|
169
172
|
"证券代码",
|
|
170
173
|
"证券简称",
|
|
174
|
+
"证券全称",
|
|
175
|
+
"公司简称",
|
|
171
176
|
"公司全称",
|
|
172
177
|
"上市日期",
|
|
173
178
|
]
|
|
@@ -194,11 +199,12 @@ def stock_info_bj_name_code() -> pd.DataFrame:
|
|
|
194
199
|
"sorttype": "asc",
|
|
195
200
|
}
|
|
196
201
|
headers = {
|
|
197
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
202
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
203
|
+
"Chrome/110.0.0.0 Safari/537.36"
|
|
198
204
|
}
|
|
199
205
|
r = requests.post(url, data=payload, headers=headers)
|
|
200
206
|
data_text = r.text
|
|
201
|
-
data_json = json.loads(data_text[data_text.find("["): -1])
|
|
207
|
+
data_json = json.loads(data_text[data_text.find("[") : -1])
|
|
202
208
|
total_page = data_json[0]["totalPages"]
|
|
203
209
|
big_df = pd.DataFrame()
|
|
204
210
|
tqdm = get_tqdm()
|
|
@@ -206,7 +212,7 @@ def stock_info_bj_name_code() -> pd.DataFrame:
|
|
|
206
212
|
payload.update({"page": page})
|
|
207
213
|
r = requests.post(url, data=payload, headers=headers)
|
|
208
214
|
data_text = r.text
|
|
209
|
-
data_json = json.loads(data_text[data_text.find("["): -1])
|
|
215
|
+
data_json = json.loads(data_text[data_text.find("[") : -1])
|
|
210
216
|
temp_df = data_json[0]["content"]
|
|
211
217
|
temp_df = pd.DataFrame(temp_df)
|
|
212
218
|
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
@@ -280,7 +286,7 @@ def stock_info_bj_name_code() -> pd.DataFrame:
|
|
|
280
286
|
def stock_info_sh_delist(symbol: str = "全部") -> pd.DataFrame:
|
|
281
287
|
"""
|
|
282
288
|
上海证券交易所-终止上市公司
|
|
283
|
-
|
|
289
|
+
https://www.sse.com.cn/assortment/stock/list/delisting/
|
|
284
290
|
:param symbol: choice of {"全部", "沪市", "科创板"}
|
|
285
291
|
:type symbol: str
|
|
286
292
|
:return: 终止上市公司
|
|
@@ -300,8 +306,9 @@ def stock_info_sh_delist(symbol: str = "全部") -> pd.DataFrame:
|
|
|
300
306
|
"Connection": "keep-alive",
|
|
301
307
|
"Host": "query.sse.com.cn",
|
|
302
308
|
"Pragma": "no-cache",
|
|
303
|
-
"Referer": "
|
|
304
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
309
|
+
"Referer": "https://www.sse.com.cn/",
|
|
310
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
311
|
+
"Chrome/97.0.4692.71 Safari/537.36",
|
|
305
312
|
}
|
|
306
313
|
params = {
|
|
307
314
|
"sqlId": "COMMON_SSE_CP_GPJCTPZ_GPLB_GP_L",
|
|
@@ -317,7 +324,6 @@ def stock_info_sh_delist(symbol: str = "全部") -> pd.DataFrame:
|
|
|
317
324
|
"pageHelp.pageSize": "500",
|
|
318
325
|
"pageHelp.pageNo": "1",
|
|
319
326
|
"pageHelp.endPage": "1",
|
|
320
|
-
"_": "1643035608183",
|
|
321
327
|
}
|
|
322
328
|
r = requests.get(url, params=params, headers=headers)
|
|
323
329
|
data_json = r.json()
|
|
@@ -340,11 +346,13 @@ def stock_info_sh_delist(symbol: str = "全部") -> pd.DataFrame:
|
|
|
340
346
|
]
|
|
341
347
|
]
|
|
342
348
|
temp_df["上市日期"] = pd.to_datetime(temp_df["上市日期"], errors="coerce").dt.date
|
|
343
|
-
temp_df["暂停上市日期"] = pd.to_datetime(
|
|
349
|
+
temp_df["暂停上市日期"] = pd.to_datetime(
|
|
350
|
+
temp_df["暂停上市日期"], errors="coerce"
|
|
351
|
+
).dt.date
|
|
344
352
|
return temp_df
|
|
345
353
|
|
|
346
354
|
|
|
347
|
-
def stock_info_sz_delist(symbol: str = "
|
|
355
|
+
def stock_info_sz_delist(symbol: str = "终止上市公司") -> pd.DataFrame:
|
|
348
356
|
"""
|
|
349
357
|
深证证券交易所-暂停上市公司-终止上市公司
|
|
350
358
|
https://www.szse.cn/market/stock/suspend/index.html
|
|
@@ -416,13 +424,15 @@ def stock_info_change_name(symbol: str = "000503") -> pd.DataFrame:
|
|
|
416
424
|
temp_df.columns = ["item", "value"]
|
|
417
425
|
temp_df["item"] = temp_df["item"].str.split(":", expand=True)[0]
|
|
418
426
|
try:
|
|
419
|
-
name_list =
|
|
427
|
+
name_list = (
|
|
428
|
+
temp_df[temp_df["item"] == "证券简称更名历史"].value.tolist()[0].split(" ")
|
|
429
|
+
)
|
|
420
430
|
big_df = pd.DataFrame(name_list)
|
|
421
431
|
big_df.reset_index(inplace=True)
|
|
422
432
|
big_df["index"] = big_df.index + 1
|
|
423
433
|
big_df.columns = ["index", "name"]
|
|
424
434
|
return big_df
|
|
425
|
-
except IndexError
|
|
435
|
+
except IndexError:
|
|
426
436
|
return pd.DataFrame()
|
|
427
437
|
|
|
428
438
|
|
|
@@ -439,7 +449,9 @@ def stock_info_a_code_name() -> pd.DataFrame:
|
|
|
439
449
|
|
|
440
450
|
stock_sz = stock_info_sz_name_code(symbol="A股列表")
|
|
441
451
|
stock_sz["A股代码"] = stock_sz["A股代码"].astype(str).str.zfill(6)
|
|
442
|
-
big_df = pd.concat(
|
|
452
|
+
big_df = pd.concat(
|
|
453
|
+
objs=[big_df, stock_sz[["A股代码", "A股简称"]]], ignore_index=True
|
|
454
|
+
)
|
|
443
455
|
big_df.columns = ["证券代码", "证券简称"]
|
|
444
456
|
|
|
445
457
|
stock_kcb = stock_info_sh_name_code(symbol="科创板")
|
|
@@ -449,9 +461,9 @@ def stock_info_a_code_name() -> pd.DataFrame:
|
|
|
449
461
|
stock_bse = stock_bse[["证券代码", "证券简称"]]
|
|
450
462
|
stock_bse.columns = ["证券代码", "证券简称"]
|
|
451
463
|
|
|
452
|
-
big_df = pd.concat([big_df, stock_sh], ignore_index=True)
|
|
453
|
-
big_df = pd.concat([big_df, stock_kcb], ignore_index=True)
|
|
454
|
-
big_df = pd.concat([big_df, stock_bse], ignore_index=True)
|
|
464
|
+
big_df = pd.concat(objs=[big_df, stock_sh], ignore_index=True)
|
|
465
|
+
big_df = pd.concat(objs=[big_df, stock_kcb], ignore_index=True)
|
|
466
|
+
big_df = pd.concat(objs=[big_df, stock_bse], ignore_index=True)
|
|
455
467
|
big_df.columns = ["code", "name"]
|
|
456
468
|
return big_df
|
|
457
469
|
|