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/fund/fund_rank_em.py
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date: 2024/
|
|
4
|
+
Date: 2024/7/24 13:00
|
|
5
5
|
Desc: 东方财富网-数据中心-开放基金排行
|
|
6
6
|
https://fund.eastmoney.com/data/fundranking.html
|
|
7
7
|
名词解释
|
|
8
8
|
https://help.1234567.com.cn/list_236.html
|
|
9
9
|
"""
|
|
10
|
+
|
|
10
11
|
from datetime import datetime, date
|
|
11
12
|
|
|
12
13
|
import pandas as pd
|
|
@@ -33,7 +34,7 @@ def fund_open_fund_rank_em(symbol: str = "全部") -> pd.DataFrame:
|
|
|
33
34
|
"""
|
|
34
35
|
东方财富网-数据中心-开放基金排行
|
|
35
36
|
https://fund.eastmoney.com/data/fundranking.html
|
|
36
|
-
:param symbol: choice of {"全部", "股票型", "混合型", "债券型", "指数型", "QDII", "
|
|
37
|
+
:param symbol: choice of {"全部", "股票型", "混合型", "债券型", "指数型", "QDII", "FOF"}
|
|
37
38
|
:type symbol: str
|
|
38
39
|
:return: 开放基金排行
|
|
39
40
|
:rtype: pandas.DataFrame
|
|
@@ -64,17 +65,18 @@ def fund_open_fund_rank_em(symbol: str = "全部") -> pd.DataFrame:
|
|
|
64
65
|
"qdii": "",
|
|
65
66
|
"tabSubtype": ",,,,,",
|
|
66
67
|
"pi": "1",
|
|
67
|
-
"pn": "
|
|
68
|
+
"pn": "30000",
|
|
68
69
|
"dx": "1",
|
|
69
70
|
"v": "0.1591891419018292",
|
|
70
71
|
}
|
|
71
72
|
headers = {
|
|
72
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
73
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
74
|
+
"Chrome/81.0.4044.138 Safari/537.36",
|
|
73
75
|
"Referer": "https://fund.eastmoney.com/fundguzhi.html",
|
|
74
76
|
}
|
|
75
77
|
r = requests.get(url, params=params, headers=headers)
|
|
76
78
|
data_text = r.text
|
|
77
|
-
data_json = demjson.decode(data_text[data_text.find("{"): -1])
|
|
79
|
+
data_json = demjson.decode(data_text[data_text.find("{") : -1])
|
|
78
80
|
temp_df = pd.DataFrame(data_json["datas"])
|
|
79
81
|
temp_df = temp_df.iloc[:, 0].str.split(",", expand=True)
|
|
80
82
|
temp_df.reset_index(inplace=True)
|
|
@@ -129,20 +131,20 @@ def fund_open_fund_rank_em(symbol: str = "全部") -> pd.DataFrame:
|
|
|
129
131
|
"手续费",
|
|
130
132
|
]
|
|
131
133
|
]
|
|
132
|
-
temp_df[
|
|
133
|
-
temp_df[
|
|
134
|
-
temp_df[
|
|
135
|
-
temp_df[
|
|
136
|
-
temp_df[
|
|
137
|
-
temp_df[
|
|
138
|
-
temp_df[
|
|
139
|
-
temp_df[
|
|
140
|
-
temp_df[
|
|
141
|
-
temp_df[
|
|
142
|
-
temp_df[
|
|
143
|
-
temp_df[
|
|
144
|
-
temp_df[
|
|
145
|
-
temp_df[
|
|
134
|
+
temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
|
|
135
|
+
temp_df["单位净值"] = pd.to_numeric(temp_df["单位净值"], errors="coerce")
|
|
136
|
+
temp_df["累计净值"] = pd.to_numeric(temp_df["累计净值"], errors="coerce")
|
|
137
|
+
temp_df["日增长率"] = pd.to_numeric(temp_df["日增长率"], errors="coerce")
|
|
138
|
+
temp_df["近1周"] = pd.to_numeric(temp_df["近1周"], errors="coerce")
|
|
139
|
+
temp_df["近1月"] = pd.to_numeric(temp_df["近1月"], errors="coerce")
|
|
140
|
+
temp_df["近3月"] = pd.to_numeric(temp_df["近3月"], errors="coerce")
|
|
141
|
+
temp_df["近6月"] = pd.to_numeric(temp_df["近6月"], errors="coerce")
|
|
142
|
+
temp_df["近1年"] = pd.to_numeric(temp_df["近1年"], errors="coerce")
|
|
143
|
+
temp_df["近2年"] = pd.to_numeric(temp_df["近2年"], errors="coerce")
|
|
144
|
+
temp_df["近3年"] = pd.to_numeric(temp_df["近3年"], errors="coerce")
|
|
145
|
+
temp_df["今年来"] = pd.to_numeric(temp_df["今年来"], errors="coerce")
|
|
146
|
+
temp_df["成立来"] = pd.to_numeric(temp_df["成立来"], errors="coerce")
|
|
147
|
+
temp_df["自定义"] = pd.to_numeric(temp_df["自定义"], errors="coerce")
|
|
146
148
|
return temp_df
|
|
147
149
|
|
|
148
150
|
|
|
@@ -163,16 +165,17 @@ def fund_exchange_rank_em() -> pd.DataFrame:
|
|
|
163
165
|
"sc": "1nzf",
|
|
164
166
|
"st": "desc",
|
|
165
167
|
"pi": "1",
|
|
166
|
-
"pn": "
|
|
168
|
+
"pn": "30000",
|
|
167
169
|
"v": "0.1591891419018292",
|
|
168
170
|
}
|
|
169
171
|
headers = {
|
|
170
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
172
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
173
|
+
"Chrome/81.0.4044.138 Safari/537.36",
|
|
171
174
|
"Referer": "https://fund.eastmoney.com/fundguzhi.html",
|
|
172
175
|
}
|
|
173
176
|
r = requests.get(url, params=params, headers=headers)
|
|
174
177
|
text_data = r.text
|
|
175
|
-
json_data = demjson.decode(text_data[text_data.find("{"): -1])
|
|
178
|
+
json_data = demjson.decode(text_data[text_data.find("{") : -1])
|
|
176
179
|
temp_df = pd.DataFrame(json_data["datas"])
|
|
177
180
|
temp_df = temp_df.iloc[:, 0].str.split(",", expand=True)
|
|
178
181
|
temp_df.reset_index(inplace=True)
|
|
@@ -224,19 +227,19 @@ def fund_exchange_rank_em() -> pd.DataFrame:
|
|
|
224
227
|
"成立日期",
|
|
225
228
|
]
|
|
226
229
|
]
|
|
227
|
-
temp_df[
|
|
228
|
-
temp_df[
|
|
229
|
-
temp_df[
|
|
230
|
-
temp_df[
|
|
231
|
-
temp_df[
|
|
232
|
-
temp_df[
|
|
233
|
-
temp_df[
|
|
234
|
-
temp_df[
|
|
235
|
-
temp_df[
|
|
236
|
-
temp_df[
|
|
237
|
-
temp_df[
|
|
238
|
-
temp_df[
|
|
239
|
-
temp_df[
|
|
230
|
+
temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
|
|
231
|
+
temp_df["成立日期"] = pd.to_datetime(temp_df["成立日期"]).dt.date
|
|
232
|
+
temp_df["单位净值"] = pd.to_numeric(temp_df["单位净值"], errors="coerce")
|
|
233
|
+
temp_df["累计净值"] = pd.to_numeric(temp_df["累计净值"], errors="coerce")
|
|
234
|
+
temp_df["近1周"] = pd.to_numeric(temp_df["近1周"], errors="coerce")
|
|
235
|
+
temp_df["近1月"] = pd.to_numeric(temp_df["近1月"], errors="coerce")
|
|
236
|
+
temp_df["近3月"] = pd.to_numeric(temp_df["近3月"], errors="coerce")
|
|
237
|
+
temp_df["近6月"] = pd.to_numeric(temp_df["近6月"], errors="coerce")
|
|
238
|
+
temp_df["近1年"] = pd.to_numeric(temp_df["近1年"], errors="coerce")
|
|
239
|
+
temp_df["近2年"] = pd.to_numeric(temp_df["近2年"], errors="coerce")
|
|
240
|
+
temp_df["近3年"] = pd.to_numeric(temp_df["近3年"], errors="coerce")
|
|
241
|
+
temp_df["今年来"] = pd.to_numeric(temp_df["今年来"], errors="coerce")
|
|
242
|
+
temp_df["成立来"] = pd.to_numeric(temp_df["成立来"], errors="coerce")
|
|
240
243
|
return temp_df
|
|
241
244
|
|
|
242
245
|
|
|
@@ -256,10 +259,10 @@ def fund_money_rank_em() -> pd.DataFrame:
|
|
|
256
259
|
"orderType": "desc",
|
|
257
260
|
"pageIndex": "1",
|
|
258
261
|
"pageSize": "10000",
|
|
259
|
-
"_": "1603867224251",
|
|
260
262
|
}
|
|
261
263
|
headers = {
|
|
262
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
264
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
265
|
+
"Chrome/81.0.4044.138 Safari/537.36",
|
|
263
266
|
"Referer": "https://fund.eastmoney.com/fundguzhi.html",
|
|
264
267
|
}
|
|
265
268
|
r = requests.get(url, params=params, headers=headers)
|
|
@@ -319,20 +322,24 @@ def fund_money_rank_em() -> pd.DataFrame:
|
|
|
319
322
|
"手续费",
|
|
320
323
|
]
|
|
321
324
|
]
|
|
322
|
-
temp_df[
|
|
323
|
-
temp_df[
|
|
324
|
-
temp_df[
|
|
325
|
-
temp_df[
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
temp_df[
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
temp_df[
|
|
332
|
-
temp_df[
|
|
333
|
-
temp_df[
|
|
334
|
-
temp_df[
|
|
335
|
-
temp_df[
|
|
325
|
+
temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
|
|
326
|
+
temp_df["万份收益"] = pd.to_numeric(temp_df["万份收益"], errors="coerce")
|
|
327
|
+
temp_df["年化收益率7日"] = pd.to_numeric(temp_df["年化收益率7日"], errors="coerce")
|
|
328
|
+
temp_df["年化收益率14日"] = pd.to_numeric(
|
|
329
|
+
temp_df["年化收益率14日"], errors="coerce"
|
|
330
|
+
)
|
|
331
|
+
temp_df["年化收益率28日"] = pd.to_numeric(
|
|
332
|
+
temp_df["年化收益率28日"], errors="coerce"
|
|
333
|
+
)
|
|
334
|
+
temp_df["近1月"] = pd.to_numeric(temp_df["近1月"], errors="coerce")
|
|
335
|
+
temp_df["近3月"] = pd.to_numeric(temp_df["近3月"], errors="coerce")
|
|
336
|
+
temp_df["近6月"] = pd.to_numeric(temp_df["近6月"], errors="coerce")
|
|
337
|
+
temp_df["近1年"] = pd.to_numeric(temp_df["近1年"], errors="coerce")
|
|
338
|
+
temp_df["近2年"] = pd.to_numeric(temp_df["近2年"], errors="coerce")
|
|
339
|
+
temp_df["近3年"] = pd.to_numeric(temp_df["近3年"], errors="coerce")
|
|
340
|
+
temp_df["近5年"] = pd.to_numeric(temp_df["近5年"], errors="coerce")
|
|
341
|
+
temp_df["今年来"] = pd.to_numeric(temp_df["今年来"], errors="coerce")
|
|
342
|
+
temp_df["成立来"] = pd.to_numeric(temp_df["成立来"], errors="coerce")
|
|
336
343
|
return temp_df
|
|
337
344
|
|
|
338
345
|
|
|
@@ -355,16 +362,16 @@ def fund_lcx_rank_em() -> pd.DataFrame:
|
|
|
355
362
|
"pageSize": "50",
|
|
356
363
|
"FBQ": "",
|
|
357
364
|
"callback": "jQuery18303264654966943197_1603867158043",
|
|
358
|
-
"_": "1603867224251",
|
|
359
365
|
}
|
|
360
366
|
headers = {
|
|
361
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
367
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
368
|
+
"Chrome/81.0.4044.138 Safari/537.36",
|
|
362
369
|
"Referer": "https://fund.eastmoney.com/fundguzhi.html",
|
|
363
370
|
}
|
|
364
371
|
r = requests.get(url, params=params, headers=headers)
|
|
365
372
|
try:
|
|
366
373
|
data_json = r.json()
|
|
367
|
-
except:
|
|
374
|
+
except: # noqa: E722
|
|
368
375
|
return pd.DataFrame()
|
|
369
376
|
temp_df = pd.DataFrame(data_json["Data"])
|
|
370
377
|
temp_df.reset_index(inplace=True)
|
|
@@ -427,21 +434,21 @@ def fund_hk_rank_em() -> pd.DataFrame:
|
|
|
427
434
|
format_date = datetime.now().date().isoformat()
|
|
428
435
|
url = "https://overseas.1234567.com.cn/overseasapi/OpenApiHander.ashx"
|
|
429
436
|
params = {
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
'_': '1610790553848',
|
|
437
|
+
"api": "HKFDApi",
|
|
438
|
+
"m": "MethodFundList",
|
|
439
|
+
"action": "1",
|
|
440
|
+
"pageindex": "0",
|
|
441
|
+
"pagesize": "5000",
|
|
442
|
+
"dy": "1",
|
|
443
|
+
"date1": format_date,
|
|
444
|
+
"date2": format_date,
|
|
445
|
+
"sortfield": "Y",
|
|
446
|
+
"sorttype": "-1",
|
|
447
|
+
"isbuy": "0",
|
|
442
448
|
}
|
|
443
449
|
headers = {
|
|
444
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
450
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
451
|
+
"Chrome/81.0.4044.138 Safari/537.36",
|
|
445
452
|
"Referer": "https://fund.eastmoney.com/fundguzhi.html",
|
|
446
453
|
}
|
|
447
454
|
r = requests.get(url, params=params, headers=headers)
|
|
@@ -494,20 +501,22 @@ def fund_hk_rank_em() -> pd.DataFrame:
|
|
|
494
501
|
"香港基金代码",
|
|
495
502
|
]
|
|
496
503
|
]
|
|
497
|
-
temp_df[
|
|
498
|
-
temp_df[
|
|
499
|
-
temp_df[
|
|
500
|
-
temp_df[
|
|
501
|
-
temp_df[
|
|
502
|
-
temp_df[
|
|
503
|
-
temp_df[
|
|
504
|
-
temp_df[
|
|
505
|
-
temp_df[
|
|
506
|
-
temp_df[
|
|
507
|
-
temp_df[
|
|
508
|
-
temp_df[
|
|
509
|
-
temp_df[
|
|
510
|
-
temp_df[
|
|
504
|
+
temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
|
|
505
|
+
temp_df["单位净值"] = pd.to_numeric(temp_df["单位净值"], errors="coerce")
|
|
506
|
+
temp_df["日增长率"] = pd.to_numeric(temp_df["日增长率"], errors="coerce")
|
|
507
|
+
temp_df["近1周"] = pd.to_numeric(temp_df["近1周"], errors="coerce")
|
|
508
|
+
temp_df["近1月"] = pd.to_numeric(temp_df["近1月"], errors="coerce")
|
|
509
|
+
temp_df["近3月"] = pd.to_numeric(temp_df["近3月"], errors="coerce")
|
|
510
|
+
temp_df["近6月"] = pd.to_numeric(temp_df["近6月"], errors="coerce")
|
|
511
|
+
temp_df["近1年"] = pd.to_numeric(temp_df["近1年"], errors="coerce")
|
|
512
|
+
temp_df["近2年"] = pd.to_numeric(temp_df["近2年"], errors="coerce")
|
|
513
|
+
temp_df["近3年"] = pd.to_numeric(temp_df["近3年"], errors="coerce")
|
|
514
|
+
temp_df["今年来"] = pd.to_numeric(temp_df["今年来"], errors="coerce")
|
|
515
|
+
temp_df["成立来"] = pd.to_numeric(temp_df["成立来"], errors="coerce")
|
|
516
|
+
temp_df["成立来"] = pd.to_numeric(temp_df["成立来"], errors="coerce")
|
|
517
|
+
temp_df["可购买"] = temp_df["可购买"].map(
|
|
518
|
+
lambda x: "可购买" if x == "1" else "不可购买"
|
|
519
|
+
)
|
|
511
520
|
return temp_df
|
|
512
521
|
|
|
513
522
|
|
|
@@ -530,9 +539,6 @@ if __name__ == "__main__":
|
|
|
530
539
|
fund_open_fund_rank_em_df = fund_open_fund_rank_em(symbol="QDII")
|
|
531
540
|
print(fund_open_fund_rank_em_df)
|
|
532
541
|
|
|
533
|
-
fund_open_fund_rank_em_df = fund_open_fund_rank_em(symbol="LOF")
|
|
534
|
-
print(fund_open_fund_rank_em_df)
|
|
535
|
-
|
|
536
542
|
fund_open_fund_rank_em_df = fund_open_fund_rank_em(symbol="FOF")
|
|
537
543
|
print(fund_open_fund_rank_em_df)
|
|
538
544
|
|
akshare/fund/fund_rating.py
CHANGED
|
@@ -5,6 +5,7 @@ Date: 2023/12/12 16:30
|
|
|
5
5
|
Desc: 基金评级
|
|
6
6
|
https://fund.eastmoney.com/data/fundrating.html
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
import pandas as pd
|
|
9
10
|
import requests
|
|
10
11
|
from bs4 import BeautifulSoup
|
|
@@ -19,8 +20,8 @@ def fund_rating_all() -> pd.DataFrame:
|
|
|
19
20
|
"""
|
|
20
21
|
url = "https://fund.eastmoney.com/data/fundrating.html"
|
|
21
22
|
r = requests.get(url)
|
|
22
|
-
soup = BeautifulSoup(r.text, "lxml")
|
|
23
|
-
data_text = soup.find("div", attrs={"id": "fundinfo"}).find("script").string
|
|
23
|
+
soup = BeautifulSoup(r.text, features="lxml")
|
|
24
|
+
data_text = soup.find(name="div", attrs={"id": "fundinfo"}).find("script").string
|
|
24
25
|
data_content = [
|
|
25
26
|
item.split("|")
|
|
26
27
|
for item in data_text.split("var")[6]
|
|
@@ -47,7 +48,7 @@ def fund_rating_all() -> pd.DataFrame:
|
|
|
47
48
|
"-",
|
|
48
49
|
"上海证券",
|
|
49
50
|
"-",
|
|
50
|
-
"
|
|
51
|
+
"晨星评级",
|
|
51
52
|
"-",
|
|
52
53
|
"济安金信",
|
|
53
54
|
"-",
|
|
@@ -71,6 +72,7 @@ def fund_rating_all() -> pd.DataFrame:
|
|
|
71
72
|
"上海证券",
|
|
72
73
|
"招商证券",
|
|
73
74
|
"济安金信",
|
|
75
|
+
"晨星评级",
|
|
74
76
|
"手续费",
|
|
75
77
|
"类型",
|
|
76
78
|
]
|
|
@@ -79,7 +81,10 @@ def fund_rating_all() -> pd.DataFrame:
|
|
|
79
81
|
temp_df["上海证券"] = pd.to_numeric(temp_df["上海证券"], errors="coerce")
|
|
80
82
|
temp_df["招商证券"] = pd.to_numeric(temp_df["招商证券"], errors="coerce")
|
|
81
83
|
temp_df["济安金信"] = pd.to_numeric(temp_df["济安金信"], errors="coerce")
|
|
82
|
-
temp_df["
|
|
84
|
+
temp_df["晨星评级"] = pd.to_numeric(temp_df["晨星评级"], errors="coerce")
|
|
85
|
+
temp_df["手续费"] = (
|
|
86
|
+
pd.to_numeric(temp_df["手续费"].str.strip("%"), errors="coerce") / 100
|
|
87
|
+
)
|
|
83
88
|
return temp_df
|
|
84
89
|
|
|
85
90
|
|
|
@@ -161,10 +166,18 @@ def fund_rating_sh(date: str = "20230630") -> pd.DataFrame:
|
|
|
161
166
|
]
|
|
162
167
|
]
|
|
163
168
|
temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
|
|
164
|
-
temp_df["3年期评级-3年评级"] = pd.to_numeric(
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
temp_df["
|
|
169
|
+
temp_df["3年期评级-3年评级"] = pd.to_numeric(
|
|
170
|
+
temp_df["3年期评级-3年评级"], errors="coerce"
|
|
171
|
+
)
|
|
172
|
+
temp_df["3年期评级-较上期"] = pd.to_numeric(
|
|
173
|
+
temp_df["3年期评级-较上期"], errors="coerce"
|
|
174
|
+
)
|
|
175
|
+
temp_df["5年期评级-5年评级"] = pd.to_numeric(
|
|
176
|
+
temp_df["5年期评级-5年评级"], errors="coerce"
|
|
177
|
+
)
|
|
178
|
+
temp_df["5年期评级-较上期"] = pd.to_numeric(
|
|
179
|
+
temp_df["5年期评级-较上期"], errors="coerce"
|
|
180
|
+
)
|
|
168
181
|
temp_df["单位净值"] = pd.to_numeric(temp_df["单位净值"], errors="coerce")
|
|
169
182
|
temp_df["日增长率"] = pd.to_numeric(temp_df["日增长率"], errors="coerce")
|
|
170
183
|
temp_df["近1年涨幅"] = pd.to_numeric(temp_df["近1年涨幅"], errors="coerce")
|
|
@@ -246,8 +259,12 @@ def fund_rating_zs(date: str = "20230331") -> pd.DataFrame:
|
|
|
246
259
|
]
|
|
247
260
|
]
|
|
248
261
|
temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
|
|
249
|
-
temp_df["3年期评级-3年评级"] = pd.to_numeric(
|
|
250
|
-
|
|
262
|
+
temp_df["3年期评级-3年评级"] = pd.to_numeric(
|
|
263
|
+
temp_df["3年期评级-3年评级"], errors="coerce"
|
|
264
|
+
)
|
|
265
|
+
temp_df["3年期评级-较上期"] = pd.to_numeric(
|
|
266
|
+
temp_df["3年期评级-较上期"], errors="coerce"
|
|
267
|
+
)
|
|
251
268
|
temp_df["单位净值"] = pd.to_numeric(temp_df["单位净值"], errors="coerce")
|
|
252
269
|
temp_df["日增长率"] = pd.to_numeric(temp_df["日增长率"], errors="coerce")
|
|
253
270
|
temp_df["近1年涨幅"] = pd.to_numeric(temp_df["近1年涨幅"], errors="coerce")
|
|
@@ -330,8 +347,12 @@ def fund_rating_ja(date: str = "20230331") -> pd.DataFrame:
|
|
|
330
347
|
]
|
|
331
348
|
]
|
|
332
349
|
temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
|
|
333
|
-
temp_df["3年期评级-3年评级"] = pd.to_numeric(
|
|
334
|
-
|
|
350
|
+
temp_df["3年期评级-3年评级"] = pd.to_numeric(
|
|
351
|
+
temp_df["3年期评级-3年评级"], errors="coerce"
|
|
352
|
+
)
|
|
353
|
+
temp_df["3年期评级-较上期"] = pd.to_numeric(
|
|
354
|
+
temp_df["3年期评级-较上期"], errors="coerce"
|
|
355
|
+
)
|
|
335
356
|
temp_df["单位净值"] = pd.to_numeric(temp_df["单位净值"], errors="coerce")
|
|
336
357
|
temp_df["日增长率"] = pd.to_numeric(temp_df["日增长率"], errors="coerce")
|
|
337
358
|
temp_df["近1年涨幅"] = pd.to_numeric(temp_df["近1年涨幅"], errors="coerce")
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
# -*- coding:utf-8 -*-
|
|
2
2
|
# !/usr/bin/env python
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2024/7/24 23:30
|
|
5
5
|
Desc: 巨潮资讯-数据中心-专题统计-基金报表
|
|
6
|
-
|
|
6
|
+
https://webapi.cninfo.com.cn/#/thematicStatistics
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
import pandas as pd
|
|
10
|
+
import py_mini_racer
|
|
9
11
|
import requests
|
|
10
|
-
from py_mini_racer import py_mini_racer
|
|
11
12
|
|
|
12
13
|
from akshare.datasets import get_ths_js
|
|
13
14
|
|
|
@@ -21,7 +22,7 @@ def _get_file_content_cninfo(file: str = "cninfo.js") -> str:
|
|
|
21
22
|
:rtype: str
|
|
22
23
|
"""
|
|
23
24
|
setting_file_path = get_ths_js(file)
|
|
24
|
-
with open(setting_file_path) as f:
|
|
25
|
+
with open(setting_file_path, encoding="utf-8") as f:
|
|
25
26
|
file_data = f.read()
|
|
26
27
|
return file_data
|
|
27
28
|
|
|
@@ -29,13 +30,13 @@ def _get_file_content_cninfo(file: str = "cninfo.js") -> str:
|
|
|
29
30
|
def fund_report_stock_cninfo(date: str = "20210630") -> pd.DataFrame:
|
|
30
31
|
"""
|
|
31
32
|
巨潮资讯-数据中心-专题统计-基金报表-基金重仓股
|
|
32
|
-
|
|
33
|
+
https://webapi.cninfo.com.cn/#/thematicStatistics
|
|
33
34
|
:param date: 报告时间; choice of {"XXXX0331", "XXXX0630", "XXXX0930", "XXXX1231"}
|
|
34
35
|
:type date: str
|
|
35
36
|
:return: 基金重仓股
|
|
36
37
|
:rtype: pandas.DataFrame
|
|
37
38
|
"""
|
|
38
|
-
url = "
|
|
39
|
+
url = "https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1112"
|
|
39
40
|
js_code = py_mini_racer.MiniRacer()
|
|
40
41
|
js_content = _get_file_content_cninfo("cninfo.js")
|
|
41
42
|
js_code.eval(js_content)
|
|
@@ -48,11 +49,12 @@ def fund_report_stock_cninfo(date: str = "20210630") -> pd.DataFrame:
|
|
|
48
49
|
"Cache-Control": "no-cache",
|
|
49
50
|
"Content-Length": "0",
|
|
50
51
|
"Host": "webapi.cninfo.com.cn",
|
|
51
|
-
"Origin": "
|
|
52
|
+
"Origin": "https://webapi.cninfo.com.cn",
|
|
52
53
|
"Pragma": "no-cache",
|
|
53
54
|
"Proxy-Connection": "keep-alive",
|
|
54
|
-
"Referer": "
|
|
55
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
55
|
+
"Referer": "https://webapi.cninfo.com.cn/",
|
|
56
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
57
|
+
"Chrome/93.0.4577.63 Safari/537.36",
|
|
56
58
|
"X-Requested-With": "XMLHttpRequest",
|
|
57
59
|
}
|
|
58
60
|
params = {
|
|
@@ -88,19 +90,20 @@ def fund_report_stock_cninfo(date: str = "20210630") -> pd.DataFrame:
|
|
|
88
90
|
temp_df["持股总数"] = pd.to_numeric(temp_df["持股总数"], errors="coerce")
|
|
89
91
|
temp_df["持股总市值"] = pd.to_numeric(temp_df["持股总市值"], errors="coerce")
|
|
90
92
|
temp_df["基金覆盖家数"] = pd.to_numeric(temp_df["基金覆盖家数"], errors="coerce")
|
|
93
|
+
temp_df["序号"] = range(1, len(temp_df) + 1)
|
|
91
94
|
return temp_df
|
|
92
95
|
|
|
93
96
|
|
|
94
97
|
def fund_report_industry_allocation_cninfo(date: str = "20210630") -> pd.DataFrame:
|
|
95
98
|
"""
|
|
96
99
|
巨潮资讯-数据中心-专题统计-基金报表-基金行业配置
|
|
97
|
-
|
|
100
|
+
https://webapi.cninfo.com.cn/#/thematicStatistics
|
|
98
101
|
:param date: 报告时间; choice of {"XXXX0331", "XXXX0630", "XXXX0930", "XXXX1231"}, 从 2017 年开始
|
|
99
102
|
:type date: str
|
|
100
103
|
:return: 基金行业配置
|
|
101
104
|
:rtype: pandas.DataFrame
|
|
102
105
|
"""
|
|
103
|
-
url = "
|
|
106
|
+
url = "https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1113"
|
|
104
107
|
js_code = py_mini_racer.MiniRacer()
|
|
105
108
|
js_content = _get_file_content_cninfo("cninfo.js")
|
|
106
109
|
js_code.eval(js_content)
|
|
@@ -113,11 +116,12 @@ def fund_report_industry_allocation_cninfo(date: str = "20210630") -> pd.DataFra
|
|
|
113
116
|
"Cache-Control": "no-cache",
|
|
114
117
|
"Content-Length": "0",
|
|
115
118
|
"Host": "webapi.cninfo.com.cn",
|
|
116
|
-
"Origin": "
|
|
119
|
+
"Origin": "https://webapi.cninfo.com.cn",
|
|
117
120
|
"Pragma": "no-cache",
|
|
118
121
|
"Proxy-Connection": "keep-alive",
|
|
119
|
-
"Referer": "
|
|
120
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
122
|
+
"Referer": "https://webapi.cninfo.com.cn/",
|
|
123
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
124
|
+
"Chrome/93.0.4577.63 Safari/537.36",
|
|
121
125
|
"X-Requested-With": "XMLHttpRequest",
|
|
122
126
|
}
|
|
123
127
|
params = {
|
|
@@ -128,23 +132,23 @@ def fund_report_industry_allocation_cninfo(date: str = "20210630") -> pd.DataFra
|
|
|
128
132
|
temp_df = pd.DataFrame(data_json["records"])
|
|
129
133
|
temp_df.rename(
|
|
130
134
|
columns={
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
135
|
+
"F004N": "行业规模",
|
|
136
|
+
"F003N": "基金覆盖家数",
|
|
137
|
+
"F002V": "证监会行业名称",
|
|
138
|
+
"F001V": "行业编码",
|
|
139
|
+
"ENDDATE": "报告期",
|
|
140
|
+
"F005N": "占净资产比例",
|
|
137
141
|
},
|
|
138
142
|
inplace=True,
|
|
139
143
|
)
|
|
140
144
|
temp_df = temp_df[
|
|
141
145
|
[
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
146
|
+
"行业编码",
|
|
147
|
+
"证监会行业名称",
|
|
148
|
+
"报告期",
|
|
149
|
+
"基金覆盖家数",
|
|
150
|
+
"行业规模",
|
|
151
|
+
"占净资产比例",
|
|
148
152
|
]
|
|
149
153
|
]
|
|
150
154
|
temp_df["报告期"] = pd.to_datetime(temp_df["报告期"], errors="coerce").dt.date
|
|
@@ -157,11 +161,11 @@ def fund_report_industry_allocation_cninfo(date: str = "20210630") -> pd.DataFra
|
|
|
157
161
|
def fund_report_asset_allocation_cninfo() -> pd.DataFrame:
|
|
158
162
|
"""
|
|
159
163
|
巨潮资讯-数据中心-专题统计-基金报表-基金资产配置
|
|
160
|
-
|
|
164
|
+
https://webapi.cninfo.com.cn/#/thematicStatistics
|
|
161
165
|
:return: 基金资产配置
|
|
162
166
|
:rtype: pandas.DataFrame
|
|
163
167
|
"""
|
|
164
|
-
url = "
|
|
168
|
+
url = "https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1114"
|
|
165
169
|
js_code = py_mini_racer.MiniRacer()
|
|
166
170
|
js_content = _get_file_content_cninfo("cninfo.js")
|
|
167
171
|
js_code.eval(js_content)
|
|
@@ -174,11 +178,12 @@ def fund_report_asset_allocation_cninfo() -> pd.DataFrame:
|
|
|
174
178
|
"Cache-Control": "no-cache",
|
|
175
179
|
"Content-Length": "0",
|
|
176
180
|
"Host": "webapi.cninfo.com.cn",
|
|
177
|
-
"Origin": "
|
|
181
|
+
"Origin": "https://webapi.cninfo.com.cn",
|
|
178
182
|
"Pragma": "no-cache",
|
|
179
183
|
"Proxy-Connection": "keep-alive",
|
|
180
|
-
"Referer": "
|
|
181
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
184
|
+
"Referer": "https://webapi.cninfo.com.cn/",
|
|
185
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
186
|
+
"Chrome/93.0.4577.63 Safari/537.36",
|
|
182
187
|
"X-Requested-With": "XMLHttpRequest",
|
|
183
188
|
}
|
|
184
189
|
r = requests.post(url, headers=headers)
|
|
@@ -186,31 +191,39 @@ def fund_report_asset_allocation_cninfo() -> pd.DataFrame:
|
|
|
186
191
|
temp_df = pd.DataFrame(data_json["records"])
|
|
187
192
|
temp_df.rename(
|
|
188
193
|
columns={
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
194
|
+
"F001N": "基金覆盖家数",
|
|
195
|
+
"F008N": "现金货币类占净资产比例",
|
|
196
|
+
"F007N": "债券固定收益类占净资产比例",
|
|
197
|
+
"F006N": "股票权益类占净资产比例",
|
|
198
|
+
"ENDDATE": "报告期",
|
|
199
|
+
"F005N": "基金市场净资产规模",
|
|
195
200
|
},
|
|
196
201
|
inplace=True,
|
|
197
202
|
)
|
|
198
203
|
temp_df = temp_df[
|
|
199
204
|
[
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
205
|
+
"报告期",
|
|
206
|
+
"基金覆盖家数",
|
|
207
|
+
"股票权益类占净资产比例",
|
|
208
|
+
"债券固定收益类占净资产比例",
|
|
209
|
+
"现金货币类占净资产比例",
|
|
210
|
+
"基金市场净资产规模",
|
|
206
211
|
]
|
|
207
212
|
]
|
|
208
213
|
temp_df["报告期"] = pd.to_datetime(temp_df["报告期"], errors="coerce").dt.date
|
|
209
214
|
temp_df["基金覆盖家数"] = pd.to_numeric(temp_df["基金覆盖家数"], errors="coerce")
|
|
210
|
-
temp_df["股票权益类占净资产比例"] = pd.to_numeric(
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
temp_df["
|
|
215
|
+
temp_df["股票权益类占净资产比例"] = pd.to_numeric(
|
|
216
|
+
temp_df["股票权益类占净资产比例"], errors="coerce"
|
|
217
|
+
)
|
|
218
|
+
temp_df["债券固定收益类占净资产比例"] = pd.to_numeric(
|
|
219
|
+
temp_df["债券固定收益类占净资产比例"], errors="coerce"
|
|
220
|
+
)
|
|
221
|
+
temp_df["现金货币类占净资产比例"] = pd.to_numeric(
|
|
222
|
+
temp_df["现金货币类占净资产比例"], errors="coerce"
|
|
223
|
+
)
|
|
224
|
+
temp_df["基金市场净资产规模"] = pd.to_numeric(
|
|
225
|
+
temp_df["基金市场净资产规模"], errors="coerce"
|
|
226
|
+
)
|
|
214
227
|
return temp_df
|
|
215
228
|
|
|
216
229
|
|
|
@@ -218,7 +231,9 @@ if __name__ == "__main__":
|
|
|
218
231
|
fund_report_stock_cninfo_df = fund_report_stock_cninfo(date="20210630")
|
|
219
232
|
print(fund_report_stock_cninfo_df)
|
|
220
233
|
|
|
221
|
-
fund_report_industry_allocation_cninfo_df = fund_report_industry_allocation_cninfo(
|
|
234
|
+
fund_report_industry_allocation_cninfo_df = fund_report_industry_allocation_cninfo(
|
|
235
|
+
date="20210930"
|
|
236
|
+
)
|
|
222
237
|
print(fund_report_industry_allocation_cninfo_df)
|
|
223
238
|
|
|
224
239
|
fund_report_asset_allocation_cninfo_df = fund_report_asset_allocation_cninfo()
|