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/air/air_hebei.py
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2024/4/25 17:20
|
|
5
5
|
Desc: 河北省空气质量预报信息发布系统
|
|
6
|
-
|
|
6
|
+
https://110.249.223.67/publish
|
|
7
7
|
每日 17 时发布
|
|
8
8
|
等级划分
|
|
9
9
|
1. 空气污染指数为0-50,空气质量级别为一级,空气质量状况属于优。此时,空气质量令人满意,基本无空气污染,各类人群可正常活动。
|
|
@@ -14,68 +14,94 @@ http://110.249.223.67/publish/
|
|
|
14
14
|
6. 空气污染指数大于300,空气质量级别为六级,空气质量状况属于严重污染。此时,健康人群运动耐受力降低,有明显强烈症状,提前出现某些疾病,建议儿童、老年人和病人应当留在室内,避免体力消耗,一般人群应避免户外活动。
|
|
15
15
|
发布单位:河北省环境应急与重污染天气预警中心 技术支持:中国科学院大气物理研究所 中科三清科技有限公司
|
|
16
16
|
"""
|
|
17
|
-
from datetime import datetime
|
|
18
17
|
|
|
19
18
|
import pandas as pd
|
|
20
19
|
import requests
|
|
21
|
-
from
|
|
20
|
+
from bs4 import BeautifulSoup
|
|
22
21
|
|
|
23
22
|
|
|
24
|
-
def air_quality_hebei(
|
|
23
|
+
def air_quality_hebei() -> pd.DataFrame:
|
|
25
24
|
"""
|
|
26
25
|
河北省空气质量预报信息发布系统-空气质量预报, 未来 6 天
|
|
27
|
-
http://
|
|
28
|
-
:param symbol: choice of {'石家庄市', '唐山市', '秦皇岛市', '邯郸市', '邢台市', '保定市', '张家口市', '承德市', '沧州市', '廊坊市', '衡水市', '辛集市', '定州市'}
|
|
29
|
-
:type symbol: str
|
|
26
|
+
http://218.11.10.130:8080/#/application/home
|
|
30
27
|
:return: city = "", 返回所有地区的数据; city="唐山市", 返回唐山市的数据
|
|
31
28
|
:rtype: pandas.DataFrame
|
|
32
29
|
"""
|
|
33
|
-
url = "http://
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
30
|
+
url = "http://218.11.10.130:8080/api/hour/130000.xml"
|
|
31
|
+
r = requests.get(url)
|
|
32
|
+
soup = BeautifulSoup(r.content, features="xml")
|
|
33
|
+
data = []
|
|
34
|
+
cities = soup.find_all("City")
|
|
35
|
+
for city in cities:
|
|
36
|
+
pointers = city.find_all("Pointer")
|
|
37
|
+
for pointer in pointers:
|
|
38
|
+
row = {
|
|
39
|
+
"City": city.Name.text if city.Name else None,
|
|
40
|
+
"Region": pointer.Region.text if pointer.Region else None,
|
|
41
|
+
"Station": pointer.Name.text if pointer.Name else None,
|
|
42
|
+
"DateTime": pointer.DataTime.text if pointer.DataTime else None,
|
|
43
|
+
"AQI": pointer.AQI.text if pointer.AQI else None,
|
|
44
|
+
"Level": pointer.Level.text if pointer.Level else None,
|
|
45
|
+
"MaxPoll": pointer.MaxPoll.text if pointer.MaxPoll else None,
|
|
46
|
+
"Longitude": pointer.CLng.text if pointer.CLng else None,
|
|
47
|
+
"Latitude": pointer.CLat.text if pointer.CLat else None,
|
|
48
|
+
}
|
|
49
|
+
polls = pointer.find_all("Poll")
|
|
50
|
+
for poll in polls:
|
|
51
|
+
poll_name = poll.Name.text if poll.Name else None
|
|
52
|
+
poll_value = poll.Value.text if poll.Value else None
|
|
53
|
+
row[f"{poll_name}_Value"] = poll_value
|
|
54
|
+
row[f"{poll_name}_IAQI"] = poll.IAQI.text if poll.IAQI else None
|
|
55
|
+
data.append(row)
|
|
56
|
+
|
|
57
|
+
df = pd.DataFrame(data)
|
|
58
|
+
numeric_columns = ["AQI", "Longitude", "Latitude"] + [
|
|
59
|
+
col for col in df.columns if col.endswith("_Value") or col.endswith("_IAQI")
|
|
60
|
+
]
|
|
61
|
+
for col in numeric_columns:
|
|
62
|
+
df[col] = pd.to_numeric(df[col], errors="coerce")
|
|
63
|
+
|
|
64
|
+
column_names = {
|
|
65
|
+
"City": "城市",
|
|
66
|
+
"Region": "区域",
|
|
67
|
+
"Station": "监测点",
|
|
68
|
+
"DateTime": "时间",
|
|
69
|
+
"Level": "空气质量等级",
|
|
70
|
+
"MaxPoll": "首要污染物",
|
|
71
|
+
"Longitude": "经度",
|
|
72
|
+
"Latitude": "纬度",
|
|
73
|
+
"SO2_Value": "二氧化硫_浓度",
|
|
74
|
+
"SO2_IAQI": "二氧化硫_IAQI",
|
|
75
|
+
"CO_Value": "一氧化碳_浓度",
|
|
76
|
+
"CO_IAQI": "一氧化碳_IAQI",
|
|
77
|
+
"NO2_Value": "二氧化氮_浓度",
|
|
78
|
+
"NO2_IAQI": "二氧化氮_IAQI",
|
|
79
|
+
"O3-1H_Value": "臭氧1小时_浓度",
|
|
80
|
+
"O3-1H_IAQI": "臭氧1小时_IAQI",
|
|
81
|
+
"O3-8H_Value": "臭氧8小时_浓度",
|
|
82
|
+
"O3-8H_IAQI": "臭氧8小时_IAQI",
|
|
83
|
+
"PM2.5_Value": "PM2.5_浓度",
|
|
84
|
+
"PM2.5_IAQI": "PM2.5_IAQI",
|
|
85
|
+
"PM10_Value": "PM10_浓度",
|
|
86
|
+
"PM10_IAQI": "PM10_IAQI",
|
|
87
|
+
}
|
|
88
|
+
df = df.rename(columns=column_names)
|
|
89
|
+
basic_columns = [
|
|
90
|
+
"城市",
|
|
91
|
+
"区域",
|
|
92
|
+
"监测点",
|
|
93
|
+
"时间",
|
|
94
|
+
"AQI",
|
|
95
|
+
"空气质量等级",
|
|
96
|
+
"首要污染物",
|
|
97
|
+
"经度",
|
|
98
|
+
"纬度",
|
|
99
|
+
]
|
|
100
|
+
pollutant_columns = [col for col in df.columns if col not in basic_columns]
|
|
101
|
+
df = df[basic_columns + sorted(pollutant_columns)]
|
|
102
|
+
return df
|
|
77
103
|
|
|
78
104
|
|
|
79
105
|
if __name__ == "__main__":
|
|
80
|
-
air_quality_hebei_df = air_quality_hebei(
|
|
106
|
+
air_quality_hebei_df = air_quality_hebei()
|
|
81
107
|
print(air_quality_hebei_df)
|
akshare/air/air_zhenqi.py
CHANGED
|
@@ -15,7 +15,7 @@ from io import StringIO
|
|
|
15
15
|
|
|
16
16
|
import pandas as pd
|
|
17
17
|
import requests
|
|
18
|
-
from py_mini_racer import
|
|
18
|
+
from py_mini_racer import MiniRacer
|
|
19
19
|
|
|
20
20
|
from akshare.utils import demjson
|
|
21
21
|
|
|
@@ -116,14 +116,10 @@ def air_quality_watch_point(
|
|
|
116
116
|
end_date = "-".join([end_date[:4], end_date[4:6], end_date[6:]])
|
|
117
117
|
url = "https://www.zq12369.com/api/zhenqiapi.php"
|
|
118
118
|
file_data = _get_file_content(file_name="crypto.js")
|
|
119
|
-
ctx =
|
|
119
|
+
ctx = MiniRacer()
|
|
120
120
|
ctx.eval(file_data)
|
|
121
121
|
method = "GETCITYPOINTAVG"
|
|
122
|
-
ctx.call("encode_param", method)
|
|
123
|
-
ctx.call("encode_param", start_date)
|
|
124
|
-
ctx.call("encode_param", end_date)
|
|
125
122
|
city_param = ctx.call("encode_param", city)
|
|
126
|
-
ctx.call("encode_secret", method, city_param, start_date, end_date)
|
|
127
123
|
payload = {
|
|
128
124
|
"appId": "a01901d3caba1f362d69474674ce477f",
|
|
129
125
|
"method": ctx.call("encode_param", method),
|
|
@@ -167,7 +163,7 @@ def air_quality_hist(
|
|
|
167
163
|
end_date = "-".join([end_date[:4], end_date[4:6], end_date[6:]])
|
|
168
164
|
url = "https://www.zq12369.com/api/newzhenqiapi.php"
|
|
169
165
|
file_data = _get_file_content(file_name="outcrypto.js")
|
|
170
|
-
ctx =
|
|
166
|
+
ctx = MiniRacer()
|
|
171
167
|
ctx.eval(file_data)
|
|
172
168
|
app_id = "4f0e3a273d547ce6b7147bfa7ceb4b6e"
|
|
173
169
|
method = "CETCITYPERIOD"
|
akshare/air/cons.py
CHANGED
akshare/air/crypto.js
CHANGED
akshare/air/outcrypto.js
CHANGED
akshare/air/sunrise_tad.py
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date: 2024/
|
|
4
|
+
Date: 2024/4/29 16:00
|
|
5
5
|
Desc: 日出和日落数据
|
|
6
6
|
https://www.timeanddate.com
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
from io import StringIO
|
|
9
10
|
|
|
10
11
|
import pandas as pd
|
|
11
|
-
import pypinyin
|
|
12
12
|
import requests
|
|
13
13
|
|
|
14
14
|
|
|
@@ -31,11 +31,13 @@ def sunrise_city_list() -> list:
|
|
|
31
31
|
city_list.extend([item.lower() for item in china_city_two_df.iloc[:, 1].tolist()])
|
|
32
32
|
city_list.extend([item.lower() for item in china_city_two_df.iloc[:, 2].tolist()])
|
|
33
33
|
city_list.extend([item.lower() for item in china_city_two_df.iloc[:, 3].tolist()])
|
|
34
|
-
city_list.extend(
|
|
34
|
+
city_list.extend(
|
|
35
|
+
[item.lower() for item in china_city_two_df.iloc[:, 4].dropna().tolist()]
|
|
36
|
+
)
|
|
35
37
|
return city_list
|
|
36
38
|
|
|
37
39
|
|
|
38
|
-
def sunrise_daily(date: str = "
|
|
40
|
+
def sunrise_daily(date: str = "20240428", city: str = "beijing") -> pd.DataFrame:
|
|
39
41
|
"""
|
|
40
42
|
每日日出日落数据
|
|
41
43
|
https://www.timeanddate.com/astronomy/china/shaoxing
|
|
@@ -46,24 +48,29 @@ def sunrise_daily(date: str = "20200428", city: str = "北京") -> pd.DataFrame:
|
|
|
46
48
|
:return: 返回指定日期指定地区的日出日落数据
|
|
47
49
|
:rtype: pandas.DataFrame
|
|
48
50
|
"""
|
|
49
|
-
|
|
51
|
+
import urllib3
|
|
52
|
+
|
|
53
|
+
urllib3.disable_warnings()
|
|
54
|
+
if city in sunrise_city_list():
|
|
50
55
|
year = date[:4]
|
|
51
56
|
month = date[4:6]
|
|
52
|
-
url = f"https://www.timeanddate.com/sun/china/{
|
|
53
|
-
r = requests.get(url)
|
|
57
|
+
url = f"https://www.timeanddate.com/sun/china/{city}?month={month}&year={year}"
|
|
58
|
+
r = requests.get(url, verify=False)
|
|
54
59
|
table = pd.read_html(StringIO(r.text), header=2)[1]
|
|
55
|
-
month_df = table.iloc[:-1,
|
|
56
|
-
day_df = month_df[
|
|
60
|
+
month_df = table.iloc[:-1,]
|
|
61
|
+
day_df = month_df[
|
|
62
|
+
month_df.iloc[:, 0].astype(str).str.zfill(2) == date[6:]
|
|
63
|
+
].copy()
|
|
57
64
|
day_df.index = pd.to_datetime([date] * len(day_df), format="%Y%m%d")
|
|
58
65
|
day_df.reset_index(inplace=True)
|
|
59
66
|
day_df.rename(columns={"index": "date"}, inplace=True)
|
|
60
|
-
day_df[
|
|
67
|
+
day_df["date"] = pd.to_datetime(day_df["date"]).dt.date
|
|
61
68
|
return day_df
|
|
62
69
|
else:
|
|
63
70
|
raise "请输入正确的城市名称"
|
|
64
71
|
|
|
65
72
|
|
|
66
|
-
def sunrise_monthly(date: str = "
|
|
73
|
+
def sunrise_monthly(date: str = "20240428", city: str = "beijing") -> pd.DataFrame:
|
|
67
74
|
"""
|
|
68
75
|
每个指定 date 所在月份的每日日出日落数据, 如果当前月份未到月底, 则以预测值填充
|
|
69
76
|
https://www.timeanddate.com/astronomy/china/shaoxing
|
|
@@ -74,24 +81,32 @@ def sunrise_monthly(date: str = "20190801", city: str = "北京") -> pd.DataFram
|
|
|
74
81
|
:return: 指定 date 所在月份的每日日出日落数据
|
|
75
82
|
:rtype: pandas.DataFrame
|
|
76
83
|
"""
|
|
77
|
-
|
|
84
|
+
import urllib3
|
|
85
|
+
|
|
86
|
+
urllib3.disable_warnings()
|
|
87
|
+
if city in sunrise_city_list():
|
|
78
88
|
year = date[:4]
|
|
79
89
|
month = date[4:6]
|
|
80
|
-
url = f"https://www.timeanddate.com/sun/china/{
|
|
90
|
+
url = f"https://www.timeanddate.com/sun/china/{city}?month={month}&year={year}"
|
|
81
91
|
r = requests.get(url)
|
|
82
92
|
table = pd.read_html(StringIO(r.text), header=2)[1]
|
|
83
|
-
month_df = table.iloc[:-1,
|
|
93
|
+
month_df = table.iloc[:-1,].copy()
|
|
84
94
|
month_df.index = [date[:-2]] * len(month_df)
|
|
85
95
|
month_df.reset_index(inplace=True)
|
|
86
|
-
month_df.rename(
|
|
96
|
+
month_df.rename(
|
|
97
|
+
columns={
|
|
98
|
+
"index": "date",
|
|
99
|
+
},
|
|
100
|
+
inplace=True,
|
|
101
|
+
)
|
|
87
102
|
return month_df
|
|
88
103
|
else:
|
|
89
104
|
raise "请输入正确的城市名称"
|
|
90
105
|
|
|
91
106
|
|
|
92
107
|
if __name__ == "__main__":
|
|
93
|
-
sunrise_daily_df = sunrise_daily(date="
|
|
108
|
+
sunrise_daily_df = sunrise_daily(date="20240428", city="beijing")
|
|
94
109
|
print(sunrise_daily_df)
|
|
95
110
|
|
|
96
|
-
sunrise_monthly_df = sunrise_monthly(date="
|
|
111
|
+
sunrise_monthly_df = sunrise_monthly(date="20240428", city="beijing")
|
|
97
112
|
print(sunrise_monthly_df)
|
akshare/article/cons.py
CHANGED
akshare/article/epu_index.py
CHANGED
|
@@ -5,6 +5,7 @@ Date: 2024/1/20 22:00
|
|
|
5
5
|
Desc: 经济政策不确定性指数
|
|
6
6
|
https://www.policyuncertainty.com/index.html
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
import pandas as pd
|
|
9
10
|
|
|
10
11
|
|
|
@@ -28,7 +29,7 @@ def article_epu_index(symbol: str = "China") -> pd.DataFrame:
|
|
|
28
29
|
symbol = "HK"
|
|
29
30
|
epu_df = pd.read_excel(
|
|
30
31
|
io=f"http://www.policyuncertainty.com/media/{symbol}_EPU_Data_Annotated.xlsx",
|
|
31
|
-
engine="openpyxl"
|
|
32
|
+
engine="openpyxl",
|
|
32
33
|
)
|
|
33
34
|
return epu_df
|
|
34
35
|
if symbol in ["Germany", "France", "Italy"]: # 欧洲
|
|
@@ -40,13 +41,13 @@ def article_epu_index(symbol: str = "China") -> pd.DataFrame:
|
|
|
40
41
|
if symbol in ["Ireland", "Chile", "Colombia", "Netherlands", "Singapore", "Sweden"]:
|
|
41
42
|
epu_df = pd.read_excel(
|
|
42
43
|
io=f"http://www.policyuncertainty.com/media/{symbol}_Policy_Uncertainty_Data.xlsx",
|
|
43
|
-
engine="openpyxl"
|
|
44
|
+
engine="openpyxl",
|
|
44
45
|
)
|
|
45
46
|
return epu_df
|
|
46
47
|
if symbol == "Greece":
|
|
47
48
|
epu_df = pd.read_excel(
|
|
48
49
|
io=f"http://www.policyuncertainty.com/media/FKT_{symbol}_Policy_Uncertainty_Data.xlsx",
|
|
49
|
-
engine="openpyxl"
|
|
50
|
+
engine="openpyxl",
|
|
50
51
|
)
|
|
51
52
|
return epu_df
|
|
52
53
|
url = f"http://www.policyuncertainty.com/media/{symbol}_Policy_Uncertainty_Data.csv"
|
akshare/article/ff_factor.py
CHANGED
|
@@ -5,6 +5,7 @@ Date: 2024/1/20 22:30
|
|
|
5
5
|
Desc: FF-data-library
|
|
6
6
|
https://mba.tuck.dartmouth.edu/pages/faculty/ken.french/data_library.html
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
from io import StringIO
|
|
9
10
|
|
|
10
11
|
import pandas as pd
|
|
@@ -23,26 +24,31 @@ def article_ff_crr() -> pd.DataFrame:
|
|
|
23
24
|
res = requests.get(ff_home_url)
|
|
24
25
|
# first table
|
|
25
26
|
list_index = (
|
|
26
|
-
pd.read_html(StringIO(res.text), header=0, index_col=0)[4]
|
|
27
|
+
pd.read_html(StringIO(res.text), header=0, index_col=0)[4]
|
|
28
|
+
.iloc[2, :]
|
|
29
|
+
.index.tolist()
|
|
27
30
|
)
|
|
28
31
|
list_0 = [
|
|
29
32
|
item
|
|
30
33
|
for item in pd.read_html(StringIO(res.text), header=0, index_col=0)[4]
|
|
31
|
-
|
|
34
|
+
.iloc[0, :]
|
|
35
|
+
.iloc[0]
|
|
32
36
|
.split(" ")
|
|
33
37
|
if item != ""
|
|
34
38
|
]
|
|
35
39
|
list_1 = [
|
|
36
40
|
item
|
|
37
41
|
for item in pd.read_html(StringIO(res.text), header=0, index_col=0)[4]
|
|
38
|
-
|
|
42
|
+
.iloc[0, :]
|
|
43
|
+
.iloc[1]
|
|
39
44
|
.split(" ")
|
|
40
45
|
if item != ""
|
|
41
46
|
]
|
|
42
47
|
list_2 = [
|
|
43
48
|
item
|
|
44
49
|
for item in pd.read_html(StringIO(res.text), header=0, index_col=0)[4]
|
|
45
|
-
|
|
50
|
+
.iloc[0, :]
|
|
51
|
+
.iloc[2]
|
|
46
52
|
.split(" ")
|
|
47
53
|
if item != ""
|
|
48
54
|
]
|
|
@@ -63,26 +69,31 @@ def article_ff_crr() -> pd.DataFrame:
|
|
|
63
69
|
|
|
64
70
|
# second table
|
|
65
71
|
list_index = (
|
|
66
|
-
pd.read_html(StringIO(res.text), header=0, index_col=0)[4]
|
|
72
|
+
pd.read_html(StringIO(res.text), header=0, index_col=0)[4]
|
|
73
|
+
.iloc[1, :]
|
|
74
|
+
.index.tolist()
|
|
67
75
|
)
|
|
68
76
|
list_0 = [
|
|
69
77
|
item
|
|
70
78
|
for item in pd.read_html(StringIO(res.text), header=0, index_col=0)[4]
|
|
71
|
-
|
|
79
|
+
.iloc[1, :]
|
|
80
|
+
.iloc[0]
|
|
72
81
|
.split(" ")
|
|
73
82
|
if item != ""
|
|
74
83
|
]
|
|
75
84
|
list_1 = [
|
|
76
85
|
item
|
|
77
86
|
for item in pd.read_html(StringIO(res.text), header=0, index_col=0)[4]
|
|
78
|
-
|
|
87
|
+
.iloc[1, :]
|
|
88
|
+
.iloc[1]
|
|
79
89
|
.split(" ")
|
|
80
90
|
if item != ""
|
|
81
91
|
]
|
|
82
92
|
list_2 = [
|
|
83
93
|
item
|
|
84
94
|
for item in pd.read_html(StringIO(res.text), header=0, index_col=0)[4]
|
|
85
|
-
|
|
95
|
+
.iloc[1, :]
|
|
96
|
+
.iloc[2]
|
|
86
97
|
.split(" ")
|
|
87
98
|
if item != ""
|
|
88
99
|
]
|
akshare/article/fred_md.py
CHANGED
|
@@ -6,6 +6,7 @@ Desc: Economic Research from Federal Reserve Bank of St. Louis
|
|
|
6
6
|
https://research.stlouisfed.org/econ/mccracken/fred-databases/
|
|
7
7
|
FRED-MD and FRED-QD are large macroeconomic databases designed for the empirical analysis of “big data.” The datasets of monthly and quarterly observations mimic the coverage of datasets already used in the literature, but they add three appealing features. They are updated in real-time through the FRED database. They are publicly accessible, facilitating the replication of empirical work. And they relieve the researcher of the task of incorporating data changes and revisions (a task accomplished by the data desk at the Federal Reserve Bank of St. Louis).
|
|
8
8
|
"""
|
|
9
|
+
|
|
9
10
|
import pandas as pd
|
|
10
11
|
|
|
11
12
|
|
|
@@ -17,7 +18,9 @@ def fred_md(date: str = "2020-01") -> pd.DataFrame:
|
|
|
17
18
|
:return: Monthly Data
|
|
18
19
|
:rtype: pandas.DataFrame
|
|
19
20
|
"""
|
|
20
|
-
url =
|
|
21
|
+
url = (
|
|
22
|
+
f"https://s3.amazonaws.com/files.fred.stlouisfed.org/fred-md/monthly/{date}.csv"
|
|
23
|
+
)
|
|
21
24
|
temp_df = pd.read_csv(url)
|
|
22
25
|
return temp_df
|
|
23
26
|
|
akshare/article/risk_rv.py
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
Date: 2024/1/20 20:51
|
|
5
5
|
Desc: 修大成主页-Risk Lab-Realized Volatility; Oxford-Man Institute of Quantitative Finance Realized Library
|
|
6
6
|
"""
|
|
7
|
+
|
|
7
8
|
import json
|
|
8
9
|
|
|
9
10
|
import pandas as pd
|
|
@@ -64,11 +65,8 @@ def article_oman_rv(symbol: str = "FTSE", index: str = "rk_th2") -> pd.DataFrame
|
|
|
64
65
|
res = requests.get(url)
|
|
65
66
|
soup = BeautifulSoup(res.text, "lxml")
|
|
66
67
|
soup_text = soup.find("p").get_text()
|
|
67
|
-
data_json = json.loads(soup_text[soup_text.find("{"): soup_text.rfind("};") + 1])
|
|
68
|
+
data_json = json.loads(soup_text[soup_text.find("{") : soup_text.rfind("};") + 1])
|
|
68
69
|
date_list = data_json[f".{symbol}"]["dates"]
|
|
69
|
-
title_fore = data_json[f".{symbol}"][index]["name"]
|
|
70
|
-
title_last = data_json[f".{symbol}"][index]["measure"]
|
|
71
|
-
title_list = title_fore + "-" + title_last
|
|
72
70
|
temp_df = pd.DataFrame([date_list, data_json[f".{symbol}"][index]["data"]]).T
|
|
73
71
|
temp_df.index = pd.to_datetime(temp_df.iloc[:, 0], unit="ms")
|
|
74
72
|
temp_df = temp_df.iloc[:, 1]
|
|
@@ -107,10 +105,7 @@ def article_oman_rv_short(symbol: str = "FTSE") -> pd.DataFrame:
|
|
|
107
105
|
res = requests.get(url, headers=headers, verify=False)
|
|
108
106
|
soup = BeautifulSoup(res.text, "lxml")
|
|
109
107
|
soup_text = soup.find("p").get_text()
|
|
110
|
-
data_json = json.loads(soup_text[soup_text.find("{"): soup_text.rfind("}") + 1])
|
|
111
|
-
title_fore = data_json[f".{symbol}"]["name"]
|
|
112
|
-
title_last = data_json[f".{symbol}"]["measure"]
|
|
113
|
-
title_list = title_fore + "-" + title_last
|
|
108
|
+
data_json = json.loads(soup_text[soup_text.find("{") : soup_text.rfind("}") + 1])
|
|
114
109
|
temp_df = pd.DataFrame(data_json[f".{symbol}"]["data"])
|
|
115
110
|
temp_df.index = pd.to_datetime(temp_df.iloc[:, 0], unit="ms")
|
|
116
111
|
temp_df = temp_df.iloc[:, 1]
|
akshare/bank/bank_cbirc_2020.py
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2025/2/4 23:00
|
|
5
5
|
Desc: 中国银行保险监督管理委员会-首页-政务信息-行政处罚-银保监分局本级-XXXX行政处罚信息公开表
|
|
6
|
-
https://www.
|
|
6
|
+
https://www.nfra.gov.cn/cn/view/pages/ItemList.html?itemPId=923&itemId=4115&itemUrl=ItemListRightList.html&itemName=%E9%93%B6%E4%BF%9D%E7%9B%91%E5%88%86%E5%B1%80%E6%9C%AC%E7%BA%A7&itemsubPId=931&itemsubPName=%E8%A1%8C%E6%94%BF%E5%A4%84%E7%BD%9A#2
|
|
7
7
|
提取 具体页面 html 页面的 json 接口
|
|
8
|
-
https://www.
|
|
8
|
+
https://www.nfra.gov.cn/cn/static/data/DocInfo/SelectByDocId/data_docId=881446.json
|
|
9
9
|
2020 新接口
|
|
10
10
|
"""
|
|
11
11
|
|
|
@@ -22,7 +22,7 @@ from akshare.bank.cons import cbirc_headers_without_cookie_2020
|
|
|
22
22
|
def bank_fjcf_total_num(item: str = "分局本级") -> int:
|
|
23
23
|
"""
|
|
24
24
|
首页-政务信息-行政处罚-银保监分局本级 总页数
|
|
25
|
-
https://www.
|
|
25
|
+
https://www.nfra.gov.cn/cn/view/pages/ItemList.html?itemPId=923&itemId=4115&itemUrl=ItemListRightList.html&itemName=%E9%93%B6%E4%BF%9D%E7%9B%91%E5%88%86%E5%B1%80%E6%9C%AC%E7%BA%A7&itemsubPId=931
|
|
26
26
|
:param item: choice of {"机关", "本级", "分局本级"}
|
|
27
27
|
:type item: str
|
|
28
28
|
:return: 总页数
|
|
@@ -34,7 +34,7 @@ def bank_fjcf_total_num(item: str = "分局本级") -> int:
|
|
|
34
34
|
"分局本级": "4115",
|
|
35
35
|
}
|
|
36
36
|
cbirc_headers = cbirc_headers_without_cookie_2020.copy()
|
|
37
|
-
main_url = "https://www.
|
|
37
|
+
main_url = "https://www.nfra.gov.cn/cbircweb/DocInfo/SelectDocByItemIdAndChild"
|
|
38
38
|
params = {
|
|
39
39
|
"itemId": item_id_list[item],
|
|
40
40
|
"pageSize": "18",
|
|
@@ -47,7 +47,7 @@ def bank_fjcf_total_num(item: str = "分局本级") -> int:
|
|
|
47
47
|
def bank_fjcf_total_page(item: str = "分局本级", begin: int = 1) -> int:
|
|
48
48
|
"""
|
|
49
49
|
获取首页-政务信息-行政处罚-银保监分局本级的总页数
|
|
50
|
-
https://www.
|
|
50
|
+
https://www.nfra.gov.cn/cn/view/pages/ItemList.html?itemPId=923&itemId=4115&itemUrl=ItemListRightList.html&itemName=%E9%93%B6%E4%BF%9D%E7%9B%91%E5%88%86%E5%B1%80%E6%9C%AC%E7%BA%A7&itemsubPId=931
|
|
51
51
|
:param item: choice of {"机关", "本级", "分局本级"}
|
|
52
52
|
:type item: str
|
|
53
53
|
:param begin: 开始页数
|
|
@@ -61,7 +61,7 @@ def bank_fjcf_total_page(item: str = "分局本级", begin: int = 1) -> int:
|
|
|
61
61
|
"分局本级": "4115",
|
|
62
62
|
}
|
|
63
63
|
cbirc_headers = cbirc_headers_without_cookie_2020.copy()
|
|
64
|
-
main_url = "https://www.
|
|
64
|
+
main_url = "https://www.nfra.gov.cn/cbircweb/DocInfo/SelectDocByItemIdAndChild"
|
|
65
65
|
params = {
|
|
66
66
|
"itemId": item_id_list[item],
|
|
67
67
|
"pageSize": "18",
|
|
@@ -93,7 +93,7 @@ def bank_fjcf_page_url(
|
|
|
93
93
|
"分局本级": "4115",
|
|
94
94
|
}
|
|
95
95
|
cbirc_headers = cbirc_headers_without_cookie_2020.copy()
|
|
96
|
-
main_url = "https://www.
|
|
96
|
+
main_url = "https://www.nfra.gov.cn/cbircweb/DocInfo/SelectDocByItemIdAndChild"
|
|
97
97
|
temp_df = pd.DataFrame()
|
|
98
98
|
for i_page in tqdm(range(begin, page + begin), leave=False):
|
|
99
99
|
params = {
|
|
@@ -125,7 +125,7 @@ def bank_fjcf_table_detail(
|
|
|
125
125
|
id_list = bank_fjcf_page_url(page=page, item=item, begin=begin)["docId"]
|
|
126
126
|
big_df = pd.DataFrame()
|
|
127
127
|
for item in id_list:
|
|
128
|
-
url = f"https://www.
|
|
128
|
+
url = f"https://www.nfra.gov.cn/cn/static/data/DocInfo/SelectByDocId/data_docId={item}.json"
|
|
129
129
|
res = requests.get(url)
|
|
130
130
|
try:
|
|
131
131
|
table_list = pd.read_html(StringIO(res.json()["data"]["docClob"]))[0]
|
|
@@ -148,7 +148,7 @@ def bank_fjcf_table_detail(
|
|
|
148
148
|
table_list.insert(2, pd.NA)
|
|
149
149
|
else:
|
|
150
150
|
print(
|
|
151
|
-
f"{item} 异常,请通过 https://www.
|
|
151
|
+
f"{item} 异常,请通过 https://www.nfra.gov.cn/cn/view/pages/ItemDetail.html?docId={item} 查看"
|
|
152
152
|
)
|
|
153
153
|
continue
|
|
154
154
|
|
|
@@ -170,7 +170,7 @@ def bank_fjcf_table_detail(
|
|
|
170
170
|
big_df.columns = [
|
|
171
171
|
"行政处罚决定书文号",
|
|
172
172
|
"姓名",
|
|
173
|
-
"单位", # 20200108新增
|
|
173
|
+
"单位", # 20200108 新增
|
|
174
174
|
"单位名称",
|
|
175
175
|
"主要负责人姓名",
|
|
176
176
|
"主要违法违规事实(案由)",
|
akshare/bank/cons.py
CHANGED
|
@@ -4,17 +4,18 @@
|
|
|
4
4
|
Date: 2023/4/3 21:06
|
|
5
5
|
Desc: 银保监会配置文件
|
|
6
6
|
"""
|
|
7
|
+
|
|
7
8
|
cbirc_headers_without_cookie_2020 = {
|
|
8
9
|
"Accept": "*/*",
|
|
9
10
|
"Accept-Encoding": "gzip, deflate",
|
|
10
11
|
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
|
|
11
12
|
"Cache-Control": "no-cache",
|
|
12
13
|
"Connection": "keep-alive",
|
|
13
|
-
"Host": "www.
|
|
14
|
+
"Host": "www.nfra.gov.cn",
|
|
14
15
|
"Pragma": "no-cache",
|
|
15
|
-
"Referer": "http://www.
|
|
16
|
+
"Referer": "http://www.nfra.gov.cn/cn/view/pages/ItemList.html?itemPId=923&itemId=4115&itemUrl=ItemListRightList.html&itemName=%E9%93%B6%E4%BF%9D%E7%9B%91%E5%88%86%E5%B1%80%E6%9C%AC%E7%BA%A7&itemsubPId=931&itemsubPName=%E8%A1%8C%E6%94%BF%E5%A4%84%E7%BD%9A",
|
|
16
17
|
"X-Requested-With": "XMLHttpRequest",
|
|
17
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
|
|
18
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36",
|
|
18
19
|
}
|
|
19
20
|
|
|
20
21
|
cbirc_headers_without_cookie_2019 = {
|
|
@@ -23,9 +24,9 @@ cbirc_headers_without_cookie_2019 = {
|
|
|
23
24
|
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
|
|
24
25
|
"Cache-Control": "no-cache",
|
|
25
26
|
"Connection": "keep-alive",
|
|
26
|
-
"Host": "www.
|
|
27
|
+
"Host": "www.nfra.gov.cn",
|
|
27
28
|
"Pragma": "no-cache",
|
|
28
|
-
"Referer": "http://www.
|
|
29
|
+
"Referer": "http://www.nfra.gov.cn/cn/list/9103/910305/ybjjcf/1.html",
|
|
29
30
|
"Upgrade-Insecure-Requests": "1",
|
|
30
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
|
|
31
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36",
|
|
31
32
|
}
|