akshare 1.13.46__py3-none-any.whl → 1.17.99__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- akshare/__init__.py +757 -161
- akshare/air/air_hebei.py +79 -53
- akshare/air/air_zhenqi.py +3 -7
- akshare/air/cons.py +1 -0
- akshare/air/crypto.js +1 -1
- akshare/air/outcrypto.js +1 -1
- akshare/air/sunrise_tad.py +32 -17
- akshare/article/cons.py +1 -0
- akshare/article/epu_index.py +4 -3
- akshare/article/ff_factor.py +19 -8
- akshare/article/fred_md.py +4 -1
- akshare/article/risk_rv.py +3 -8
- akshare/bank/bank_cbirc_2020.py +11 -11
- akshare/bank/cons.py +7 -6
- akshare/bond/bond_buy_back_em.py +228 -0
- akshare/bond/bond_cb_sina.py +1 -0
- akshare/bond/bond_cb_ths.py +17 -9
- akshare/bond/bond_cbond.py +19 -14
- akshare/bond/bond_china.py +38 -39
- akshare/bond/bond_china_money.py +75 -48
- akshare/bond/bond_convert.py +10 -9
- akshare/bond/bond_em.py +37 -17
- akshare/bond/bond_info_cm.py +28 -8
- akshare/bond/bond_issue_cninfo.py +73 -30
- akshare/bond/bond_summary.py +38 -37
- akshare/bond/bond_zh_cov.py +31 -40
- akshare/bond/bond_zh_sina.py +61 -51
- akshare/bond/cons.py +14 -11
- akshare/cal/__init__.py +0 -0
- akshare/cal/rv.py +170 -0
- akshare/cost/cost_living.py +7 -5
- akshare/crypto/__init__.py +1 -1
- akshare/crypto/crypto_bitcoin_cme.py +9 -7
- akshare/crypto/crypto_hold.py +4 -2
- akshare/currency/currency.py +1 -0
- akshare/currency/currency_china_bank_sina.py +11 -6
- akshare/currency/currency_safe.py +7 -6
- akshare/data/__init__.py +1 -1
- akshare/data/cninfo.js +1 -1
- akshare/datasets.py +10 -21
- akshare/economic/cons.py +10 -3
- akshare/economic/macro_australia.py +74 -69
- akshare/economic/macro_bank.py +95 -653
- akshare/economic/macro_canada.py +92 -81
- akshare/economic/macro_china.py +163 -117
- akshare/economic/macro_china_hk.py +0 -1
- akshare/economic/macro_china_nbs.py +24 -7
- akshare/economic/macro_euro.py +103 -56
- akshare/economic/macro_finance_ths.py +135 -0
- akshare/economic/macro_germany.py +1 -1
- akshare/economic/macro_info_ws.py +100 -0
- akshare/economic/macro_japan.py +0 -1
- akshare/economic/macro_other.py +1 -6
- akshare/economic/macro_swiss.py +2 -3
- akshare/economic/macro_uk.py +1 -1
- akshare/economic/macro_usa.py +7 -9
- akshare/economic/marco_cnbs.py +11 -6
- akshare/energy/energy_carbon.py +94 -126
- akshare/energy/energy_oil_em.py +1 -2
- akshare/event/cons.py +1 -0
- akshare/event/migration.py +3 -2
- akshare/exceptions.py +43 -0
- akshare/file_fold/calendar.json +245 -2
- akshare/forex/__init__.py +0 -0
- akshare/forex/cons.py +192 -0
- akshare/forex/forex_em.py +149 -0
- akshare/fortune/fortune_500.py +15 -48
- akshare/fortune/fortune_bloomberg.py +6 -3
- akshare/fortune/fortune_forbes_500.py +3 -6
- akshare/fortune/fortune_hurun.py +2 -1
- akshare/fortune/fortune_xincaifu_500.py +17 -14
- akshare/fund/fund_amac.py +38 -15
- akshare/fund/fund_announcement_em.py +145 -0
- akshare/fund/fund_aum_em.py +49 -35
- akshare/fund/fund_em.py +251 -220
- akshare/fund/fund_etf_em.py +44 -35
- akshare/fund/fund_etf_sina.py +76 -27
- akshare/fund/fund_etf_ths.py +95 -0
- akshare/fund/fund_fee_em.py +172 -0
- akshare/fund/fund_fhsp_em.py +42 -32
- akshare/fund/fund_init_em.py +8 -5
- akshare/fund/fund_lof_em.py +12 -19
- akshare/fund/fund_manager.py +25 -11
- akshare/fund/fund_overview_em.py +42 -0
- akshare/fund/fund_portfolio_em.py +78 -66
- akshare/fund/fund_position_lg.py +19 -8
- akshare/fund/fund_rank_em.py +90 -84
- akshare/fund/fund_rating.py +33 -12
- akshare/fund/fund_report_cninfo.py +63 -48
- akshare/fund/fund_scale_em.py +24 -13
- akshare/fund/fund_scale_sina.py +20 -10
- akshare/fund/fund_xq.py +3 -2
- akshare/futures/cons.py +141 -46
- akshare/futures/cot.py +89 -88
- akshare/futures/futures_basis.py +99 -33
- akshare/futures/futures_comex_em.py +1 -0
- akshare/futures/futures_comm_ctp.py +13 -2
- akshare/futures/futures_contract_detail.py +59 -9
- akshare/futures/futures_daily_bar.py +75 -62
- akshare/futures/futures_foreign.py +14 -8
- akshare/futures/futures_hf_em.py +215 -61
- akshare/futures/futures_hist_em.py +191 -0
- akshare/futures/futures_hq_sina.py +79 -61
- akshare/futures/futures_index_ccidx.py +24 -82
- akshare/futures/futures_inventory_99.py +70 -272
- akshare/futures/futures_inventory_em.py +14 -11
- akshare/futures/futures_news_shmet.py +2 -2
- akshare/futures/futures_roll_yield.py +11 -24
- akshare/futures/futures_rule.py +7 -3
- akshare/futures/futures_rule_em.py +38 -0
- akshare/futures/futures_settlement_price_sgx.py +21 -6
- akshare/futures/futures_stock_js.py +1 -2
- akshare/futures/futures_to_spot.py +43 -39
- akshare/futures/futures_warehouse_receipt.py +53 -48
- akshare/futures/futures_zh_sina.py +4 -4
- akshare/futures/receipt.py +298 -165
- akshare/futures/requests_fun.py +16 -3
- akshare/futures/symbol_var.py +32 -13
- akshare/futures_derivative/cons.py +100 -103
- akshare/futures_derivative/futures_contract_info_cffex.py +55 -39
- akshare/futures_derivative/futures_contract_info_czce.py +2 -0
- akshare/futures_derivative/futures_contract_info_dce.py +43 -17
- akshare/futures_derivative/futures_contract_info_gfex.py +43 -31
- akshare/futures_derivative/futures_contract_info_ine.py +43 -34
- akshare/futures_derivative/futures_contract_info_shfe.py +7 -8
- akshare/futures_derivative/futures_cot_sina.py +28 -19
- akshare/futures_derivative/futures_index_sina.py +25 -13
- akshare/fx/cons.py +12 -7
- akshare/fx/currency_investing.py +19 -285
- akshare/fx/fx_c_swap_cm.py +62 -0
- akshare/fx/fx_quote.py +3 -2
- akshare/fx/fx_quote_baidu.py +2 -1
- akshare/hf/__init__.py +1 -1
- akshare/hf/hf_sp500.py +8 -7
- akshare/index/cons.py +132 -28
- akshare/index/index_cflp.py +29 -26
- akshare/index/index_cni.py +89 -91
- akshare/index/index_cons.py +26 -10
- akshare/index/index_csindex.py +68 -0
- akshare/index/index_cx.py +263 -62
- akshare/index/index_drewry.py +17 -16
- akshare/index/index_eri.py +1 -0
- akshare/index/index_global_em.py +167 -0
- akshare/index/index_global_sina.py +82 -0
- akshare/index/index_kq_fz.py +17 -14
- akshare/index/index_kq_ss.py +1 -0
- akshare/index/index_option_qvix.py +351 -16
- akshare/index/index_research_sw.py +38 -38
- akshare/index/index_spot.py +9 -5
- akshare/index/index_stock_hk.py +6 -10
- akshare/index/index_stock_us_sina.py +1 -1
- akshare/index/index_stock_zh.py +193 -101
- akshare/index/index_stock_zh_csindex.py +15 -369
- akshare/index/index_sugar.py +18 -4
- akshare/index/index_sw.py +62 -34
- akshare/index/index_yw.py +53 -75
- akshare/index/index_zh_em.py +15 -82
- akshare/interest_rate/interbank_rate_em.py +14 -10
- akshare/movie/artist_yien.py +32 -5
- akshare/movie/jm.js +0 -1
- akshare/movie/movie_yien.py +92 -18
- akshare/movie/video_yien.py +28 -5
- akshare/news/__init__.py +1 -1
- akshare/news/news_baidu.py +395 -220
- akshare/news/news_cctv.py +38 -38
- akshare/news/news_stock.py +49 -13
- akshare/nlp/nlp_interface.py +7 -8
- akshare/option/cons.py +12 -12
- akshare/option/option_comm_qihuo.py +86 -0
- akshare/option/option_commodity.py +355 -211
- akshare/option/option_commodity_sina.py +22 -26
- akshare/option/option_contract_info_ctp.py +63 -0
- akshare/option/option_current_sse.py +61 -0
- akshare/option/option_current_szse.py +84 -0
- akshare/option/option_czce.py +37 -9
- akshare/option/option_daily_stats_sse_szse.py +145 -0
- akshare/option/option_em.py +4 -8
- akshare/option/option_finance.py +60 -12
- akshare/option/option_finance_sina.py +28 -26
- akshare/option/option_lhb_em.py +62 -57
- akshare/option/option_margin.py +62 -0
- akshare/option/option_premium_analysis_em.py +58 -53
- akshare/option/option_risk_analysis_em.py +11 -8
- akshare/option/option_risk_indicator_sse.py +18 -16
- akshare/option/option_value_analysis_em.py +62 -55
- akshare/other/__init__.py +1 -1
- akshare/other/other_car_cpca.py +20 -20
- akshare/pro/__init__.py +0 -1
- akshare/pro/client.py +6 -4
- akshare/pro/cons.py +3 -2
- akshare/pro/data_pro.py +6 -5
- akshare/qdii/__init__.py +0 -0
- akshare/qdii/qdii_jsl.py +233 -0
- akshare/qhkc/__init__.py +1 -6
- akshare/qhkc/qhkc_api.py +64 -22
- akshare/qhkc_web/__init__.py +1 -6
- akshare/qhkc_web/qhkc_fund.py +10 -6
- akshare/qhkc_web/qhkc_index.py +28 -14
- akshare/qhkc_web/qhkc_tool.py +62 -59
- akshare/rate/__init__.py +1 -1
- akshare/rate/repo_rate.py +36 -32
- akshare/reits/__init__.py +1 -1
- akshare/reits/reits_basic.py +149 -13
- akshare/request.py +117 -0
- akshare/spot/__init__.py +1 -1
- akshare/spot/spot_hog_soozhu.py +232 -0
- akshare/spot/spot_price_qh.py +121 -0
- akshare/spot/spot_sge.py +70 -9
- akshare/stock/cons.py +60 -23
- akshare/stock/stock_allotment_cninfo.py +10 -9
- akshare/stock/stock_ask_bid_em.py +3 -78
- akshare/stock/stock_board_concept_em.py +160 -35
- akshare/stock/stock_board_industry_em.py +163 -70
- akshare/stock/stock_cg_equity_mortgage.py +15 -11
- akshare/stock/stock_cg_guarantee.py +41 -51
- akshare/stock/stock_cg_lawsuit.py +36 -35
- akshare/stock/stock_dividend_cninfo.py +36 -16
- akshare/stock/stock_dzjy_em.py +347 -260
- akshare/stock/stock_fund_em.py +73 -64
- akshare/stock/stock_fund_hold.py +1 -2
- akshare/stock/stock_gsrl_em.py +1 -0
- akshare/stock/stock_hk_comparison_em.py +175 -0
- akshare/stock/stock_hk_famous.py +107 -0
- akshare/stock/stock_hk_fhpx_ths.py +2 -1
- akshare/stock/stock_hk_hot_rank_em.py +1 -0
- akshare/stock/stock_hk_sina.py +91 -42
- akshare/stock/stock_hold_control_cninfo.py +100 -15
- akshare/stock/stock_hold_control_em.py +4 -5
- akshare/stock/stock_hold_num_cninfo.py +18 -12
- akshare/stock/stock_hot_rank_em.py +4 -1
- akshare/stock/stock_hot_search_baidu.py +32 -19
- akshare/stock/stock_hot_up_em.py +4 -1
- akshare/stock/stock_hsgt_em.py +155 -0
- akshare/stock/stock_industry.py +1 -0
- akshare/stock/stock_industry_cninfo.py +25 -20
- akshare/stock/stock_industry_pe_cninfo.py +45 -31
- akshare/stock/stock_industry_sw.py +5 -9
- akshare/stock/stock_info.py +31 -19
- akshare/stock/stock_info_em.py +17 -11
- akshare/stock/stock_intraday_em.py +9 -80
- akshare/stock/stock_intraday_sina.py +2 -2
- akshare/stock/stock_ipo_summary_cninfo.py +25 -10
- akshare/stock/stock_new_cninfo.py +32 -19
- akshare/stock/stock_news_cx.py +39 -0
- akshare/stock/stock_profile_cninfo.py +9 -8
- akshare/stock/stock_profile_em.py +302 -0
- akshare/stock/stock_rank_forecast.py +8 -6
- akshare/stock/stock_repurchase_em.py +7 -2
- akshare/stock/stock_share_changes_cninfo.py +18 -14
- akshare/stock/stock_share_hold.py +24 -20
- akshare/stock/stock_stop.py +6 -6
- akshare/stock/stock_summary.py +153 -417
- akshare/stock/stock_us_famous.py +19 -11
- akshare/stock/stock_us_js.py +3 -2
- akshare/stock/stock_us_pink.py +38 -27
- akshare/stock/stock_us_sina.py +15 -12
- akshare/stock/stock_weibo_nlp.py +18 -20
- akshare/stock/stock_xq.py +36 -9
- akshare/stock/stock_zh_a_sina.py +58 -80
- akshare/stock/stock_zh_a_special.py +240 -243
- akshare/stock/stock_zh_a_tick_tx.py +11 -3
- akshare/stock/stock_zh_ah_tx.py +23 -26
- akshare/stock/stock_zh_b_sina.py +32 -55
- akshare/stock/stock_zh_comparison_em.py +250 -0
- akshare/stock/stock_zh_kcb_report.py +11 -9
- akshare/stock/stock_zh_kcb_sina.py +67 -64
- akshare/stock_a/__init__.py +0 -0
- akshare/stock_a/stock_board_concept_name_em.py +170 -0
- akshare/stock_a/stock_individual_fund_flow_rank.py +258 -0
- akshare/stock_a/stock_zh_a_spot.py +212 -0
- akshare/stock_feature/cons.py +1 -0
- akshare/stock_feature/stock_a_below_net_asset_statistics.py +5 -2
- akshare/stock_feature/stock_a_high_low.py +5 -2
- akshare/stock_feature/stock_a_indicator.py +15 -57
- akshare/stock_feature/stock_a_pe_and_pb.py +39 -9
- akshare/stock_feature/stock_account_em.py +0 -1
- akshare/stock_feature/stock_all_pb.py +2 -1
- akshare/stock_feature/stock_analyst_em.py +36 -30
- akshare/stock_feature/stock_board_concept_ths.py +144 -252
- akshare/stock_feature/stock_board_industry_ths.py +137 -401
- akshare/stock_feature/stock_buffett_index_lg.py +10 -8
- akshare/stock_feature/stock_classify_sina.py +3 -6
- akshare/stock_feature/stock_comment_em.py +81 -144
- akshare/stock_feature/stock_concept_futu.py +183 -0
- akshare/stock_feature/stock_congestion_lg.py +2 -1
- akshare/stock_feature/stock_cyq_em.py +5 -11
- akshare/stock_feature/stock_disclosure_cninfo.py +20 -10
- akshare/stock_feature/stock_dxsyl_em.py +121 -74
- akshare/stock_feature/stock_ebs_lg.py +5 -4
- akshare/stock_feature/stock_esg_sina.py +33 -15
- akshare/stock_feature/stock_fhps_em.py +62 -26
- akshare/stock_feature/stock_fhps_ths.py +34 -7
- akshare/stock_feature/stock_fund_flow.py +38 -25
- akshare/stock_feature/stock_gddh_em.py +19 -11
- akshare/stock_feature/stock_gdfx_em.py +226 -113
- akshare/stock_feature/stock_gdhs.py +75 -50
- akshare/stock_feature/stock_gdzjc_em.py +21 -10
- akshare/stock_feature/stock_gpzy_em.py +78 -46
- akshare/stock_feature/stock_gxl_lg.py +3 -2
- akshare/stock_feature/stock_hist_em.py +158 -237
- akshare/stock_feature/stock_hist_tx.py +13 -10
- akshare/stock_feature/stock_hk_valuation_baidu.py +20 -8
- akshare/stock_feature/stock_hot_xq.py +4 -6
- akshare/stock_feature/stock_hsgt_em.py +269 -97
- akshare/stock_feature/stock_hsgt_exchange_rate.py +115 -87
- akshare/stock_feature/stock_hsgt_min_em.py +13 -16
- akshare/stock_feature/stock_info.py +8 -81
- akshare/stock_feature/stock_inner_trade_xq.py +38 -31
- akshare/stock_feature/stock_irm_cninfo.py +32 -9
- akshare/stock_feature/stock_jgdy_em.py +43 -40
- akshare/stock_feature/stock_lh_yybpm.py +36 -37
- akshare/stock_feature/stock_lhb_em.py +165 -35
- akshare/stock_feature/stock_lhb_sina.py +93 -46
- akshare/stock_feature/stock_margin_em.py +101 -0
- akshare/stock_feature/{stock_sse_margin.py → stock_margin_sse.py} +21 -17
- akshare/stock_feature/{stock_szse_margin.py → stock_margin_szse.py} +7 -7
- akshare/stock_feature/stock_market_legu.py +4 -2
- akshare/stock_feature/stock_pankou_em.py +71 -35
- akshare/stock_feature/stock_qsjy_em.py +13 -4
- akshare/stock_feature/stock_report_em.py +152 -8
- akshare/stock_feature/stock_research_report_em.py +55 -20
- akshare/stock_feature/stock_sns_sseinfo.py +15 -12
- akshare/stock_feature/stock_sy_em.py +20 -15
- akshare/stock_feature/stock_technology_ths.py +152 -120
- akshare/stock_feature/stock_tfp_em.py +37 -14
- akshare/stock_feature/stock_three_report_em.py +120 -78
- akshare/stock_feature/stock_ttm_lyr.py +18 -9
- akshare/stock_feature/stock_value_em.py +83 -0
- akshare/stock_feature/stock_yjbb_em.py +58 -32
- akshare/stock_feature/stock_yjyg_cninfo.py +6 -2
- akshare/stock_feature/stock_yjyg_em.py +1 -1
- akshare/stock_feature/stock_yzxdr_em.py +24 -22
- akshare/stock_feature/stock_zdhtmx_em.py +20 -6
- akshare/stock_feature/stock_zh_valuation_baidu.py +3 -2
- akshare/stock_feature/stock_zh_vote_baidu.py +4 -1
- akshare/stock_feature/stock_ztb_em.py +39 -24
- akshare/stock_fundamental/__init__.py +1 -1
- akshare/stock_fundamental/stock_basic_info_xq.py +119 -0
- akshare/stock_fundamental/{stock_finance_hk.py → stock_finance_hk_em.py} +23 -16
- akshare/stock_fundamental/{stock_finance.py → stock_finance_sina.py} +203 -59
- akshare/stock_fundamental/stock_finance_ths.py +524 -57
- akshare/stock_fundamental/stock_finance_us_em.py +268 -0
- akshare/stock_fundamental/stock_gbjg_em.py +80 -0
- akshare/stock_fundamental/stock_hold.py +26 -17
- akshare/stock_fundamental/stock_ipo_declare.py +1 -0
- akshare/stock_fundamental/stock_kcb_detail_sse.py +10 -10
- akshare/stock_fundamental/stock_kcb_sse.py +26 -25
- akshare/stock_fundamental/stock_notice.py +41 -18
- akshare/stock_fundamental/stock_profit_forecast_em.py +31 -13
- akshare/stock_fundamental/stock_profit_forecast_hk_etnet.py +64 -41
- akshare/stock_fundamental/stock_profit_forecast_ths.py +86 -35
- akshare/stock_fundamental/stock_recommend.py +20 -4
- akshare/stock_fundamental/stock_register_em.py +448 -0
- akshare/stock_fundamental/stock_zygc.py +5 -62
- akshare/tool/trade_date_hist.py +1 -1
- akshare/utils/context.py +43 -0
- akshare/utils/demjson.py +2009 -1338
- akshare/utils/func.py +49 -2
- akshare/utils/multi_decrypt.py +53 -0
- akshare/utils/token_process.py +6 -5
- akshare/utils/tqdm.py +13 -3
- {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info}/METADATA +56 -86
- akshare-1.17.99.dist-info/RECORD +409 -0
- {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info}/WHEEL +1 -1
- {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info/licenses}/LICENSE +1 -1
- tests/test_func.py +3 -5
- akshare/bond/bond_futures.py +0 -50
- akshare/bond/bond_investing.py +0 -139
- akshare/crypto/crypto_hist_investing.py +0 -249
- akshare/fortune/fortune_it_juzi.py +0 -123
- akshare/fund/fund_announcement.py +0 -56
- akshare/futures/futures_international.py +0 -170
- akshare/futures/futures_news_baidu.py +0 -54
- akshare/futures/inventory_data.py +0 -100
- akshare/futures_derivative/futures_index_price_nh.py +0 -61
- akshare/futures_derivative/futures_index_return_nh.py +0 -47
- akshare/futures_derivative/futures_index_volatility_nh.py +0 -51
- akshare/futures_derivative/futures_other_index_nh.py +0 -145
- akshare/index/index_fear_greed_funddb.py +0 -78
- akshare/index/index_investing.py +0 -232
- akshare/sport/__init__.py +0 -6
- akshare/sport/sport_olympic.py +0 -27
- akshare/sport/sport_olympic_winter.py +0 -39
- akshare/stock_feature/stock_wencai.py +0 -104
- akshare/stock_fundamental/stock_mda_ym.py +0 -40
- akshare/stock_fundamental/stock_register.py +0 -292
- akshare-1.13.46.dist-info/RECORD +0 -380
- {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info}/top_level.txt +0 -0
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
# -*- coding:utf-8 -*-
|
|
2
2
|
# !/usr/bin/env python
|
|
3
3
|
"""
|
|
4
|
-
Date: 2024/
|
|
4
|
+
Date: 2024/9/21 19:00
|
|
5
5
|
Desc: 同花顺-数据中心-技术选股
|
|
6
6
|
https://data.10jqka.com.cn/rank/cxg/
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
from io import StringIO
|
|
9
10
|
|
|
10
11
|
import pandas as pd
|
|
12
|
+
import py_mini_racer
|
|
11
13
|
import requests
|
|
12
14
|
from bs4 import BeautifulSoup
|
|
13
|
-
from py_mini_racer import py_mini_racer
|
|
14
15
|
|
|
15
16
|
from akshare.datasets import get_ths_js
|
|
16
17
|
from akshare.utils.tqdm import get_tqdm
|
|
@@ -25,7 +26,7 @@ def _get_file_content_ths(file: str = "ths.js") -> str:
|
|
|
25
26
|
:rtype: str
|
|
26
27
|
"""
|
|
27
28
|
setting_file_path = get_ths_js(file)
|
|
28
|
-
with open(setting_file_path) as f:
|
|
29
|
+
with open(setting_file_path, encoding="utf-8") as f:
|
|
29
30
|
file_data = f.read()
|
|
30
31
|
return file_data
|
|
31
32
|
|
|
@@ -50,30 +51,38 @@ def stock_rank_cxg_ths(symbol: str = "创月新高") -> pd.DataFrame:
|
|
|
50
51
|
js_code.eval(js_content)
|
|
51
52
|
v_code = js_code.call("v")
|
|
52
53
|
headers = {
|
|
53
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
|
|
54
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
|
|
55
|
+
"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
|
|
54
56
|
"Cookie": f"v={v_code}",
|
|
55
57
|
}
|
|
56
|
-
url =
|
|
58
|
+
url = (
|
|
59
|
+
f"http://data.10jqka.com.cn/rank/cxg/board/{symbol_map[symbol]}/field/"
|
|
60
|
+
f"stockcode/order/asc/page/1/ajax/1/free/1/"
|
|
61
|
+
)
|
|
57
62
|
r = requests.get(url, headers=headers)
|
|
58
|
-
soup = BeautifulSoup(r.text, "lxml")
|
|
63
|
+
soup = BeautifulSoup(r.text, features="lxml")
|
|
59
64
|
try:
|
|
60
|
-
total_page = soup.find(
|
|
61
|
-
"
|
|
62
|
-
)
|
|
63
|
-
except AttributeError
|
|
65
|
+
total_page = soup.find(name="span", attrs={"class": "page_info"}).text.split(
|
|
66
|
+
"/"
|
|
67
|
+
)[1]
|
|
68
|
+
except AttributeError:
|
|
64
69
|
total_page = 1
|
|
65
70
|
big_df = pd.DataFrame()
|
|
66
71
|
tqdm = get_tqdm()
|
|
67
72
|
for page in tqdm(range(1, int(total_page) + 1), leave=False):
|
|
68
73
|
v_code = js_code.call("v")
|
|
69
74
|
headers = {
|
|
70
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
|
|
75
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
|
|
76
|
+
"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
|
|
71
77
|
"Cookie": f"v={v_code}",
|
|
72
78
|
}
|
|
73
|
-
url =
|
|
79
|
+
url = (
|
|
80
|
+
f"http://data.10jqka.com.cn/rank/cxg/board/{symbol_map[symbol]}/field/stockcode/"
|
|
81
|
+
f"order/asc/page/{page}/ajax/1/free/1/"
|
|
82
|
+
)
|
|
74
83
|
r = requests.get(url, headers=headers)
|
|
75
84
|
temp_df = pd.read_html(StringIO(r.text))[0]
|
|
76
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
85
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
77
86
|
big_df.columns = [
|
|
78
87
|
"序号",
|
|
79
88
|
"股票代码",
|
|
@@ -87,7 +96,9 @@ def stock_rank_cxg_ths(symbol: str = "创月新高") -> pd.DataFrame:
|
|
|
87
96
|
big_df["股票代码"] = big_df["股票代码"].astype(str).str.zfill(6)
|
|
88
97
|
big_df["涨跌幅"] = big_df["涨跌幅"].str.strip("%")
|
|
89
98
|
big_df["换手率"] = big_df["换手率"].str.strip("%")
|
|
90
|
-
big_df["前期高点日期"] = pd.to_datetime(
|
|
99
|
+
big_df["前期高点日期"] = pd.to_datetime(
|
|
100
|
+
big_df["前期高点日期"], errors="coerce"
|
|
101
|
+
).dt.date
|
|
91
102
|
big_df["涨跌幅"] = pd.to_numeric(big_df["涨跌幅"], errors="coerce")
|
|
92
103
|
big_df["换手率"] = pd.to_numeric(big_df["换手率"], errors="coerce")
|
|
93
104
|
big_df["最新价"] = pd.to_numeric(big_df["最新价"], errors="coerce")
|
|
@@ -115,30 +126,38 @@ def stock_rank_cxd_ths(symbol: str = "创月新低") -> pd.DataFrame:
|
|
|
115
126
|
js_code.eval(js_content)
|
|
116
127
|
v_code = js_code.call("v")
|
|
117
128
|
headers = {
|
|
118
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
|
|
129
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
|
|
130
|
+
"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
|
|
119
131
|
"Cookie": f"v={v_code}",
|
|
120
132
|
}
|
|
121
|
-
url =
|
|
133
|
+
url = (
|
|
134
|
+
f"http://data.10jqka.com.cn/rank/cxd/board/{symbol_map[symbol]}/field/"
|
|
135
|
+
f"stockcode/order/asc/page/1/ajax/1/free/1/"
|
|
136
|
+
)
|
|
122
137
|
r = requests.get(url, headers=headers)
|
|
123
|
-
soup = BeautifulSoup(r.text, "lxml")
|
|
138
|
+
soup = BeautifulSoup(r.text, features="lxml")
|
|
124
139
|
try:
|
|
125
|
-
total_page = soup.find(
|
|
126
|
-
"
|
|
127
|
-
)
|
|
128
|
-
except AttributeError
|
|
140
|
+
total_page = soup.find(name="span", attrs={"class": "page_info"}).text.split(
|
|
141
|
+
"/"
|
|
142
|
+
)[1]
|
|
143
|
+
except AttributeError:
|
|
129
144
|
total_page = 1
|
|
130
145
|
big_df = pd.DataFrame()
|
|
131
146
|
tqdm = get_tqdm()
|
|
132
147
|
for page in tqdm(range(1, int(total_page) + 1), leave=False):
|
|
133
148
|
v_code = js_code.call("v")
|
|
134
149
|
headers = {
|
|
135
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
|
|
150
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
|
|
151
|
+
"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
|
|
136
152
|
"Cookie": f"v={v_code}",
|
|
137
153
|
}
|
|
138
|
-
url =
|
|
154
|
+
url = (
|
|
155
|
+
f"http://data.10jqka.com.cn/rank/cxd/board/{symbol_map[symbol]}/field/"
|
|
156
|
+
f"stockcode/order/asc/page/{page}/ajax/1/free/1/"
|
|
157
|
+
)
|
|
139
158
|
r = requests.get(url, headers=headers)
|
|
140
159
|
temp_df = pd.read_html(StringIO(r.text))[0]
|
|
141
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
160
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
142
161
|
big_df.columns = [
|
|
143
162
|
"序号",
|
|
144
163
|
"股票代码",
|
|
@@ -152,7 +171,9 @@ def stock_rank_cxd_ths(symbol: str = "创月新低") -> pd.DataFrame:
|
|
|
152
171
|
big_df["股票代码"] = big_df["股票代码"].astype(str).str.zfill(6)
|
|
153
172
|
big_df["涨跌幅"] = big_df["涨跌幅"].str.strip("%")
|
|
154
173
|
big_df["换手率"] = big_df["换手率"].str.strip("%")
|
|
155
|
-
big_df["前期低点日期"] = pd.to_datetime(
|
|
174
|
+
big_df["前期低点日期"] = pd.to_datetime(
|
|
175
|
+
big_df["前期低点日期"], errors="coerce"
|
|
176
|
+
).dt.date
|
|
156
177
|
big_df["涨跌幅"] = pd.to_numeric(big_df["涨跌幅"], errors="coerce")
|
|
157
178
|
big_df["换手率"] = pd.to_numeric(big_df["换手率"], errors="coerce")
|
|
158
179
|
big_df["最新价"] = pd.to_numeric(big_df["最新价"], errors="coerce")
|
|
@@ -172,30 +193,32 @@ def stock_rank_lxsz_ths() -> pd.DataFrame:
|
|
|
172
193
|
js_code.eval(js_content)
|
|
173
194
|
v_code = js_code.call("v")
|
|
174
195
|
headers = {
|
|
175
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
|
|
196
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
|
|
197
|
+
"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
|
|
176
198
|
"Cookie": f"v={v_code}",
|
|
177
199
|
}
|
|
178
|
-
url =
|
|
200
|
+
url = "http://data.10jqka.com.cn/rank/lxsz/field/lxts/order/desc/page/1/ajax/1/free/1/"
|
|
179
201
|
r = requests.get(url, headers=headers)
|
|
180
|
-
soup = BeautifulSoup(r.text, "lxml")
|
|
202
|
+
soup = BeautifulSoup(r.text, features="lxml")
|
|
181
203
|
try:
|
|
182
|
-
total_page = soup.find(
|
|
183
|
-
"
|
|
184
|
-
)
|
|
185
|
-
except AttributeError
|
|
204
|
+
total_page = soup.find(name="span", attrs={"class": "page_info"}).text.split(
|
|
205
|
+
"/"
|
|
206
|
+
)[1]
|
|
207
|
+
except AttributeError:
|
|
186
208
|
total_page = 1
|
|
187
209
|
big_df = pd.DataFrame()
|
|
188
210
|
tqdm = get_tqdm()
|
|
189
211
|
for page in tqdm(range(1, int(total_page) + 1), leave=False):
|
|
190
212
|
v_code = js_code.call("v")
|
|
191
213
|
headers = {
|
|
192
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
|
|
214
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
|
|
215
|
+
"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
|
|
193
216
|
"Cookie": f"v={v_code}",
|
|
194
217
|
}
|
|
195
218
|
url = f"http://data.10jqka.com.cn/rank/lxsz/field/lxts/order/desc/page/{page}/ajax/1/free/1/"
|
|
196
219
|
r = requests.get(url, headers=headers)
|
|
197
220
|
temp_df = pd.read_html(StringIO(r.text), converters={"股票代码": str})[0]
|
|
198
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
221
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
199
222
|
big_df.columns = [
|
|
200
223
|
"序号",
|
|
201
224
|
"股票代码",
|
|
@@ -231,30 +254,32 @@ def stock_rank_lxxd_ths() -> pd.DataFrame:
|
|
|
231
254
|
js_code.eval(js_content)
|
|
232
255
|
v_code = js_code.call("v")
|
|
233
256
|
headers = {
|
|
234
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
|
|
257
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
|
|
258
|
+
"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
|
|
235
259
|
"Cookie": f"v={v_code}",
|
|
236
260
|
}
|
|
237
|
-
url =
|
|
261
|
+
url = "http://data.10jqka.com.cn/rank/lxxd/field/lxts/order/desc/page/1/ajax/1/free/1/"
|
|
238
262
|
r = requests.get(url, headers=headers)
|
|
239
|
-
soup = BeautifulSoup(r.text, "lxml")
|
|
263
|
+
soup = BeautifulSoup(r.text, features="lxml")
|
|
240
264
|
try:
|
|
241
|
-
total_page = soup.find(
|
|
242
|
-
"
|
|
243
|
-
)
|
|
244
|
-
except AttributeError
|
|
265
|
+
total_page = soup.find(name="span", attrs={"class": "page_info"}).text.split(
|
|
266
|
+
"/"
|
|
267
|
+
)[1]
|
|
268
|
+
except AttributeError:
|
|
245
269
|
total_page = 1
|
|
246
270
|
big_df = pd.DataFrame()
|
|
247
271
|
tqdm = get_tqdm()
|
|
248
272
|
for page in tqdm(range(1, int(total_page) + 1), leave=False):
|
|
249
273
|
v_code = js_code.call("v")
|
|
250
274
|
headers = {
|
|
251
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
|
|
275
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
|
|
276
|
+
"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
|
|
252
277
|
"Cookie": f"v={v_code}",
|
|
253
278
|
}
|
|
254
279
|
url = f"http://data.10jqka.com.cn/rank/lxxd/field/lxts/order/desc/page/{page}/ajax/1/free/1/"
|
|
255
280
|
r = requests.get(url, headers=headers)
|
|
256
281
|
temp_df = pd.read_html(StringIO(r.text), converters={"股票代码": str})[0]
|
|
257
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
282
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
258
283
|
big_df.columns = [
|
|
259
284
|
"序号",
|
|
260
285
|
"股票代码",
|
|
@@ -290,30 +315,32 @@ def stock_rank_cxfl_ths() -> pd.DataFrame:
|
|
|
290
315
|
js_code.eval(js_content)
|
|
291
316
|
v_code = js_code.call("v")
|
|
292
317
|
headers = {
|
|
293
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
|
|
318
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
|
|
319
|
+
"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
|
|
294
320
|
"Cookie": f"v={v_code}",
|
|
295
321
|
}
|
|
296
|
-
url =
|
|
322
|
+
url = "http://data.10jqka.com.cn/rank/cxfl/field/count/order/desc/ajax/1/free/1/page/1/free/1/"
|
|
297
323
|
r = requests.get(url, headers=headers)
|
|
298
|
-
soup = BeautifulSoup(r.text, "lxml")
|
|
324
|
+
soup = BeautifulSoup(r.text, features="lxml")
|
|
299
325
|
try:
|
|
300
|
-
total_page = soup.find(
|
|
301
|
-
"
|
|
302
|
-
)
|
|
303
|
-
except AttributeError
|
|
326
|
+
total_page = soup.find(name="span", attrs={"class": "page_info"}).text.split(
|
|
327
|
+
"/"
|
|
328
|
+
)[1]
|
|
329
|
+
except AttributeError:
|
|
304
330
|
total_page = 1
|
|
305
331
|
big_df = pd.DataFrame()
|
|
306
332
|
tqdm = get_tqdm()
|
|
307
333
|
for page in tqdm(range(1, int(total_page) + 1), leave=False):
|
|
308
334
|
v_code = js_code.call("v")
|
|
309
335
|
headers = {
|
|
310
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
|
|
336
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
|
|
337
|
+
"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
|
|
311
338
|
"Cookie": f"v={v_code}",
|
|
312
339
|
}
|
|
313
340
|
url = f"http://data.10jqka.com.cn/rank/cxfl/field/count/order/desc/ajax/1/free/1/page/{page}/free/1/"
|
|
314
341
|
r = requests.get(url, headers=headers)
|
|
315
342
|
temp_df = pd.read_html(StringIO(r.text), converters={"股票代码": str})[0]
|
|
316
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
343
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
317
344
|
big_df.columns = [
|
|
318
345
|
"序号",
|
|
319
346
|
"股票代码",
|
|
@@ -348,30 +375,32 @@ def stock_rank_cxsl_ths() -> pd.DataFrame:
|
|
|
348
375
|
js_code.eval(js_content)
|
|
349
376
|
v_code = js_code.call("v")
|
|
350
377
|
headers = {
|
|
351
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
|
|
378
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
|
|
379
|
+
"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
|
|
352
380
|
"Cookie": f"v={v_code}",
|
|
353
381
|
}
|
|
354
|
-
url =
|
|
382
|
+
url = "http://data.10jqka.com.cn/rank/cxsl/field/count/order/desc/ajax/1/free/1/page/1/free/1/"
|
|
355
383
|
r = requests.get(url, headers=headers)
|
|
356
|
-
soup = BeautifulSoup(r.text, "lxml")
|
|
384
|
+
soup = BeautifulSoup(r.text, features="lxml")
|
|
357
385
|
try:
|
|
358
|
-
total_page = soup.find(
|
|
359
|
-
"
|
|
360
|
-
)
|
|
361
|
-
except AttributeError
|
|
386
|
+
total_page = soup.find(name="span", attrs={"class": "page_info"}).text.split(
|
|
387
|
+
"/"
|
|
388
|
+
)[1]
|
|
389
|
+
except AttributeError:
|
|
362
390
|
total_page = 1
|
|
363
391
|
big_df = pd.DataFrame()
|
|
364
392
|
tqdm = get_tqdm()
|
|
365
393
|
for page in tqdm(range(1, int(total_page) + 1), leave=False):
|
|
366
394
|
v_code = js_code.call("v")
|
|
367
395
|
headers = {
|
|
368
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
|
|
396
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
|
|
397
|
+
"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
|
|
369
398
|
"Cookie": f"v={v_code}",
|
|
370
399
|
}
|
|
371
400
|
url = f"http://data.10jqka.com.cn/rank/cxsl/field/count/order/desc/ajax/1/free/1/page/{page}/free/1/"
|
|
372
401
|
r = requests.get(url, headers=headers)
|
|
373
402
|
temp_df = pd.read_html(StringIO(r.text), converters={"股票代码": str})[0]
|
|
374
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
403
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
375
404
|
big_df.columns = [
|
|
376
405
|
"序号",
|
|
377
406
|
"股票代码",
|
|
@@ -418,30 +447,35 @@ def stock_rank_xstp_ths(symbol: str = "500日均线") -> pd.DataFrame:
|
|
|
418
447
|
js_code.eval(js_content)
|
|
419
448
|
v_code = js_code.call("v")
|
|
420
449
|
headers = {
|
|
421
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
|
|
450
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
|
|
451
|
+
"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
|
|
422
452
|
"Cookie": f"v={v_code}",
|
|
423
453
|
}
|
|
424
454
|
url = f"http://data.10jqka.com.cn/rank/xstp/board/{symbol_map[symbol]}/order/asc/ajax/1/free/1/page/1/free/1/"
|
|
425
455
|
r = requests.get(url, headers=headers)
|
|
426
|
-
soup = BeautifulSoup(r.text, "lxml")
|
|
456
|
+
soup = BeautifulSoup(r.text, features="lxml")
|
|
427
457
|
try:
|
|
428
|
-
total_page = soup.find(
|
|
429
|
-
"
|
|
430
|
-
)
|
|
431
|
-
except AttributeError
|
|
458
|
+
total_page = soup.find(name="span", attrs={"class": "page_info"}).text.split(
|
|
459
|
+
"/"
|
|
460
|
+
)[1]
|
|
461
|
+
except AttributeError:
|
|
432
462
|
total_page = 1
|
|
433
463
|
big_df = pd.DataFrame()
|
|
434
464
|
tqdm = get_tqdm()
|
|
435
465
|
for page in tqdm(range(1, int(total_page) + 1), leave=False):
|
|
436
466
|
v_code = js_code.call("v")
|
|
437
467
|
headers = {
|
|
438
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
|
|
468
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
|
|
469
|
+
"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
|
|
439
470
|
"Cookie": f"v={v_code}",
|
|
440
471
|
}
|
|
441
|
-
url =
|
|
472
|
+
url = (
|
|
473
|
+
f"http://data.10jqka.com.cn/rank/xstp/board/{symbol_map[symbol]}/order/"
|
|
474
|
+
f"asc/ajax/1/free/1/page/{page}/free/1/"
|
|
475
|
+
)
|
|
442
476
|
r = requests.get(url, headers=headers)
|
|
443
477
|
temp_df = pd.read_html(StringIO(r.text), converters={"股票代码": str})[0]
|
|
444
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
478
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
445
479
|
big_df.columns = [
|
|
446
480
|
"序号",
|
|
447
481
|
"股票代码",
|
|
@@ -485,30 +519,35 @@ def stock_rank_xxtp_ths(symbol: str = "500日均线") -> pd.DataFrame:
|
|
|
485
519
|
js_code.eval(js_content)
|
|
486
520
|
v_code = js_code.call("v")
|
|
487
521
|
headers = {
|
|
488
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
|
|
522
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
|
|
523
|
+
"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
|
|
489
524
|
"Cookie": f"v={v_code}",
|
|
490
525
|
}
|
|
491
526
|
url = f"http://data.10jqka.com.cn/rank/xxtp/board/{symbol_map[symbol]}/order/asc/ajax/1/free/1/page/1/free/1/"
|
|
492
527
|
r = requests.get(url, headers=headers)
|
|
493
|
-
soup = BeautifulSoup(r.text, "lxml")
|
|
528
|
+
soup = BeautifulSoup(r.text, features="lxml")
|
|
494
529
|
try:
|
|
495
|
-
total_page = soup.find(
|
|
496
|
-
"
|
|
497
|
-
)
|
|
498
|
-
except AttributeError
|
|
530
|
+
total_page = soup.find(name="span", attrs={"class": "page_info"}).text.split(
|
|
531
|
+
"/"
|
|
532
|
+
)[1]
|
|
533
|
+
except AttributeError:
|
|
499
534
|
total_page = 1
|
|
500
535
|
big_df = pd.DataFrame()
|
|
501
536
|
tqdm = get_tqdm()
|
|
502
537
|
for page in tqdm(range(1, int(total_page) + 1), leave=False):
|
|
503
538
|
v_code = js_code.call("v")
|
|
504
539
|
headers = {
|
|
505
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
|
|
540
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
|
|
541
|
+
"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
|
|
506
542
|
"Cookie": f"v={v_code}",
|
|
507
543
|
}
|
|
508
|
-
url =
|
|
544
|
+
url = (
|
|
545
|
+
f"http://data.10jqka.com.cn/rank/xxtp/board/{symbol_map[symbol]}/order/"
|
|
546
|
+
f"asc/ajax/1/free/1/page/{page}/free/1/"
|
|
547
|
+
)
|
|
509
548
|
r = requests.get(url, headers=headers)
|
|
510
549
|
temp_df = pd.read_html(StringIO(r.text), converters={"股票代码": str})[0]
|
|
511
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
550
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
512
551
|
big_df.columns = [
|
|
513
552
|
"序号",
|
|
514
553
|
"股票代码",
|
|
@@ -540,30 +579,32 @@ def stock_rank_ljqs_ths() -> pd.DataFrame:
|
|
|
540
579
|
js_code.eval(js_content)
|
|
541
580
|
v_code = js_code.call("v")
|
|
542
581
|
headers = {
|
|
543
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
|
|
582
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
|
|
583
|
+
"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
|
|
544
584
|
"Cookie": f"v={v_code}",
|
|
545
585
|
}
|
|
546
|
-
url =
|
|
586
|
+
url = "http://data.10jqka.com.cn/rank/ljqs/field/count/order/desc/ajax/1/free/1/page/1/free/1/"
|
|
547
587
|
r = requests.get(url, headers=headers)
|
|
548
|
-
soup = BeautifulSoup(r.text, "lxml")
|
|
588
|
+
soup = BeautifulSoup(r.text, features="lxml")
|
|
549
589
|
try:
|
|
550
|
-
total_page = soup.find(
|
|
551
|
-
"
|
|
552
|
-
)
|
|
553
|
-
except AttributeError
|
|
590
|
+
total_page = soup.find(name="span", attrs={"class": "page_info"}).text.split(
|
|
591
|
+
"/"
|
|
592
|
+
)[1]
|
|
593
|
+
except AttributeError:
|
|
554
594
|
total_page = 1
|
|
555
595
|
big_df = pd.DataFrame()
|
|
556
596
|
tqdm = get_tqdm()
|
|
557
597
|
for page in tqdm(range(1, int(total_page) + 1), leave=False):
|
|
558
598
|
v_code = js_code.call("v")
|
|
559
599
|
headers = {
|
|
560
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
|
|
600
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
|
|
601
|
+
"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
|
|
561
602
|
"Cookie": f"v={v_code}",
|
|
562
603
|
}
|
|
563
604
|
url = f"http://data.10jqka.com.cn/rank/ljqs/field/count/order/desc/ajax/1/free/1/page/{page}/free/1/"
|
|
564
605
|
r = requests.get(url, headers=headers)
|
|
565
606
|
temp_df = pd.read_html(StringIO(r.text), converters={"股票代码": str})[0]
|
|
566
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
607
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
567
608
|
big_df.columns = [
|
|
568
609
|
"序号",
|
|
569
610
|
"股票代码",
|
|
@@ -596,30 +637,32 @@ def stock_rank_ljqd_ths() -> pd.DataFrame:
|
|
|
596
637
|
js_code.eval(js_content)
|
|
597
638
|
v_code = js_code.call("v")
|
|
598
639
|
headers = {
|
|
599
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
|
|
640
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
|
|
641
|
+
"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
|
|
600
642
|
"Cookie": f"v={v_code}",
|
|
601
643
|
}
|
|
602
|
-
url =
|
|
644
|
+
url = "http://data.10jqka.com.cn/rank/ljqd/field/count/order/desc/ajax/1/free/1/page/1/free/1/"
|
|
603
645
|
r = requests.get(url, headers=headers)
|
|
604
|
-
soup = BeautifulSoup(r.text, "lxml")
|
|
646
|
+
soup = BeautifulSoup(r.text, features="lxml")
|
|
605
647
|
try:
|
|
606
|
-
total_page = soup.find(
|
|
607
|
-
"
|
|
608
|
-
)
|
|
609
|
-
except AttributeError
|
|
648
|
+
total_page = soup.find(name="span", attrs={"class": "page_info"}).text.split(
|
|
649
|
+
"/"
|
|
650
|
+
)[1]
|
|
651
|
+
except AttributeError:
|
|
610
652
|
total_page = 1
|
|
611
653
|
big_df = pd.DataFrame()
|
|
612
654
|
tqdm = get_tqdm()
|
|
613
655
|
for page in tqdm(range(1, int(total_page) + 1), leave=False):
|
|
614
656
|
v_code = js_code.call("v")
|
|
615
657
|
headers = {
|
|
616
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
|
|
658
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
|
|
659
|
+
"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
|
|
617
660
|
"Cookie": f"v={v_code}",
|
|
618
661
|
}
|
|
619
662
|
url = f"http://data.10jqka.com.cn/rank/ljqd/field/count/order/desc/ajax/1/free/1/page/{page}/free/1/"
|
|
620
663
|
r = requests.get(url, headers=headers)
|
|
621
664
|
temp_df = pd.read_html(StringIO(r.text), converters={"股票代码": str})[0]
|
|
622
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
665
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
623
666
|
big_df.columns = [
|
|
624
667
|
"序号",
|
|
625
668
|
"股票代码",
|
|
@@ -650,32 +693,17 @@ def stock_rank_xzjp_ths() -> pd.DataFrame:
|
|
|
650
693
|
js_code = py_mini_racer.MiniRacer()
|
|
651
694
|
js_content = _get_file_content_ths("ths.js")
|
|
652
695
|
js_code.eval(js_content)
|
|
696
|
+
big_df = pd.DataFrame()
|
|
653
697
|
v_code = js_code.call("v")
|
|
654
698
|
headers = {
|
|
655
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
|
|
699
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
|
|
700
|
+
"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
|
|
656
701
|
"Cookie": f"v={v_code}",
|
|
657
702
|
}
|
|
658
|
-
url =
|
|
703
|
+
url = "http://data.10jqka.com.cn/ajax/xzjp/field/DECLAREDATE/order/desc/ajax/1/free/1/"
|
|
659
704
|
r = requests.get(url, headers=headers)
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
total_page = soup.find(
|
|
663
|
-
"span", attrs={"class": "page_info"}
|
|
664
|
-
).text.split("/")[1]
|
|
665
|
-
except AttributeError as e:
|
|
666
|
-
total_page = 1
|
|
667
|
-
big_df = pd.DataFrame()
|
|
668
|
-
tqdm = get_tqdm()
|
|
669
|
-
for page in tqdm(range(1, int(total_page) + 1), leave=False):
|
|
670
|
-
v_code = js_code.call("v")
|
|
671
|
-
headers = {
|
|
672
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
|
|
673
|
-
"Cookie": f"v={v_code}",
|
|
674
|
-
}
|
|
675
|
-
url = f"http://data.10jqka.com.cn/ajax/xzjp/field/DECLAREDATE/order/desc/ajax/1/free/1/"
|
|
676
|
-
r = requests.get(url, headers=headers)
|
|
677
|
-
temp_df = pd.read_html(StringIO(r.text), converters={"股票代码": str})[0]
|
|
678
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
705
|
+
temp_df = pd.read_html(StringIO(r.text), converters={"股票代码": str})[0]
|
|
706
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
679
707
|
big_df.columns = [
|
|
680
708
|
"序号",
|
|
681
709
|
"举牌公告日",
|
|
@@ -692,10 +720,14 @@ def stock_rank_xzjp_ths() -> pd.DataFrame:
|
|
|
692
720
|
"历史数据",
|
|
693
721
|
]
|
|
694
722
|
big_df["涨跌幅"] = big_df["涨跌幅"].astype(str).str.zfill(6)
|
|
695
|
-
big_df["增持数量占总股本比例"] =
|
|
723
|
+
big_df["增持数量占总股本比例"] = (
|
|
724
|
+
big_df["增持数量占总股本比例"].astype(str).str.strip("%")
|
|
725
|
+
)
|
|
696
726
|
big_df["变动后持股比例"] = big_df["变动后持股比例"].astype(str).str.strip("%")
|
|
697
727
|
big_df["涨跌幅"] = pd.to_numeric(big_df["涨跌幅"], errors="coerce")
|
|
698
|
-
big_df["增持数量占总股本比例"] = pd.to_numeric(
|
|
728
|
+
big_df["增持数量占总股本比例"] = pd.to_numeric(
|
|
729
|
+
big_df["增持数量占总股本比例"], errors="coerce"
|
|
730
|
+
)
|
|
699
731
|
big_df["变动后持股比例"] = pd.to_numeric(big_df["变动后持股比例"], errors="coerce")
|
|
700
732
|
big_df["举牌公告日"] = pd.to_datetime(big_df["举牌公告日"], errors="coerce").dt.date
|
|
701
733
|
big_df["股票代码"] = big_df["股票代码"].astype(str).str.zfill(6)
|
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date: 2024/
|
|
4
|
+
Date: 2024/4/29 15:00
|
|
5
5
|
Desc: 东方财富网-数据中心-特色数据-停复牌信息
|
|
6
6
|
https://data.eastmoney.com/tfpxx/
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
import pandas as pd
|
|
9
10
|
import requests
|
|
10
11
|
|
|
11
12
|
|
|
12
|
-
def stock_tfp_em(date: str = "
|
|
13
|
+
def stock_tfp_em(date: str = "20240426") -> pd.DataFrame:
|
|
13
14
|
"""
|
|
14
15
|
东方财富网-数据中心-特色数据-停复牌信息
|
|
15
16
|
https://data.eastmoney.com/tfpxx/
|
|
16
|
-
:param date:
|
|
17
|
+
:param date: 查询参数 "20240426"
|
|
17
18
|
:type date: str
|
|
18
19
|
:return: 停复牌信息表
|
|
19
20
|
:rtype: pandas.DataFrame
|
|
@@ -32,10 +33,17 @@ def stock_tfp_em(date: str = "20221109") -> pd.DataFrame:
|
|
|
32
33
|
}
|
|
33
34
|
r = requests.get(url, params=params)
|
|
34
35
|
data_json = r.json()
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
total_page = data_json["result"]["pages"]
|
|
37
|
+
big_df = pd.DataFrame()
|
|
38
|
+
for page in range(1, total_page + 1):
|
|
39
|
+
params.update({"pageNumber": page})
|
|
40
|
+
r = requests.get(url, params=params)
|
|
41
|
+
data_json = r.json()
|
|
42
|
+
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
43
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
44
|
+
|
|
45
|
+
big_df.reset_index(inplace=True)
|
|
46
|
+
big_df.columns = [
|
|
39
47
|
"序号",
|
|
40
48
|
"代码",
|
|
41
49
|
"名称",
|
|
@@ -48,16 +56,31 @@ def stock_tfp_em(date: str = "20221109") -> pd.DataFrame:
|
|
|
48
56
|
"预计复牌时间",
|
|
49
57
|
"-",
|
|
50
58
|
"-",
|
|
59
|
+
"-",
|
|
51
60
|
]
|
|
52
|
-
|
|
53
|
-
[
|
|
61
|
+
big_df = big_df[
|
|
62
|
+
[
|
|
63
|
+
"序号",
|
|
64
|
+
"代码",
|
|
65
|
+
"名称",
|
|
66
|
+
"停牌时间",
|
|
67
|
+
"停牌截止时间",
|
|
68
|
+
"停牌期限",
|
|
69
|
+
"停牌原因",
|
|
70
|
+
"所属市场",
|
|
71
|
+
"预计复牌时间",
|
|
72
|
+
]
|
|
54
73
|
]
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
74
|
+
big_df["停牌时间"] = pd.to_datetime(big_df["停牌时间"], errors="coerce").dt.date
|
|
75
|
+
big_df["停牌截止时间"] = pd.to_datetime(
|
|
76
|
+
big_df["停牌截止时间"], errors="coerce"
|
|
77
|
+
).dt.date
|
|
78
|
+
big_df["预计复牌时间"] = pd.to_datetime(
|
|
79
|
+
big_df["预计复牌时间"], errors="coerce"
|
|
80
|
+
).dt.date
|
|
81
|
+
return big_df
|
|
59
82
|
|
|
60
83
|
|
|
61
84
|
if __name__ == "__main__":
|
|
62
|
-
stock_tfp_em_df = stock_tfp_em(date="
|
|
85
|
+
stock_tfp_em_df = stock_tfp_em(date="20240426")
|
|
63
86
|
print(stock_tfp_em_df)
|