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/utils/func.py
CHANGED
|
@@ -1,12 +1,59 @@
|
|
|
1
1
|
# !/usr/bin/env python
|
|
2
2
|
"""
|
|
3
|
-
Date:
|
|
3
|
+
Date: 2025/3/10 18:00
|
|
4
4
|
Desc: 通用帮助函数
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
import math
|
|
8
|
+
from typing import List, Dict
|
|
8
9
|
|
|
9
10
|
import pandas as pd
|
|
11
|
+
import requests
|
|
12
|
+
|
|
13
|
+
from akshare.utils.tqdm import get_tqdm
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def fetch_paginated_data(url: str, base_params: Dict, timeout: int = 15):
|
|
17
|
+
"""
|
|
18
|
+
东方财富-分页获取数据并合并结果
|
|
19
|
+
https://quote.eastmoney.com/f1.html?newcode=0.000001
|
|
20
|
+
:param url: 股票代码
|
|
21
|
+
:type url: str
|
|
22
|
+
:param base_params: 基础请求参数
|
|
23
|
+
:type base_params: dict
|
|
24
|
+
:param timeout: 请求超时时间
|
|
25
|
+
:type timeout: str
|
|
26
|
+
:return: 合并后的数据
|
|
27
|
+
:rtype: pandas.DataFrame
|
|
28
|
+
"""
|
|
29
|
+
# 复制参数以避免修改原始参数
|
|
30
|
+
params = base_params.copy()
|
|
31
|
+
# 获取第一页数据,用于确定分页信息
|
|
32
|
+
r = requests.get(url, params=params, timeout=timeout)
|
|
33
|
+
data_json = r.json()
|
|
34
|
+
# 计算分页信息
|
|
35
|
+
per_page_num = len(data_json["data"]["diff"])
|
|
36
|
+
total_page = math.ceil(data_json["data"]["total"] / per_page_num)
|
|
37
|
+
# 存储所有页面数据
|
|
38
|
+
temp_list = []
|
|
39
|
+
# 添加第一页数据
|
|
40
|
+
temp_list.append(pd.DataFrame(data_json["data"]["diff"]))
|
|
41
|
+
# 获取进度条
|
|
42
|
+
tqdm = get_tqdm()
|
|
43
|
+
# 获取剩余页面数据
|
|
44
|
+
for page in tqdm(range(2, total_page + 1), leave=False):
|
|
45
|
+
params.update({"pn": page})
|
|
46
|
+
r = requests.get(url, params=params, timeout=timeout)
|
|
47
|
+
data_json = r.json()
|
|
48
|
+
inner_temp_df = pd.DataFrame(data_json["data"]["diff"])
|
|
49
|
+
temp_list.append(inner_temp_df)
|
|
50
|
+
# 合并所有数据
|
|
51
|
+
temp_df = pd.concat(temp_list, ignore_index=True)
|
|
52
|
+
temp_df["f3"] = pd.to_numeric(temp_df["f3"], errors="coerce")
|
|
53
|
+
temp_df.sort_values(by=["f3"], ascending=False, inplace=True, ignore_index=True)
|
|
54
|
+
temp_df.reset_index(inplace=True)
|
|
55
|
+
temp_df["index"] = temp_df["index"].astype(int) + 1
|
|
56
|
+
return temp_df
|
|
10
57
|
|
|
11
58
|
|
|
12
59
|
def set_df_columns(df: pd.DataFrame, cols: List[str]) -> pd.DataFrame:
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"""
|
|
2
|
+
利用多进行执行 js 代码方案
|
|
3
|
+
|
|
4
|
+
1. 未能解决 gevent 调用问题
|
|
5
|
+
2. 导致 js 代码执行缓慢
|
|
6
|
+
3. 该方案废弃,这里仅作参考
|
|
7
|
+
|
|
8
|
+
同时发现 gevent 里面无法调用异步的接口
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
import concurrent.futures
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# 定义在模块级别的函数
|
|
15
|
+
def js_executor_function(js_code_str, method, args):
|
|
16
|
+
"""在新进程中执行 JavaScript 代码的函数"""
|
|
17
|
+
from py_mini_racer import MiniRacer
|
|
18
|
+
|
|
19
|
+
js_code = MiniRacer()
|
|
20
|
+
js_code.eval(js_code_str)
|
|
21
|
+
|
|
22
|
+
if method == "call":
|
|
23
|
+
fn_name = args[0]
|
|
24
|
+
fn_args = args[1:]
|
|
25
|
+
return js_code.call(fn_name, *fn_args)
|
|
26
|
+
elif method == "eval":
|
|
27
|
+
return js_code.eval(args[0])
|
|
28
|
+
else:
|
|
29
|
+
raise ValueError(f"不支持的方法: {method}")
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def execute_js_in_executor(js_code_str, method, *args, timeout=30):
|
|
33
|
+
"""
|
|
34
|
+
使用 ProcessPoolExecutor 在独立进程中执行 JavaScript
|
|
35
|
+
|
|
36
|
+
参数:
|
|
37
|
+
js_code_str: JavaScript 代码字符串
|
|
38
|
+
method: 'call' 或 'eval'
|
|
39
|
+
args: 如果 method 是 'call',第一个参数是函数名,后续是函数参数
|
|
40
|
+
如果 method 是 'eval',只需提供一个参数:要评估的代码
|
|
41
|
+
timeout: 超时时间(秒)
|
|
42
|
+
|
|
43
|
+
返回:
|
|
44
|
+
执行结果
|
|
45
|
+
"""
|
|
46
|
+
with concurrent.futures.ProcessPoolExecutor(max_workers=1) as executor:
|
|
47
|
+
future = executor.submit(js_executor_function, js_code_str, method, args)
|
|
48
|
+
try:
|
|
49
|
+
return future.result(timeout=timeout)
|
|
50
|
+
except concurrent.futures.TimeoutError:
|
|
51
|
+
# 清理资源并抛出超时异常
|
|
52
|
+
executor.shutdown(wait=False)
|
|
53
|
+
raise TimeoutError("JavaScript 执行超时")
|
akshare/utils/token_process.py
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
Date: 2020/2/13 21:22
|
|
5
5
|
Desc: 存储和读取 Token 文件
|
|
6
6
|
"""
|
|
7
|
+
|
|
7
8
|
import os
|
|
8
9
|
|
|
9
10
|
import pandas as pd
|
|
@@ -12,22 +13,22 @@ from akshare.pro import cons
|
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
def set_token(token):
|
|
15
|
-
df = pd.DataFrame([token], columns=[
|
|
16
|
-
user_home = os.path.expanduser(
|
|
16
|
+
df = pd.DataFrame([token], columns=["token"])
|
|
17
|
+
user_home = os.path.expanduser("~")
|
|
17
18
|
fp = os.path.join(user_home, cons.TOKEN_F_P)
|
|
18
19
|
df.to_csv(fp, index=False)
|
|
19
20
|
|
|
20
21
|
|
|
21
22
|
def get_token():
|
|
22
|
-
user_home = os.path.expanduser(
|
|
23
|
+
user_home = os.path.expanduser("~")
|
|
23
24
|
fp = os.path.join(user_home, cons.TOKEN_F_P)
|
|
24
25
|
if os.path.exists(fp):
|
|
25
26
|
df = pd.read_csv(fp)
|
|
26
|
-
return str(df.iloc[0][
|
|
27
|
+
return str(df.iloc[0]["token"])
|
|
27
28
|
else:
|
|
28
29
|
print(cons.TOKEN_ERR_MSG)
|
|
29
30
|
return
|
|
30
31
|
|
|
31
32
|
|
|
32
|
-
if __name__ ==
|
|
33
|
+
if __name__ == "__main__":
|
|
33
34
|
pass
|
akshare/utils/tqdm.py
CHANGED
|
@@ -1,12 +1,22 @@
|
|
|
1
|
-
def get_tqdm():
|
|
1
|
+
def get_tqdm(enable: bool = True):
|
|
2
2
|
"""
|
|
3
3
|
返回适用于当前环境的 tqdm 对象。
|
|
4
|
+
|
|
5
|
+
Args:
|
|
6
|
+
enable (bool): 是否启用进度条。默认为 True。
|
|
7
|
+
|
|
8
|
+
Returns:
|
|
9
|
+
tqdm 对象。
|
|
4
10
|
"""
|
|
11
|
+
if not enable:
|
|
12
|
+
# 如果进度条被禁用,返回一个不显示进度条的 tqdm 对象
|
|
13
|
+
return lambda iterable, *args, **kwargs: iterable
|
|
14
|
+
|
|
5
15
|
try:
|
|
6
|
-
# 尝试检查是否在
|
|
16
|
+
# 尝试检查是否在 jupyter notebook 环境中,有利于退出进度条
|
|
7
17
|
# noinspection PyUnresolvedReferences
|
|
8
18
|
shell = get_ipython().__class__.__name__
|
|
9
|
-
if shell ==
|
|
19
|
+
if shell == "ZMQInteractiveShell":
|
|
10
20
|
from tqdm.notebook import tqdm
|
|
11
21
|
else:
|
|
12
22
|
from tqdm import tqdm
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: akshare
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.17.99
|
|
4
4
|
Summary: AKShare is an elegant and simple financial data interface library for Python, built for human beings!
|
|
5
5
|
Home-page: https://github.com/akfamily/akshare
|
|
6
6
|
Author: AKFamily
|
|
@@ -12,46 +12,61 @@ Classifier: Programming Language :: Python :: 3.9
|
|
|
12
12
|
Classifier: Programming Language :: Python :: 3.10
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.11
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
15
17
|
Classifier: License :: OSI Approved :: MIT License
|
|
16
18
|
Classifier: Operating System :: OS Independent
|
|
17
19
|
Requires-Python: >=3.8
|
|
18
20
|
Description-Content-Type: text/markdown
|
|
19
21
|
License-File: LICENSE
|
|
20
|
-
Requires-Dist:
|
|
21
|
-
Requires-Dist:
|
|
22
|
-
Requires-Dist:
|
|
23
|
-
Requires-Dist:
|
|
24
|
-
Requires-Dist:
|
|
25
|
-
Requires-Dist:
|
|
26
|
-
Requires-Dist:
|
|
27
|
-
Requires-Dist:
|
|
28
|
-
Requires-Dist:
|
|
29
|
-
Requires-Dist:
|
|
30
|
-
Requires-Dist:
|
|
31
|
-
Requires-Dist:
|
|
32
|
-
Requires-Dist:
|
|
33
|
-
Requires-Dist:
|
|
34
|
-
Requires-Dist:
|
|
22
|
+
Requires-Dist: aiohttp>=3.11.13
|
|
23
|
+
Requires-Dist: beautifulsoup4>=4.9.1
|
|
24
|
+
Requires-Dist: lxml>=4.2.1
|
|
25
|
+
Requires-Dist: pandas>=0.25
|
|
26
|
+
Requires-Dist: requests>=2.22.0
|
|
27
|
+
Requires-Dist: curl_cffi>=0.13.0
|
|
28
|
+
Requires-Dist: html5lib>=1.0.1
|
|
29
|
+
Requires-Dist: xlrd>=1.2.0
|
|
30
|
+
Requires-Dist: urllib3>=1.25.8
|
|
31
|
+
Requires-Dist: tqdm>=4.43.0
|
|
32
|
+
Requires-Dist: openpyxl>=3.0.3
|
|
33
|
+
Requires-Dist: jsonpath>=0.82
|
|
34
|
+
Requires-Dist: tabulate>=0.8.6
|
|
35
|
+
Requires-Dist: decorator>=4.4.2
|
|
36
|
+
Requires-Dist: nest_asyncio>=1.6.0
|
|
37
|
+
Requires-Dist: mini-racer>=0.12.4; platform_system != "Linux"
|
|
38
|
+
Requires-Dist: py-mini-racer>=0.6.0; platform_system == "Linux"
|
|
39
|
+
Requires-Dist: akracer>=0.0.13; platform_system == "Linux"
|
|
35
40
|
Provides-Extra: full
|
|
36
|
-
Requires-Dist: akqmt
|
|
41
|
+
Requires-Dist: akqmt; extra == "full"
|
|
37
42
|
Provides-Extra: qmt
|
|
38
|
-
Requires-Dist: akqmt
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
43
|
+
Requires-Dist: akqmt; extra == "qmt"
|
|
44
|
+
Dynamic: author
|
|
45
|
+
Dynamic: author-email
|
|
46
|
+
Dynamic: classifier
|
|
47
|
+
Dynamic: description
|
|
48
|
+
Dynamic: description-content-type
|
|
49
|
+
Dynamic: home-page
|
|
50
|
+
Dynamic: keywords
|
|
51
|
+
Dynamic: license
|
|
52
|
+
Dynamic: license-file
|
|
53
|
+
Dynamic: provides-extra
|
|
54
|
+
Dynamic: requires-dist
|
|
55
|
+
Dynamic: requires-python
|
|
56
|
+
Dynamic: summary
|
|
57
|
+
|
|
58
|
+
**资源分享**:对于想了解更多财经数据与量化投研的小伙伴,推荐一个专注于财经数据和量化研究的知识社区。
|
|
59
|
+
该社区提供相关文档和视频学习资源,汇集了各类财经数据源和量化投研工具的使用经验。
|
|
60
|
+
有兴趣深入学习的朋友可点此[了解更多](https://t.zsxq.com/ZCxUG),也推荐大家关注微信公众号【数据科学实战】。
|
|
61
|
+
|
|
62
|
+
**工具推荐**:期魔方是一款本地化期货量化分析工具,适合数据分析爱好者使用。无需复杂部署,支持数据分析和机器学习功能,研究功能免费开放。
|
|
63
|
+
如需了解更多信息可访问[期魔方](https://qmfquant.com/)。
|
|
49
64
|
|
|
50
65
|

|
|
51
66
|
|
|
52
67
|
[](https://pypi.org/project/akshare/)
|
|
53
68
|
[](https://pypi.org/project/akshare/)
|
|
54
|
-
[](https://pepy.tech/
|
|
69
|
+
[](https://pepy.tech/projects/akshare)
|
|
55
70
|
[](https://akshare.readthedocs.io/?badge=latest)
|
|
56
71
|
[](https://github.com/astral-sh/ruff)
|
|
57
72
|
[](https://github.com/akfamily/akshare)
|
|
@@ -64,7 +79,7 @@ Requires-Dist: akqmt ; extra == 'qmt'
|
|
|
64
79
|
|
|
65
80
|
## Overview
|
|
66
81
|
|
|
67
|
-
[AKShare](https://github.com/akfamily/akshare) requires Python(64 bit) 3.
|
|
82
|
+
[AKShare](https://github.com/akfamily/akshare) requires Python(64 bit) 3.9 or higher and
|
|
68
83
|
aims to simplify the process of fetching financial data.
|
|
69
84
|
|
|
70
85
|
**Write less, get more!**
|
|
@@ -152,32 +167,15 @@ import akshare as ak
|
|
|
152
167
|
import mplfinance as mpf # Please install mplfinance as follows: pip install mplfinance
|
|
153
168
|
|
|
154
169
|
stock_us_daily_df = ak.stock_us_daily(symbol="AAPL", adjust="qfq")
|
|
155
|
-
stock_us_daily_df = stock_us_daily_df[
|
|
156
|
-
stock_us_daily_df.columns = ["Open", "High", "Low", "Close", "Volume"]
|
|
157
|
-
stock_us_daily_df.index.name = "Date"
|
|
170
|
+
stock_us_daily_df = stock_us_daily_df.set_index(["date"])
|
|
158
171
|
stock_us_daily_df = stock_us_daily_df["2020-04-01": "2020-04-29"]
|
|
159
|
-
mpf.plot(stock_us_daily_df, type=
|
|
172
|
+
mpf.plot(stock_us_daily_df, type="candle", mav=(3, 6, 9), volume=True, show_nontrading=False)
|
|
160
173
|
```
|
|
161
174
|
|
|
162
175
|
Output:
|
|
163
176
|
|
|
164
177
|

|
|
165
178
|
|
|
166
|
-
## Communication
|
|
167
|
-
|
|
168
|
-
Welcome to join the **数据科学实战** knowledge planet to learn more about quantitative investment,
|
|
169
|
-
please visit [数据科学实战](https://akshare.akfamily.xyz/learn.html) for more information:
|
|
170
|
-
|
|
171
|
-
<div>
|
|
172
|
-
<img alt="data science" src="https://jfds-1252952517.cos.ap-chengdu.myqcloud.com/akshare/readme/qrcode/data_scientist.png">
|
|
173
|
-
</div>
|
|
174
|
-
|
|
175
|
-
Pay attention to **数据科学实战** WeChat Official Accounts to get the [AKShare](https://github.com/akfamily/akshare) updated info:
|
|
176
|
-
|
|
177
|
-
<div>
|
|
178
|
-
<img alt="ds" src="https://github.com/akfamily/akshare/blob/main/assets/images/ds.png">
|
|
179
|
-
</div>
|
|
180
|
-
|
|
181
179
|
## Features
|
|
182
180
|
|
|
183
181
|
- **Easy of use**: Just one line code to fetch the data;
|
|
@@ -238,9 +236,9 @@ Please use this **bibtex** if you want to cite this repository in your publicati
|
|
|
238
236
|
|
|
239
237
|
```markdown
|
|
240
238
|
@misc{akshare,
|
|
241
|
-
author = {Albert King},
|
|
239
|
+
author = {Albert King and Yaojie Zhang},
|
|
242
240
|
title = {AKShare},
|
|
243
|
-
year = {
|
|
241
|
+
year = {2022},
|
|
244
242
|
publisher = {GitHub},
|
|
245
243
|
journal = {GitHub repository},
|
|
246
244
|
howpublished = {\url{https://github.com/akfamily/akshare}},
|
|
@@ -253,26 +251,22 @@ Special thanks [FuShare](https://github.com/LowinLi/fushare) for the opportunity
|
|
|
253
251
|
|
|
254
252
|
Special thanks [TuShare](https://github.com/waditu/tushare) for the opportunity of learning from the project;
|
|
255
253
|
|
|
256
|
-
Thanks for the data provided by [
|
|
254
|
+
Thanks for the data provided by [东方财富网站](http://data.eastmoney.com);
|
|
257
255
|
|
|
258
|
-
Thanks for the data provided by [
|
|
256
|
+
Thanks for the data provided by [新浪财经网站](https://finance.sina.com.cn);
|
|
257
|
+
|
|
258
|
+
Thanks for the data provided by [金十数据网站](https://www.jin10.com/);
|
|
259
|
+
|
|
260
|
+
Thanks for the data provided by [生意社网站](http://www.100ppi.com/);
|
|
259
261
|
|
|
260
262
|
Thanks for the data provided by [中国银行间市场交易商协会网站](http://www.nafmii.org.cn/);
|
|
261
263
|
|
|
262
264
|
Thanks for the data provided by [99期货网站](http://www.99qh.com/);
|
|
263
265
|
|
|
264
|
-
Thanks for the data provided by [英为财情网站](https://cn.investing.com/);
|
|
265
|
-
|
|
266
266
|
Thanks for the data provided by [中国外汇交易中心暨全国银行间同业拆借中心网站](http://www.chinamoney.com.cn/chinese/);
|
|
267
267
|
|
|
268
|
-
Thanks for the data provided by [金十数据网站](https://www.jin10.com/);
|
|
269
|
-
|
|
270
268
|
Thanks for the data provided by [和讯财经网站](http://www.hexun.com/);
|
|
271
269
|
|
|
272
|
-
Thanks for the data provided by [新浪财经网站](https://finance.sina.com.cn/);
|
|
273
|
-
|
|
274
|
-
Thanks for the data provided by [Oxford-Man Institute 网站](https://realized.oxford-man.ox.ac.uk/);
|
|
275
|
-
|
|
276
270
|
Thanks for the data provided by [DACHENG-XIU 网站](https://dachxiu.chicagobooth.edu/);
|
|
277
271
|
|
|
278
272
|
Thanks for the data provided by [上海证券交易所网站](http://www.sse.com.cn/assortment/options/price/);
|
|
@@ -295,16 +289,8 @@ Thanks for the data provided by [Timeanddate 网站](https://www.timeanddate.com
|
|
|
295
289
|
|
|
296
290
|
Thanks for the data provided by [河北省空气质量预报信息发布系统网站](http://110.249.223.67/publish/);
|
|
297
291
|
|
|
298
|
-
Thanks for the data provided by [南华期货网站](http://www.nanhua.net/nhzc/varietytrend.html);
|
|
299
|
-
|
|
300
292
|
Thanks for the data provided by [Economic Policy Uncertainty 网站](http://www.nanhua.net/nhzc/varietytrend.html);
|
|
301
293
|
|
|
302
|
-
Thanks for the data provided by [微博指数网站](https://data.weibo.com/index/newindex);
|
|
303
|
-
|
|
304
|
-
Thanks for the data provided by [百度指数网站](http://index.baidu.com/v2/main/index.html);
|
|
305
|
-
|
|
306
|
-
Thanks for the data provided by [谷歌指数网站](https://trends.google.com/trends/?geo=US);
|
|
307
|
-
|
|
308
294
|
Thanks for the data provided by [申万指数网站](http://www.swsindex.com/idx0120.aspx?columnid=8832);
|
|
309
295
|
|
|
310
296
|
Thanks for the data provided by [真气网网站](https://www.zq12369.com/);
|
|
@@ -319,28 +305,12 @@ Thanks for the data provided by [北京市碳排放权电子交易平台网站](
|
|
|
319
305
|
|
|
320
306
|
Thanks for the data provided by [国家金融与发展实验室网站](http://www.nifd.cn/);
|
|
321
307
|
|
|
322
|
-
Thanks for the data provided by [IT桔子网站](https://www.itjuzi.com);
|
|
323
|
-
|
|
324
|
-
Thanks for the data provided by [东方财富网站](http://data.eastmoney.com/jgdy/);
|
|
325
|
-
|
|
326
308
|
Thanks for the data provided by [义乌小商品指数网站](http://www.ywindex.com/Home/Product/index/);
|
|
327
309
|
|
|
328
|
-
Thanks for the data provided by [中国国家发展和改革委员会网站](http://jgjc.ndrc.gov.cn/dmzs.aspx?clmId=741);
|
|
329
|
-
|
|
330
310
|
Thanks for the data provided by [百度迁徙网站](https://qianxi.baidu.com/?from=shoubai#city=0);
|
|
331
311
|
|
|
332
|
-
Thanks for the data provided by [慈善中国网站](http://cishan.chinanpo.gov.cn/platform/login.html);
|
|
333
|
-
|
|
334
312
|
Thanks for the data provided by [思知网站](https://www.ownthink.com/);
|
|
335
313
|
|
|
336
314
|
Thanks for the data provided by [Currencyscoop 网站](https://currencyscoop.com/);
|
|
337
315
|
|
|
338
316
|
Thanks for the data provided by [新加坡交易所网站](https://www.sgx.com/zh-hans/research-education/derivatives);
|
|
339
|
-
|
|
340
|
-
Thanks for the tutorials provided by [微信公众号: Python大咖谈](https://upload-images.jianshu.io/upload_images/3240514-61004f2c71be4a0b.png).
|
|
341
|
-
|
|
342
|
-
## Backer and Sponsor
|
|
343
|
-
|
|
344
|
-
<a href="https://www.jetbrains.com/?from=jindaxiang/akshare" target="_blank">
|
|
345
|
-
<img alt="jetbrains" src="https://github.com/akfamily/akshare/blob/main/assets/images/jetbrains.svg" width="100px" height="100px">
|
|
346
|
-
</a>
|