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
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
# -*- coding:utf-8 -*-
|
|
2
2
|
# !/usr/bin/env python
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2025/5/8 20:00
|
|
5
5
|
Desc: 东方财富-股票-财务分析
|
|
6
6
|
"""
|
|
7
|
+
|
|
7
8
|
from functools import lru_cache
|
|
8
9
|
|
|
9
10
|
import pandas as pd
|
|
10
11
|
import requests
|
|
11
12
|
from bs4 import BeautifulSoup
|
|
12
|
-
|
|
13
|
+
|
|
14
|
+
from akshare.utils.tqdm import get_tqdm
|
|
13
15
|
|
|
14
16
|
|
|
15
17
|
@lru_cache()
|
|
@@ -22,7 +24,7 @@ def _stock_balance_sheet_by_report_ctype_em(symbol: str = "SH600519") -> str:
|
|
|
22
24
|
:return: 东方财富-股票-财务分析-资产负债表-按报告期-公司类型判断
|
|
23
25
|
:rtype: str
|
|
24
26
|
"""
|
|
25
|
-
url =
|
|
27
|
+
url = "https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/Index"
|
|
26
28
|
params = {"type": "web", "code": symbol.lower()}
|
|
27
29
|
r = requests.get(url, params=params)
|
|
28
30
|
soup = BeautifulSoup(r.text, features="lxml")
|
|
@@ -52,8 +54,9 @@ def stock_balance_sheet_by_report_em(symbol: str = "SH600519") -> pd.DataFrame:
|
|
|
52
54
|
temp_df["REPORT_DATE"] = pd.to_datetime(temp_df["REPORT_DATE"]).dt.date
|
|
53
55
|
temp_df["REPORT_DATE"] = temp_df["REPORT_DATE"].astype(str)
|
|
54
56
|
need_date = temp_df["REPORT_DATE"].tolist()
|
|
55
|
-
sep_list = [",".join(need_date[i: i + 5]) for i in range(0, len(need_date), 5)]
|
|
57
|
+
sep_list = [",".join(need_date[i : i + 5]) for i in range(0, len(need_date), 5)]
|
|
56
58
|
big_df = pd.DataFrame()
|
|
59
|
+
tqdm = get_tqdm()
|
|
57
60
|
for item in tqdm(sep_list, leave=False):
|
|
58
61
|
url = "https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/zcfzbAjaxNew"
|
|
59
62
|
params = {
|
|
@@ -65,10 +68,12 @@ def stock_balance_sheet_by_report_em(symbol: str = "SH600519") -> pd.DataFrame:
|
|
|
65
68
|
}
|
|
66
69
|
r = requests.get(url, params=params)
|
|
67
70
|
data_json = r.json()
|
|
71
|
+
if "data" not in data_json.keys():
|
|
72
|
+
break
|
|
68
73
|
temp_df = pd.DataFrame(data_json["data"])
|
|
69
74
|
for col in temp_df.columns:
|
|
70
75
|
if temp_df[col].isnull().all(): # 检查列是否包含 None 或 NaN
|
|
71
|
-
temp_df[col] = pd.to_numeric(temp_df[col], errors=
|
|
76
|
+
temp_df[col] = pd.to_numeric(temp_df[col], errors="coerce")
|
|
72
77
|
if big_df.empty:
|
|
73
78
|
big_df = temp_df
|
|
74
79
|
else:
|
|
@@ -96,17 +101,20 @@ def stock_balance_sheet_by_yearly_em(symbol: str = "SH600036") -> pd.DataFrame:
|
|
|
96
101
|
data_json = r.json()
|
|
97
102
|
try:
|
|
98
103
|
temp_df = pd.DataFrame(data_json["data"])
|
|
99
|
-
except:
|
|
100
|
-
company_type = 3
|
|
104
|
+
except: # noqa: E722
|
|
105
|
+
company_type = '3'
|
|
101
106
|
params.update({"companyType": company_type})
|
|
102
107
|
r = requests.get(url, params=params)
|
|
103
108
|
data_json = r.json()
|
|
104
109
|
temp_df = pd.DataFrame(data_json["data"])
|
|
105
|
-
temp_df["REPORT_DATE"] = pd.to_datetime(
|
|
110
|
+
temp_df["REPORT_DATE"] = pd.to_datetime(
|
|
111
|
+
temp_df["REPORT_DATE"], errors="coerce"
|
|
112
|
+
).dt.date
|
|
106
113
|
temp_df["REPORT_DATE"] = temp_df["REPORT_DATE"].astype(str)
|
|
107
114
|
need_date = temp_df["REPORT_DATE"].tolist()
|
|
108
|
-
sep_list = [",".join(need_date[i: i + 5]) for i in range(0, len(need_date), 5)]
|
|
115
|
+
sep_list = [",".join(need_date[i : i + 5]) for i in range(0, len(need_date), 5)]
|
|
109
116
|
big_df = pd.DataFrame()
|
|
117
|
+
tqdm = get_tqdm()
|
|
110
118
|
for item in tqdm(sep_list, leave=False):
|
|
111
119
|
url = "https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/zcfzbAjaxNew"
|
|
112
120
|
params = {
|
|
@@ -118,10 +126,12 @@ def stock_balance_sheet_by_yearly_em(symbol: str = "SH600036") -> pd.DataFrame:
|
|
|
118
126
|
}
|
|
119
127
|
r = requests.get(url, params=params)
|
|
120
128
|
data_json = r.json()
|
|
129
|
+
if "data" not in data_json.keys():
|
|
130
|
+
break
|
|
121
131
|
temp_df = pd.DataFrame(data_json["data"])
|
|
122
132
|
for col in temp_df.columns:
|
|
123
133
|
if temp_df[col].isnull().all(): # 检查列是否包含 None 或 NaN
|
|
124
|
-
temp_df[col] = pd.to_numeric(temp_df[col], errors=
|
|
134
|
+
temp_df[col] = pd.to_numeric(temp_df[col], errors="coerce")
|
|
125
135
|
if big_df.empty:
|
|
126
136
|
big_df = temp_df
|
|
127
137
|
else:
|
|
@@ -151,8 +161,9 @@ def stock_profit_sheet_by_report_em(symbol: str = "SH600519") -> pd.DataFrame:
|
|
|
151
161
|
temp_df["REPORT_DATE"] = pd.to_datetime(temp_df["REPORT_DATE"]).dt.date
|
|
152
162
|
temp_df["REPORT_DATE"] = temp_df["REPORT_DATE"].astype(str)
|
|
153
163
|
need_date = temp_df["REPORT_DATE"].tolist()
|
|
154
|
-
sep_list = [",".join(need_date[i: i + 5]) for i in range(0, len(need_date), 5)]
|
|
164
|
+
sep_list = [",".join(need_date[i : i + 5]) for i in range(0, len(need_date), 5)]
|
|
155
165
|
big_df = pd.DataFrame()
|
|
166
|
+
tqdm = get_tqdm()
|
|
156
167
|
for item in tqdm(sep_list, leave=False):
|
|
157
168
|
url = "https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/lrbAjaxNew"
|
|
158
169
|
params = {
|
|
@@ -164,10 +175,12 @@ def stock_profit_sheet_by_report_em(symbol: str = "SH600519") -> pd.DataFrame:
|
|
|
164
175
|
}
|
|
165
176
|
r = requests.get(url, params=params)
|
|
166
177
|
data_json = r.json()
|
|
178
|
+
if "data" not in data_json.keys():
|
|
179
|
+
break
|
|
167
180
|
temp_df = pd.DataFrame(data_json["data"])
|
|
168
181
|
for col in temp_df.columns:
|
|
169
182
|
if temp_df[col].isnull().all(): # 检查列是否包含 None 或 NaN
|
|
170
|
-
temp_df[col] = pd.to_numeric(temp_df[col], errors=
|
|
183
|
+
temp_df[col] = pd.to_numeric(temp_df[col], errors="coerce")
|
|
171
184
|
if big_df.empty:
|
|
172
185
|
big_df = temp_df
|
|
173
186
|
else:
|
|
@@ -197,8 +210,9 @@ def stock_profit_sheet_by_yearly_em(symbol: str = "SH600519") -> pd.DataFrame:
|
|
|
197
210
|
temp_df["REPORT_DATE"] = pd.to_datetime(temp_df["REPORT_DATE"]).dt.date
|
|
198
211
|
temp_df["REPORT_DATE"] = temp_df["REPORT_DATE"].astype(str)
|
|
199
212
|
need_date = temp_df["REPORT_DATE"].tolist()
|
|
200
|
-
sep_list = [",".join(need_date[i: i + 5]) for i in range(0, len(need_date), 5)]
|
|
213
|
+
sep_list = [",".join(need_date[i : i + 5]) for i in range(0, len(need_date), 5)]
|
|
201
214
|
big_df = pd.DataFrame()
|
|
215
|
+
tqdm = get_tqdm()
|
|
202
216
|
for item in tqdm(sep_list, leave=False):
|
|
203
217
|
url = "https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/lrbAjaxNew"
|
|
204
218
|
params = {
|
|
@@ -210,10 +224,12 @@ def stock_profit_sheet_by_yearly_em(symbol: str = "SH600519") -> pd.DataFrame:
|
|
|
210
224
|
}
|
|
211
225
|
r = requests.get(url, params=params)
|
|
212
226
|
data_json = r.json()
|
|
227
|
+
if "data" not in data_json.keys():
|
|
228
|
+
break
|
|
213
229
|
temp_df = pd.DataFrame(data_json["data"])
|
|
214
230
|
for col in temp_df.columns:
|
|
215
231
|
if temp_df[col].isnull().all(): # 检查列是否包含 None 或 NaN
|
|
216
|
-
temp_df[col] = pd.to_numeric(temp_df[col], errors=
|
|
232
|
+
temp_df[col] = pd.to_numeric(temp_df[col], errors="coerce")
|
|
217
233
|
if big_df.empty:
|
|
218
234
|
big_df = temp_df
|
|
219
235
|
else:
|
|
@@ -222,7 +238,7 @@ def stock_profit_sheet_by_yearly_em(symbol: str = "SH600519") -> pd.DataFrame:
|
|
|
222
238
|
|
|
223
239
|
|
|
224
240
|
def stock_profit_sheet_by_quarterly_em(
|
|
225
|
-
|
|
241
|
+
symbol: str = "SH600519",
|
|
226
242
|
) -> pd.DataFrame:
|
|
227
243
|
"""
|
|
228
244
|
东方财富-股票-财务分析-利润表-按单季度
|
|
@@ -245,8 +261,9 @@ def stock_profit_sheet_by_quarterly_em(
|
|
|
245
261
|
temp_df["REPORT_DATE"] = pd.to_datetime(temp_df["REPORT_DATE"]).dt.date
|
|
246
262
|
temp_df["REPORT_DATE"] = temp_df["REPORT_DATE"].astype(str)
|
|
247
263
|
need_date = temp_df["REPORT_DATE"].tolist()
|
|
248
|
-
sep_list = [",".join(need_date[i: i + 5]) for i in range(0, len(need_date), 5)]
|
|
264
|
+
sep_list = [",".join(need_date[i : i + 5]) for i in range(0, len(need_date), 5)]
|
|
249
265
|
big_df = pd.DataFrame()
|
|
266
|
+
tqdm = get_tqdm()
|
|
250
267
|
for item in tqdm(sep_list, leave=False):
|
|
251
268
|
url = "https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/lrbAjaxNew"
|
|
252
269
|
params = {
|
|
@@ -258,10 +275,12 @@ def stock_profit_sheet_by_quarterly_em(
|
|
|
258
275
|
}
|
|
259
276
|
r = requests.get(url, params=params)
|
|
260
277
|
data_json = r.json()
|
|
278
|
+
if "data" not in data_json.keys():
|
|
279
|
+
break
|
|
261
280
|
temp_df = pd.DataFrame(data_json["data"])
|
|
262
281
|
for col in temp_df.columns:
|
|
263
282
|
if temp_df[col].isnull().all(): # 检查列是否包含 None 或 NaN
|
|
264
|
-
temp_df[col] = pd.to_numeric(temp_df[col], errors=
|
|
283
|
+
temp_df[col] = pd.to_numeric(temp_df[col], errors="coerce")
|
|
265
284
|
if big_df.empty:
|
|
266
285
|
big_df = temp_df
|
|
267
286
|
else:
|
|
@@ -270,7 +289,7 @@ def stock_profit_sheet_by_quarterly_em(
|
|
|
270
289
|
|
|
271
290
|
|
|
272
291
|
def stock_cash_flow_sheet_by_report_em(
|
|
273
|
-
|
|
292
|
+
symbol: str = "SH600519",
|
|
274
293
|
) -> pd.DataFrame:
|
|
275
294
|
"""
|
|
276
295
|
东方财富-股票-财务分析-现金流量表-按报告期
|
|
@@ -293,8 +312,9 @@ def stock_cash_flow_sheet_by_report_em(
|
|
|
293
312
|
temp_df["REPORT_DATE"] = pd.to_datetime(temp_df["REPORT_DATE"]).dt.date
|
|
294
313
|
temp_df["REPORT_DATE"] = temp_df["REPORT_DATE"].astype(str)
|
|
295
314
|
need_date = temp_df["REPORT_DATE"].tolist()
|
|
296
|
-
sep_list = [",".join(need_date[i: i + 5]) for i in range(0, len(need_date), 5)]
|
|
315
|
+
sep_list = [",".join(need_date[i : i + 5]) for i in range(0, len(need_date), 5)]
|
|
297
316
|
big_df = pd.DataFrame()
|
|
317
|
+
tqdm = get_tqdm()
|
|
298
318
|
for item in tqdm(sep_list, leave=False):
|
|
299
319
|
url = "https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/xjllbAjaxNew"
|
|
300
320
|
params = {
|
|
@@ -306,10 +326,12 @@ def stock_cash_flow_sheet_by_report_em(
|
|
|
306
326
|
}
|
|
307
327
|
r = requests.get(url, params=params)
|
|
308
328
|
data_json = r.json()
|
|
329
|
+
if "data" not in data_json.keys():
|
|
330
|
+
break
|
|
309
331
|
temp_df = pd.DataFrame(data_json["data"])
|
|
310
332
|
for col in temp_df.columns:
|
|
311
333
|
if temp_df[col].isnull().all(): # 检查列是否包含 None 或 NaN
|
|
312
|
-
temp_df[col] = pd.to_numeric(temp_df[col], errors=
|
|
334
|
+
temp_df[col] = pd.to_numeric(temp_df[col], errors="coerce")
|
|
313
335
|
if big_df.empty:
|
|
314
336
|
big_df = temp_df
|
|
315
337
|
else:
|
|
@@ -318,7 +340,7 @@ def stock_cash_flow_sheet_by_report_em(
|
|
|
318
340
|
|
|
319
341
|
|
|
320
342
|
def stock_cash_flow_sheet_by_yearly_em(
|
|
321
|
-
|
|
343
|
+
symbol: str = "SH600519",
|
|
322
344
|
) -> pd.DataFrame:
|
|
323
345
|
"""
|
|
324
346
|
东方财富-股票-财务分析-现金流量表-按年度
|
|
@@ -341,8 +363,9 @@ def stock_cash_flow_sheet_by_yearly_em(
|
|
|
341
363
|
temp_df["REPORT_DATE"] = pd.to_datetime(temp_df["REPORT_DATE"]).dt.date
|
|
342
364
|
temp_df["REPORT_DATE"] = temp_df["REPORT_DATE"].astype(str)
|
|
343
365
|
need_date = temp_df["REPORT_DATE"].tolist()
|
|
344
|
-
sep_list = [",".join(need_date[i: i + 5]) for i in range(0, len(need_date), 5)]
|
|
366
|
+
sep_list = [",".join(need_date[i : i + 5]) for i in range(0, len(need_date), 5)]
|
|
345
367
|
big_df = pd.DataFrame()
|
|
368
|
+
tqdm = get_tqdm()
|
|
346
369
|
for item in tqdm(sep_list, leave=False):
|
|
347
370
|
url = "https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/xjllbAjaxNew"
|
|
348
371
|
params = {
|
|
@@ -354,10 +377,12 @@ def stock_cash_flow_sheet_by_yearly_em(
|
|
|
354
377
|
}
|
|
355
378
|
r = requests.get(url, params=params)
|
|
356
379
|
data_json = r.json()
|
|
380
|
+
if "data" not in data_json.keys():
|
|
381
|
+
break
|
|
357
382
|
temp_df = pd.DataFrame(data_json["data"])
|
|
358
383
|
for col in temp_df.columns:
|
|
359
384
|
if temp_df[col].isnull().all(): # 检查列是否包含 None 或 NaN
|
|
360
|
-
temp_df[col] = pd.to_numeric(temp_df[col], errors=
|
|
385
|
+
temp_df[col] = pd.to_numeric(temp_df[col], errors="coerce")
|
|
361
386
|
if big_df.empty:
|
|
362
387
|
big_df = temp_df
|
|
363
388
|
else:
|
|
@@ -366,7 +391,7 @@ def stock_cash_flow_sheet_by_yearly_em(
|
|
|
366
391
|
|
|
367
392
|
|
|
368
393
|
def stock_cash_flow_sheet_by_quarterly_em(
|
|
369
|
-
|
|
394
|
+
symbol: str = "SH600519",
|
|
370
395
|
) -> pd.DataFrame:
|
|
371
396
|
"""
|
|
372
397
|
东方财富-股票-财务分析-现金流量表-按单季度
|
|
@@ -389,8 +414,9 @@ def stock_cash_flow_sheet_by_quarterly_em(
|
|
|
389
414
|
temp_df["REPORT_DATE"] = pd.to_datetime(temp_df["REPORT_DATE"]).dt.date
|
|
390
415
|
temp_df["REPORT_DATE"] = temp_df["REPORT_DATE"].astype(str)
|
|
391
416
|
need_date = temp_df["REPORT_DATE"].tolist()
|
|
392
|
-
sep_list = [",".join(need_date[i: i + 5]) for i in range(0, len(need_date), 5)]
|
|
417
|
+
sep_list = [",".join(need_date[i : i + 5]) for i in range(0, len(need_date), 5)]
|
|
393
418
|
big_df = pd.DataFrame()
|
|
419
|
+
tqdm = get_tqdm()
|
|
394
420
|
for item in tqdm(sep_list, leave=False):
|
|
395
421
|
url = "https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/xjllbAjaxNew"
|
|
396
422
|
params = {
|
|
@@ -402,10 +428,12 @@ def stock_cash_flow_sheet_by_quarterly_em(
|
|
|
402
428
|
}
|
|
403
429
|
r = requests.get(url, params=params)
|
|
404
430
|
data_json = r.json()
|
|
431
|
+
if "data" not in data_json.keys():
|
|
432
|
+
break
|
|
405
433
|
temp_df = pd.DataFrame(data_json["data"])
|
|
406
434
|
for col in temp_df.columns:
|
|
407
435
|
if temp_df[col].isnull().all(): # 检查列是否包含 None 或 NaN
|
|
408
|
-
temp_df[col] = pd.to_numeric(temp_df[col], errors=
|
|
436
|
+
temp_df[col] = pd.to_numeric(temp_df[col], errors="coerce")
|
|
409
437
|
if big_df.empty:
|
|
410
438
|
big_df = temp_df
|
|
411
439
|
else:
|
|
@@ -424,21 +452,21 @@ def __get_report_date_list_delisted_em(symbol: str = "SZ000013") -> list:
|
|
|
424
452
|
"""
|
|
425
453
|
url = "https://datacenter.eastmoney.com/securities/api/data/get"
|
|
426
454
|
params = {
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
455
|
+
"type": "RPT_F10_FINANCE_GINCOME",
|
|
456
|
+
"sty": "SECUCODE,SECURITY_CODE,REPORT_DATE,REPORT_TYPE,REPORT_DATE_NAME",
|
|
457
|
+
"filter": f'(SECUCODE="{symbol[2:]}.{symbol[:2]}")',
|
|
458
|
+
"p": "1",
|
|
459
|
+
"ps": "200",
|
|
460
|
+
"sr": "-1",
|
|
461
|
+
"st": "REPORT_DATE",
|
|
462
|
+
"source": "HSF10",
|
|
463
|
+
"client": "PC",
|
|
464
|
+
"v": "07306678536291241",
|
|
437
465
|
}
|
|
438
466
|
r = requests.get(url, params=params)
|
|
439
467
|
data_json = r.json()
|
|
440
|
-
temp_df = pd.DataFrame(data_json[
|
|
441
|
-
report_date_list = [item[0] for item in temp_df[
|
|
468
|
+
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
469
|
+
report_date_list = [item[0] for item in temp_df["REPORT_DATE"].str.split(" ")]
|
|
442
470
|
report_date_list = ["'" + item + "'" for item in report_date_list]
|
|
443
471
|
return report_date_list
|
|
444
472
|
|
|
@@ -455,22 +483,24 @@ def stock_balance_sheet_by_report_delisted_em(symbol: str = "SZ000013") -> pd.Da
|
|
|
455
483
|
report_date_list = __get_report_date_list_delisted_em(symbol)
|
|
456
484
|
url = "https://datacenter.eastmoney.com/securities/api/data/get"
|
|
457
485
|
params = {
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
486
|
+
"type": "RPT_F10_FINANCE_GBALANCE",
|
|
487
|
+
"sty": "F10_FINANCE_GBALANCE",
|
|
488
|
+
"filter": f"""(SECUCODE="{symbol[2:]}.{symbol[:2]}")(REPORT_DATE in ({','.join(report_date_list)}))""",
|
|
489
|
+
"p": "1",
|
|
490
|
+
"ps": "200",
|
|
491
|
+
"sr": "-1",
|
|
492
|
+
"st": "REPORT_DATE",
|
|
493
|
+
"source": "HSF10",
|
|
494
|
+
"client": "PC",
|
|
495
|
+
"v": "05767841728614413",
|
|
468
496
|
}
|
|
469
497
|
r = requests.get(url, params=params)
|
|
470
498
|
data_json = r.json()
|
|
471
|
-
temp_df = pd.DataFrame(data_json[
|
|
499
|
+
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
472
500
|
temp_df["REPORT_DATE"] = pd.to_datetime(temp_df["REPORT_DATE"]).dt.date
|
|
473
|
-
temp_df.sort_values(
|
|
501
|
+
temp_df.sort_values(
|
|
502
|
+
by=["REPORT_DATE"], ascending=False, inplace=True, ignore_index=True
|
|
503
|
+
)
|
|
474
504
|
return temp_df
|
|
475
505
|
|
|
476
506
|
|
|
@@ -486,26 +516,30 @@ def stock_profit_sheet_by_report_delisted_em(symbol: str = "SZ000013") -> pd.Dat
|
|
|
486
516
|
report_date_list = __get_report_date_list_delisted_em(symbol)
|
|
487
517
|
url = "https://datacenter.eastmoney.com/securities/api/data/get"
|
|
488
518
|
params = {
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
519
|
+
"type": "RPT_F10_FINANCE_GINCOME",
|
|
520
|
+
"sty": "APP_F10_GINCOME",
|
|
521
|
+
"filter": f"""(SECUCODE="{symbol[2:]}.{symbol[:2]}")(REPORT_DATE in ({','.join(report_date_list)}))""",
|
|
522
|
+
"p": "1",
|
|
523
|
+
"ps": "200",
|
|
524
|
+
"sr": "-1",
|
|
525
|
+
"st": "REPORT_DATE",
|
|
526
|
+
"source": "HSF10",
|
|
527
|
+
"client": "PC",
|
|
528
|
+
"v": "05767841728614413",
|
|
499
529
|
}
|
|
500
530
|
r = requests.get(url, params=params)
|
|
501
531
|
data_json = r.json()
|
|
502
|
-
temp_df = pd.DataFrame(data_json[
|
|
532
|
+
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
503
533
|
temp_df["REPORT_DATE"] = pd.to_datetime(temp_df["REPORT_DATE"]).dt.date
|
|
504
|
-
temp_df.sort_values(
|
|
534
|
+
temp_df.sort_values(
|
|
535
|
+
by=["REPORT_DATE"], ascending=False, inplace=True, ignore_index=True
|
|
536
|
+
)
|
|
505
537
|
return temp_df
|
|
506
538
|
|
|
507
539
|
|
|
508
|
-
def stock_cash_flow_sheet_by_report_delisted_em(
|
|
540
|
+
def stock_cash_flow_sheet_by_report_delisted_em(
|
|
541
|
+
symbol: str = "SZ000013",
|
|
542
|
+
) -> pd.DataFrame:
|
|
509
543
|
"""
|
|
510
544
|
东方财富-股票-财务分析-现金流量表-已退市股票-按报告期
|
|
511
545
|
https://emweb.securities.eastmoney.com/pc_hsf10/pages/index.html?type=web&code=SZ000013#/cwfx/xjllb
|
|
@@ -517,22 +551,24 @@ def stock_cash_flow_sheet_by_report_delisted_em(symbol: str = "SZ000013") -> pd.
|
|
|
517
551
|
report_date_list = __get_report_date_list_delisted_em(symbol)
|
|
518
552
|
url = "https://datacenter.eastmoney.com/securities/api/data/get"
|
|
519
553
|
params = {
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
554
|
+
"type": "RPT_F10_FINANCE_GCASHFLOW",
|
|
555
|
+
"sty": "APP_F10_GCASHFLOW",
|
|
556
|
+
"filter": f"""(SECUCODE="{symbol[2:]}.{symbol[:2]}")(REPORT_DATE in ({','.join(report_date_list)}))""",
|
|
557
|
+
"p": "1",
|
|
558
|
+
"ps": "200",
|
|
559
|
+
"sr": "-1",
|
|
560
|
+
"st": "REPORT_DATE",
|
|
561
|
+
"source": "HSF10",
|
|
562
|
+
"client": "PC",
|
|
563
|
+
"v": "05767841728614413",
|
|
530
564
|
}
|
|
531
565
|
r = requests.get(url, params=params)
|
|
532
566
|
data_json = r.json()
|
|
533
|
-
temp_df = pd.DataFrame(data_json[
|
|
567
|
+
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
534
568
|
temp_df["REPORT_DATE"] = pd.to_datetime(temp_df["REPORT_DATE"]).dt.date
|
|
535
|
-
temp_df.sort_values(
|
|
569
|
+
temp_df.sort_values(
|
|
570
|
+
by=["REPORT_DATE"], ascending=False, inplace=True, ignore_index=True
|
|
571
|
+
)
|
|
536
572
|
return temp_df
|
|
537
573
|
|
|
538
574
|
|
|
@@ -577,11 +613,17 @@ if __name__ == "__main__":
|
|
|
577
613
|
)
|
|
578
614
|
print(stock_cash_flow_sheet_by_quarterly_em_df)
|
|
579
615
|
|
|
580
|
-
stock_balance_sheet_by_report_delisted_em_df =
|
|
616
|
+
stock_balance_sheet_by_report_delisted_em_df = (
|
|
617
|
+
stock_balance_sheet_by_report_delisted_em(symbol="SZ000013")
|
|
618
|
+
)
|
|
581
619
|
print(stock_balance_sheet_by_report_delisted_em_df)
|
|
582
620
|
|
|
583
|
-
stock_profit_sheet_by_report_delisted_em_df =
|
|
621
|
+
stock_profit_sheet_by_report_delisted_em_df = (
|
|
622
|
+
stock_profit_sheet_by_report_delisted_em(symbol="SZ000013")
|
|
623
|
+
)
|
|
584
624
|
print(stock_profit_sheet_by_report_delisted_em_df)
|
|
585
625
|
|
|
586
|
-
stock_cash_flow_sheet_by_report_delisted_em_df =
|
|
626
|
+
stock_cash_flow_sheet_by_report_delisted_em_df = (
|
|
627
|
+
stock_cash_flow_sheet_by_report_delisted_em(symbol="SZ000013")
|
|
628
|
+
)
|
|
587
629
|
print(stock_cash_flow_sheet_by_report_delisted_em_df)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2025/10/30 15:00
|
|
5
5
|
Desc: 全部A股-等权重市盈率、中位数市盈率
|
|
6
6
|
https://www.legulegu.com/stockdata/a-ttm-lyr
|
|
7
7
|
"""
|
|
@@ -14,27 +14,36 @@ from akshare.stock_feature.stock_a_indicator import get_token_lg, get_cookie_csr
|
|
|
14
14
|
def stock_a_ttm_lyr() -> pd.DataFrame:
|
|
15
15
|
"""
|
|
16
16
|
全部 A 股-等权重市盈率、中位数市盈率
|
|
17
|
-
https://www.legulegu.com/stockdata/a-ttm-lyr
|
|
18
17
|
:return: 全部A股-等权重市盈率、中位数市盈率
|
|
19
18
|
:rtype: pandas.DataFrame
|
|
20
19
|
"""
|
|
20
|
+
|
|
21
21
|
url = "https://legulegu.com/api/stock-data/market-ttm-lyr"
|
|
22
22
|
params = {
|
|
23
23
|
"marketId": "5",
|
|
24
24
|
"token": get_token_lg(),
|
|
25
25
|
}
|
|
26
|
-
|
|
26
|
+
# 获取 cookie 和 headers
|
|
27
|
+
csrf_data = get_cookie_csrf(url="https://www.legulegu.com/stockdata/a-ttm-lyr")
|
|
28
|
+
# 使用返回的 headers(已经是副本)
|
|
29
|
+
request_headers = csrf_data['headers'].copy()
|
|
30
|
+
request_headers.update({
|
|
31
|
+
"host": "www.legulegu.com",
|
|
32
|
+
"referer": "https://www.legulegu.com/stockdata/a-ttm-lyr",
|
|
33
|
+
})
|
|
34
|
+
# 使用独立的 session
|
|
35
|
+
session = requests.Session()
|
|
36
|
+
r = session.get(
|
|
27
37
|
url,
|
|
28
38
|
params=params,
|
|
29
|
-
|
|
39
|
+
cookies=csrf_data['cookies'],
|
|
40
|
+
headers=request_headers,
|
|
30
41
|
)
|
|
31
42
|
data_json = r.json()
|
|
32
43
|
temp_df = pd.DataFrame(data_json["data"])
|
|
33
|
-
temp_df["date"] = (
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
.dt.date
|
|
37
|
-
)
|
|
44
|
+
temp_df["date"] = pd.to_datetime(temp_df["date"], errors="coerce").dt.date
|
|
45
|
+
# 关闭 session
|
|
46
|
+
session.close()
|
|
38
47
|
return temp_df
|
|
39
48
|
|
|
40
49
|
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# -*- coding:utf-8 -*-
|
|
3
|
+
"""
|
|
4
|
+
Date: 2024/11/26 18:00
|
|
5
|
+
Desc: 东方财富网-数据中心-估值分析-每日互动-每日互动-估值分析
|
|
6
|
+
https://data.eastmoney.com/gzfx/detail/300766.html
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import pandas as pd
|
|
10
|
+
|
|
11
|
+
from akshare.request import make_request_with_retry_json
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def stock_value_em(symbol: str = "300766") -> pd.DataFrame:
|
|
15
|
+
"""
|
|
16
|
+
东方财富网-数据中心-估值分析-每日互动-每日互动-估值分析
|
|
17
|
+
https://data.eastmoney.com/gzfx/detail/300766.html
|
|
18
|
+
:param symbol: 股票代码
|
|
19
|
+
:type symbol: str
|
|
20
|
+
:return: 估值分析
|
|
21
|
+
:rtype: pandas.DataFrame
|
|
22
|
+
"""
|
|
23
|
+
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
|
24
|
+
params = {
|
|
25
|
+
"sortColumns": "TRADE_DATE",
|
|
26
|
+
"sortTypes": "-1",
|
|
27
|
+
"pageSize": "5000",
|
|
28
|
+
"pageNumber": "1",
|
|
29
|
+
"reportName": "RPT_VALUEANALYSIS_DET",
|
|
30
|
+
"columns": "ALL",
|
|
31
|
+
"quoteColumns": "",
|
|
32
|
+
"source": "WEB",
|
|
33
|
+
"client": "WEB",
|
|
34
|
+
"filter": f'(SECURITY_CODE="{symbol}")',
|
|
35
|
+
}
|
|
36
|
+
data_json = make_request_with_retry_json(url, params=params)
|
|
37
|
+
temp_json = data_json["result"]["data"]
|
|
38
|
+
temp_df = pd.DataFrame(temp_json)
|
|
39
|
+
temp_df.rename(
|
|
40
|
+
columns={
|
|
41
|
+
"TRADE_DATE": "数据日期",
|
|
42
|
+
"CLOSE_PRICE": "当日收盘价",
|
|
43
|
+
"CHANGE_RATE": "当日涨跌幅",
|
|
44
|
+
"TOTAL_MARKET_CAP": "总市值",
|
|
45
|
+
"NOTLIMITED_MARKETCAP_A": "流通市值",
|
|
46
|
+
"TOTAL_SHARES": "总股本",
|
|
47
|
+
"FREE_SHARES_A": "流通股本",
|
|
48
|
+
"PE_TTM": "PE(TTM)",
|
|
49
|
+
"PE_LAR": "PE(静)",
|
|
50
|
+
"PB_MRQ": "市净率",
|
|
51
|
+
"PEG_CAR": "PEG值",
|
|
52
|
+
"PCF_OCF_TTM": "市现率",
|
|
53
|
+
"PS_TTM": "市销率",
|
|
54
|
+
},
|
|
55
|
+
inplace=True,
|
|
56
|
+
)
|
|
57
|
+
temp_df = temp_df[
|
|
58
|
+
[
|
|
59
|
+
"数据日期",
|
|
60
|
+
"当日收盘价",
|
|
61
|
+
"当日涨跌幅",
|
|
62
|
+
"总市值",
|
|
63
|
+
"流通市值",
|
|
64
|
+
"总股本",
|
|
65
|
+
"流通股本",
|
|
66
|
+
"PE(TTM)",
|
|
67
|
+
"PE(静)",
|
|
68
|
+
"市净率",
|
|
69
|
+
"PEG值",
|
|
70
|
+
"市现率",
|
|
71
|
+
"市销率",
|
|
72
|
+
]
|
|
73
|
+
]
|
|
74
|
+
temp_df["数据日期"] = pd.to_datetime(temp_df["数据日期"], errors="coerce").dt.date
|
|
75
|
+
for item in temp_df.columns[1:]:
|
|
76
|
+
temp_df[item] = pd.to_numeric(temp_df[item], errors="coerce")
|
|
77
|
+
temp_df.sort_values(by="数据日期", ignore_index=True, inplace=True)
|
|
78
|
+
return temp_df
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
if __name__ == "__main__":
|
|
82
|
+
stock_value_em_df = stock_value_em(symbol="300766")
|
|
83
|
+
print(stock_value_em_df)
|