akshare 1.14.49__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 +595 -129
- akshare/air/air_hebei.py +77 -54
- akshare/air/air_zhenqi.py +0 -4
- akshare/air/cons.py +1 -0
- akshare/air/crypto.js +1 -1
- akshare/air/outcrypto.js +1 -1
- 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 +1 -1
- akshare/bond/bond_convert.py +10 -9
- akshare/bond/bond_em.py +37 -17
- akshare/bond/bond_summary.py +38 -37
- akshare/bond/bond_zh_cov.py +31 -40
- akshare/bond/bond_zh_sina.py +4 -0
- 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/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 +97 -105
- akshare/economic/macro_china_hk.py +0 -1
- akshare/economic/macro_euro.py +103 -56
- akshare/economic/macro_finance_ths.py +7 -5
- akshare/economic/macro_germany.py +1 -1
- 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 +0 -1
- akshare/energy/energy_oil_em.py +1 -2
- akshare/event/cons.py +1 -0
- 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 +1 -37
- 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_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 +75 -27
- akshare/fund/fund_etf_ths.py +2 -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 +23 -21
- akshare/fund/fund_position_lg.py +19 -8
- akshare/fund/fund_rank_em.py +2 -5
- akshare/fund/fund_rating.py +33 -12
- 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 +135 -39
- akshare/futures/cot.py +55 -56
- akshare/futures/futures_basis.py +49 -11
- akshare/futures/futures_comex_em.py +1 -0
- akshare/futures/futures_comm_ctp.py +1 -1
- akshare/futures/futures_contract_detail.py +59 -9
- akshare/futures/futures_daily_bar.py +66 -59
- 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 +5 -3
- 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 +0 -1
- akshare/futures/futures_to_spot.py +5 -6
- akshare/futures/futures_warehouse_receipt.py +48 -47
- akshare/futures/futures_zh_sina.py +3 -3
- 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 +3 -4
- akshare/futures_derivative/futures_cot_sina.py +8 -6
- akshare/futures_derivative/futures_index_sina.py +25 -13
- akshare/fx/cons.py +12 -7
- 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_cni.py +7 -7
- akshare/index/index_cons.py +2 -2
- akshare/index/index_csindex.py +68 -0
- akshare/index/index_cx.py +20 -20
- 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 +21 -21
- akshare/index/index_spot.py +9 -5
- akshare/index/index_stock_hk.py +5 -9
- akshare/index/index_stock_zh.py +111 -24
- akshare/index/index_stock_zh_csindex.py +3 -367
- akshare/index/index_sugar.py +18 -4
- akshare/index/index_sw.py +10 -2
- akshare/index/index_yw.py +53 -75
- akshare/index/index_zh_em.py +15 -82
- akshare/interest_rate/interbank_rate_em.py +0 -1
- akshare/movie/jm.js +0 -1
- akshare/news/__init__.py +1 -1
- akshare/news/news_baidu.py +395 -222
- akshare/news/news_stock.py +49 -16
- akshare/option/cons.py +2 -2
- akshare/option/option_commodity.py +341 -220
- 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 +0 -1
- akshare/option/option_em.py +4 -8
- akshare/option/option_finance.py +60 -12
- akshare/option/option_finance_sina.py +7 -7
- akshare/option/option_lhb_em.py +0 -1
- 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 +3 -4
- akshare/option/option_value_analysis_em.py +62 -55
- akshare/other/__init__.py +1 -1
- 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 +165 -3
- akshare/spot/spot_sge.py +70 -9
- akshare/stock/cons.py +60 -23
- akshare/stock/stock_allotment_cninfo.py +8 -8
- 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_dividend_cninfo.py +31 -17
- akshare/stock/stock_dzjy_em.py +347 -260
- akshare/stock/stock_fund_em.py +72 -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 +4 -5
- 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 +84 -36
- akshare/stock/stock_hold_control_cninfo.py +82 -0
- akshare/stock/stock_hold_control_em.py +0 -2
- 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 +1 -2
- akshare/stock/stock_info.py +6 -4
- akshare/stock/stock_info_em.py +17 -11
- akshare/stock/stock_intraday_em.py +4 -78
- akshare/stock/stock_intraday_sina.py +2 -2
- akshare/stock/stock_news_cx.py +39 -0
- akshare/stock/stock_profile_cninfo.py +7 -7
- akshare/stock/stock_profile_em.py +302 -0
- akshare/stock/stock_rank_forecast.py +6 -5
- akshare/stock/stock_repurchase_em.py +7 -2
- akshare/stock/stock_share_changes_cninfo.py +7 -5
- 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 +5 -6
- akshare/stock/stock_us_js.py +3 -2
- akshare/stock/stock_us_pink.py +38 -27
- akshare/stock/stock_us_sina.py +7 -3
- akshare/stock/stock_weibo_nlp.py +18 -20
- akshare/stock/stock_xq.py +24 -22
- akshare/stock/stock_zh_a_sina.py +8 -5
- 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 +2 -2
- akshare/stock/stock_zh_comparison_em.py +250 -0
- 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_indicator.py +9 -54
- akshare/stock_feature/stock_a_pe_and_pb.py +23 -5
- 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 +328 -0
- akshare/stock_feature/stock_board_industry_ths.py +57 -2
- 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_congestion_lg.py +2 -1
- akshare/stock_feature/stock_cyq_em.py +5 -11
- akshare/stock_feature/stock_disclosure_cninfo.py +6 -6
- 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 +29 -7
- akshare/stock_feature/stock_fhps_em.py +2 -1
- akshare/stock_feature/stock_fhps_ths.py +15 -7
- akshare/stock_feature/stock_fund_flow.py +30 -22
- 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 +137 -234
- 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 +7 -80
- akshare/stock_feature/stock_inner_trade_xq.py +38 -31
- akshare/stock_feature/stock_jgdy_em.py +43 -40
- akshare/stock_feature/stock_lhb_em.py +119 -3
- akshare/stock_feature/stock_margin_em.py +0 -1
- akshare/stock_feature/stock_margin_sse.py +0 -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 +151 -7
- akshare/stock_feature/stock_research_report_em.py +55 -20
- akshare/stock_feature/stock_sy_em.py +20 -15
- akshare/stock_feature/stock_technology_ths.py +122 -77
- akshare/stock_feature/stock_tfp_em.py +2 -1
- akshare/stock_feature/stock_three_report_em.py +21 -5
- 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_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} +60 -7
- 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 +12 -3
- 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_zygc.py +5 -62
- 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-1.14.49.dist-info → akshare-1.17.99.dist-info}/METADATA +54 -80
- akshare-1.17.99.dist-info/RECORD +409 -0
- {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info}/WHEEL +1 -1
- {akshare-1.14.49.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/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 -53
- 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/stock_feature/stock_wencai.py +0 -104
- akshare/stock_fundamental/stock_mda_ym.py +0 -40
- akshare-1.14.49.dist-info/RECORD +0 -387
- {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info}/top_level.txt +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
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
|
"""
|
|
@@ -9,9 +9,9 @@ https://data.10jqka.com.cn/rank/cxg/
|
|
|
9
9
|
from io import StringIO
|
|
10
10
|
|
|
11
11
|
import pandas as pd
|
|
12
|
+
import py_mini_racer
|
|
12
13
|
import requests
|
|
13
14
|
from bs4 import BeautifulSoup
|
|
14
|
-
import py_mini_racer
|
|
15
15
|
|
|
16
16
|
from akshare.datasets import get_ths_js
|
|
17
17
|
from akshare.utils.tqdm import get_tqdm
|
|
@@ -26,7 +26,7 @@ def _get_file_content_ths(file: str = "ths.js") -> str:
|
|
|
26
26
|
:rtype: str
|
|
27
27
|
"""
|
|
28
28
|
setting_file_path = get_ths_js(file)
|
|
29
|
-
with open(setting_file_path) as f:
|
|
29
|
+
with open(setting_file_path, encoding="utf-8") as f:
|
|
30
30
|
file_data = f.read()
|
|
31
31
|
return file_data
|
|
32
32
|
|
|
@@ -51,14 +51,20 @@ def stock_rank_cxg_ths(symbol: str = "创月新高") -> pd.DataFrame:
|
|
|
51
51
|
js_code.eval(js_content)
|
|
52
52
|
v_code = js_code.call("v")
|
|
53
53
|
headers = {
|
|
54
|
-
"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",
|
|
55
56
|
"Cookie": f"v={v_code}",
|
|
56
57
|
}
|
|
57
|
-
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
|
+
)
|
|
58
62
|
r = requests.get(url, headers=headers)
|
|
59
|
-
soup = BeautifulSoup(r.text, "lxml")
|
|
63
|
+
soup = BeautifulSoup(r.text, features="lxml")
|
|
60
64
|
try:
|
|
61
|
-
total_page = soup.find("span", attrs={"class": "page_info"}).text.split(
|
|
65
|
+
total_page = soup.find(name="span", attrs={"class": "page_info"}).text.split(
|
|
66
|
+
"/"
|
|
67
|
+
)[1]
|
|
62
68
|
except AttributeError:
|
|
63
69
|
total_page = 1
|
|
64
70
|
big_df = pd.DataFrame()
|
|
@@ -66,13 +72,17 @@ def stock_rank_cxg_ths(symbol: str = "创月新高") -> pd.DataFrame:
|
|
|
66
72
|
for page in tqdm(range(1, int(total_page) + 1), leave=False):
|
|
67
73
|
v_code = js_code.call("v")
|
|
68
74
|
headers = {
|
|
69
|
-
"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",
|
|
70
77
|
"Cookie": f"v={v_code}",
|
|
71
78
|
}
|
|
72
|
-
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
|
+
)
|
|
73
83
|
r = requests.get(url, headers=headers)
|
|
74
84
|
temp_df = pd.read_html(StringIO(r.text))[0]
|
|
75
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
85
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
76
86
|
big_df.columns = [
|
|
77
87
|
"序号",
|
|
78
88
|
"股票代码",
|
|
@@ -116,14 +126,20 @@ def stock_rank_cxd_ths(symbol: str = "创月新低") -> pd.DataFrame:
|
|
|
116
126
|
js_code.eval(js_content)
|
|
117
127
|
v_code = js_code.call("v")
|
|
118
128
|
headers = {
|
|
119
|
-
"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",
|
|
120
131
|
"Cookie": f"v={v_code}",
|
|
121
132
|
}
|
|
122
|
-
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
|
+
)
|
|
123
137
|
r = requests.get(url, headers=headers)
|
|
124
|
-
soup = BeautifulSoup(r.text, "lxml")
|
|
138
|
+
soup = BeautifulSoup(r.text, features="lxml")
|
|
125
139
|
try:
|
|
126
|
-
total_page = soup.find("span", attrs={"class": "page_info"}).text.split(
|
|
140
|
+
total_page = soup.find(name="span", attrs={"class": "page_info"}).text.split(
|
|
141
|
+
"/"
|
|
142
|
+
)[1]
|
|
127
143
|
except AttributeError:
|
|
128
144
|
total_page = 1
|
|
129
145
|
big_df = pd.DataFrame()
|
|
@@ -131,13 +147,17 @@ def stock_rank_cxd_ths(symbol: str = "创月新低") -> pd.DataFrame:
|
|
|
131
147
|
for page in tqdm(range(1, int(total_page) + 1), leave=False):
|
|
132
148
|
v_code = js_code.call("v")
|
|
133
149
|
headers = {
|
|
134
|
-
"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",
|
|
135
152
|
"Cookie": f"v={v_code}",
|
|
136
153
|
}
|
|
137
|
-
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
|
+
)
|
|
138
158
|
r = requests.get(url, headers=headers)
|
|
139
159
|
temp_df = pd.read_html(StringIO(r.text))[0]
|
|
140
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
160
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
141
161
|
big_df.columns = [
|
|
142
162
|
"序号",
|
|
143
163
|
"股票代码",
|
|
@@ -173,14 +193,17 @@ def stock_rank_lxsz_ths() -> pd.DataFrame:
|
|
|
173
193
|
js_code.eval(js_content)
|
|
174
194
|
v_code = js_code.call("v")
|
|
175
195
|
headers = {
|
|
176
|
-
"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",
|
|
177
198
|
"Cookie": f"v={v_code}",
|
|
178
199
|
}
|
|
179
200
|
url = "http://data.10jqka.com.cn/rank/lxsz/field/lxts/order/desc/page/1/ajax/1/free/1/"
|
|
180
201
|
r = requests.get(url, headers=headers)
|
|
181
|
-
soup = BeautifulSoup(r.text, "lxml")
|
|
202
|
+
soup = BeautifulSoup(r.text, features="lxml")
|
|
182
203
|
try:
|
|
183
|
-
total_page = soup.find("span", attrs={"class": "page_info"}).text.split(
|
|
204
|
+
total_page = soup.find(name="span", attrs={"class": "page_info"}).text.split(
|
|
205
|
+
"/"
|
|
206
|
+
)[1]
|
|
184
207
|
except AttributeError:
|
|
185
208
|
total_page = 1
|
|
186
209
|
big_df = pd.DataFrame()
|
|
@@ -188,13 +211,14 @@ def stock_rank_lxsz_ths() -> pd.DataFrame:
|
|
|
188
211
|
for page in tqdm(range(1, int(total_page) + 1), leave=False):
|
|
189
212
|
v_code = js_code.call("v")
|
|
190
213
|
headers = {
|
|
191
|
-
"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",
|
|
192
216
|
"Cookie": f"v={v_code}",
|
|
193
217
|
}
|
|
194
218
|
url = f"http://data.10jqka.com.cn/rank/lxsz/field/lxts/order/desc/page/{page}/ajax/1/free/1/"
|
|
195
219
|
r = requests.get(url, headers=headers)
|
|
196
220
|
temp_df = pd.read_html(StringIO(r.text), converters={"股票代码": str})[0]
|
|
197
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
221
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
198
222
|
big_df.columns = [
|
|
199
223
|
"序号",
|
|
200
224
|
"股票代码",
|
|
@@ -230,14 +254,17 @@ def stock_rank_lxxd_ths() -> pd.DataFrame:
|
|
|
230
254
|
js_code.eval(js_content)
|
|
231
255
|
v_code = js_code.call("v")
|
|
232
256
|
headers = {
|
|
233
|
-
"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",
|
|
234
259
|
"Cookie": f"v={v_code}",
|
|
235
260
|
}
|
|
236
261
|
url = "http://data.10jqka.com.cn/rank/lxxd/field/lxts/order/desc/page/1/ajax/1/free/1/"
|
|
237
262
|
r = requests.get(url, headers=headers)
|
|
238
|
-
soup = BeautifulSoup(r.text, "lxml")
|
|
263
|
+
soup = BeautifulSoup(r.text, features="lxml")
|
|
239
264
|
try:
|
|
240
|
-
total_page = soup.find("span", attrs={"class": "page_info"}).text.split(
|
|
265
|
+
total_page = soup.find(name="span", attrs={"class": "page_info"}).text.split(
|
|
266
|
+
"/"
|
|
267
|
+
)[1]
|
|
241
268
|
except AttributeError:
|
|
242
269
|
total_page = 1
|
|
243
270
|
big_df = pd.DataFrame()
|
|
@@ -245,13 +272,14 @@ def stock_rank_lxxd_ths() -> pd.DataFrame:
|
|
|
245
272
|
for page in tqdm(range(1, int(total_page) + 1), leave=False):
|
|
246
273
|
v_code = js_code.call("v")
|
|
247
274
|
headers = {
|
|
248
|
-
"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",
|
|
249
277
|
"Cookie": f"v={v_code}",
|
|
250
278
|
}
|
|
251
279
|
url = f"http://data.10jqka.com.cn/rank/lxxd/field/lxts/order/desc/page/{page}/ajax/1/free/1/"
|
|
252
280
|
r = requests.get(url, headers=headers)
|
|
253
281
|
temp_df = pd.read_html(StringIO(r.text), converters={"股票代码": str})[0]
|
|
254
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
282
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
255
283
|
big_df.columns = [
|
|
256
284
|
"序号",
|
|
257
285
|
"股票代码",
|
|
@@ -287,14 +315,17 @@ def stock_rank_cxfl_ths() -> pd.DataFrame:
|
|
|
287
315
|
js_code.eval(js_content)
|
|
288
316
|
v_code = js_code.call("v")
|
|
289
317
|
headers = {
|
|
290
|
-
"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",
|
|
291
320
|
"Cookie": f"v={v_code}",
|
|
292
321
|
}
|
|
293
322
|
url = "http://data.10jqka.com.cn/rank/cxfl/field/count/order/desc/ajax/1/free/1/page/1/free/1/"
|
|
294
323
|
r = requests.get(url, headers=headers)
|
|
295
|
-
soup = BeautifulSoup(r.text, "lxml")
|
|
324
|
+
soup = BeautifulSoup(r.text, features="lxml")
|
|
296
325
|
try:
|
|
297
|
-
total_page = soup.find("span", attrs={"class": "page_info"}).text.split(
|
|
326
|
+
total_page = soup.find(name="span", attrs={"class": "page_info"}).text.split(
|
|
327
|
+
"/"
|
|
328
|
+
)[1]
|
|
298
329
|
except AttributeError:
|
|
299
330
|
total_page = 1
|
|
300
331
|
big_df = pd.DataFrame()
|
|
@@ -302,13 +333,14 @@ def stock_rank_cxfl_ths() -> pd.DataFrame:
|
|
|
302
333
|
for page in tqdm(range(1, int(total_page) + 1), leave=False):
|
|
303
334
|
v_code = js_code.call("v")
|
|
304
335
|
headers = {
|
|
305
|
-
"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",
|
|
306
338
|
"Cookie": f"v={v_code}",
|
|
307
339
|
}
|
|
308
340
|
url = f"http://data.10jqka.com.cn/rank/cxfl/field/count/order/desc/ajax/1/free/1/page/{page}/free/1/"
|
|
309
341
|
r = requests.get(url, headers=headers)
|
|
310
342
|
temp_df = pd.read_html(StringIO(r.text), converters={"股票代码": str})[0]
|
|
311
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
343
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
312
344
|
big_df.columns = [
|
|
313
345
|
"序号",
|
|
314
346
|
"股票代码",
|
|
@@ -343,14 +375,17 @@ def stock_rank_cxsl_ths() -> pd.DataFrame:
|
|
|
343
375
|
js_code.eval(js_content)
|
|
344
376
|
v_code = js_code.call("v")
|
|
345
377
|
headers = {
|
|
346
|
-
"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",
|
|
347
380
|
"Cookie": f"v={v_code}",
|
|
348
381
|
}
|
|
349
382
|
url = "http://data.10jqka.com.cn/rank/cxsl/field/count/order/desc/ajax/1/free/1/page/1/free/1/"
|
|
350
383
|
r = requests.get(url, headers=headers)
|
|
351
|
-
soup = BeautifulSoup(r.text, "lxml")
|
|
384
|
+
soup = BeautifulSoup(r.text, features="lxml")
|
|
352
385
|
try:
|
|
353
|
-
total_page = soup.find("span", attrs={"class": "page_info"}).text.split(
|
|
386
|
+
total_page = soup.find(name="span", attrs={"class": "page_info"}).text.split(
|
|
387
|
+
"/"
|
|
388
|
+
)[1]
|
|
354
389
|
except AttributeError:
|
|
355
390
|
total_page = 1
|
|
356
391
|
big_df = pd.DataFrame()
|
|
@@ -358,13 +393,14 @@ def stock_rank_cxsl_ths() -> pd.DataFrame:
|
|
|
358
393
|
for page in tqdm(range(1, int(total_page) + 1), leave=False):
|
|
359
394
|
v_code = js_code.call("v")
|
|
360
395
|
headers = {
|
|
361
|
-
"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",
|
|
362
398
|
"Cookie": f"v={v_code}",
|
|
363
399
|
}
|
|
364
400
|
url = f"http://data.10jqka.com.cn/rank/cxsl/field/count/order/desc/ajax/1/free/1/page/{page}/free/1/"
|
|
365
401
|
r = requests.get(url, headers=headers)
|
|
366
402
|
temp_df = pd.read_html(StringIO(r.text), converters={"股票代码": str})[0]
|
|
367
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
403
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
368
404
|
big_df.columns = [
|
|
369
405
|
"序号",
|
|
370
406
|
"股票代码",
|
|
@@ -411,14 +447,17 @@ def stock_rank_xstp_ths(symbol: str = "500日均线") -> pd.DataFrame:
|
|
|
411
447
|
js_code.eval(js_content)
|
|
412
448
|
v_code = js_code.call("v")
|
|
413
449
|
headers = {
|
|
414
|
-
"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",
|
|
415
452
|
"Cookie": f"v={v_code}",
|
|
416
453
|
}
|
|
417
454
|
url = f"http://data.10jqka.com.cn/rank/xstp/board/{symbol_map[symbol]}/order/asc/ajax/1/free/1/page/1/free/1/"
|
|
418
455
|
r = requests.get(url, headers=headers)
|
|
419
|
-
soup = BeautifulSoup(r.text, "lxml")
|
|
456
|
+
soup = BeautifulSoup(r.text, features="lxml")
|
|
420
457
|
try:
|
|
421
|
-
total_page = soup.find("span", attrs={"class": "page_info"}).text.split(
|
|
458
|
+
total_page = soup.find(name="span", attrs={"class": "page_info"}).text.split(
|
|
459
|
+
"/"
|
|
460
|
+
)[1]
|
|
422
461
|
except AttributeError:
|
|
423
462
|
total_page = 1
|
|
424
463
|
big_df = pd.DataFrame()
|
|
@@ -426,13 +465,17 @@ def stock_rank_xstp_ths(symbol: str = "500日均线") -> pd.DataFrame:
|
|
|
426
465
|
for page in tqdm(range(1, int(total_page) + 1), leave=False):
|
|
427
466
|
v_code = js_code.call("v")
|
|
428
467
|
headers = {
|
|
429
|
-
"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",
|
|
430
470
|
"Cookie": f"v={v_code}",
|
|
431
471
|
}
|
|
432
|
-
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
|
+
)
|
|
433
476
|
r = requests.get(url, headers=headers)
|
|
434
477
|
temp_df = pd.read_html(StringIO(r.text), converters={"股票代码": str})[0]
|
|
435
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
478
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
436
479
|
big_df.columns = [
|
|
437
480
|
"序号",
|
|
438
481
|
"股票代码",
|
|
@@ -476,14 +519,17 @@ def stock_rank_xxtp_ths(symbol: str = "500日均线") -> pd.DataFrame:
|
|
|
476
519
|
js_code.eval(js_content)
|
|
477
520
|
v_code = js_code.call("v")
|
|
478
521
|
headers = {
|
|
479
|
-
"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",
|
|
480
524
|
"Cookie": f"v={v_code}",
|
|
481
525
|
}
|
|
482
526
|
url = f"http://data.10jqka.com.cn/rank/xxtp/board/{symbol_map[symbol]}/order/asc/ajax/1/free/1/page/1/free/1/"
|
|
483
527
|
r = requests.get(url, headers=headers)
|
|
484
|
-
soup = BeautifulSoup(r.text, "lxml")
|
|
528
|
+
soup = BeautifulSoup(r.text, features="lxml")
|
|
485
529
|
try:
|
|
486
|
-
total_page = soup.find("span", attrs={"class": "page_info"}).text.split(
|
|
530
|
+
total_page = soup.find(name="span", attrs={"class": "page_info"}).text.split(
|
|
531
|
+
"/"
|
|
532
|
+
)[1]
|
|
487
533
|
except AttributeError:
|
|
488
534
|
total_page = 1
|
|
489
535
|
big_df = pd.DataFrame()
|
|
@@ -491,13 +537,17 @@ def stock_rank_xxtp_ths(symbol: str = "500日均线") -> pd.DataFrame:
|
|
|
491
537
|
for page in tqdm(range(1, int(total_page) + 1), leave=False):
|
|
492
538
|
v_code = js_code.call("v")
|
|
493
539
|
headers = {
|
|
494
|
-
"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",
|
|
495
542
|
"Cookie": f"v={v_code}",
|
|
496
543
|
}
|
|
497
|
-
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
|
+
)
|
|
498
548
|
r = requests.get(url, headers=headers)
|
|
499
549
|
temp_df = pd.read_html(StringIO(r.text), converters={"股票代码": str})[0]
|
|
500
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
550
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
501
551
|
big_df.columns = [
|
|
502
552
|
"序号",
|
|
503
553
|
"股票代码",
|
|
@@ -529,14 +579,17 @@ def stock_rank_ljqs_ths() -> pd.DataFrame:
|
|
|
529
579
|
js_code.eval(js_content)
|
|
530
580
|
v_code = js_code.call("v")
|
|
531
581
|
headers = {
|
|
532
|
-
"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",
|
|
533
584
|
"Cookie": f"v={v_code}",
|
|
534
585
|
}
|
|
535
586
|
url = "http://data.10jqka.com.cn/rank/ljqs/field/count/order/desc/ajax/1/free/1/page/1/free/1/"
|
|
536
587
|
r = requests.get(url, headers=headers)
|
|
537
|
-
soup = BeautifulSoup(r.text, "lxml")
|
|
588
|
+
soup = BeautifulSoup(r.text, features="lxml")
|
|
538
589
|
try:
|
|
539
|
-
total_page = soup.find("span", attrs={"class": "page_info"}).text.split(
|
|
590
|
+
total_page = soup.find(name="span", attrs={"class": "page_info"}).text.split(
|
|
591
|
+
"/"
|
|
592
|
+
)[1]
|
|
540
593
|
except AttributeError:
|
|
541
594
|
total_page = 1
|
|
542
595
|
big_df = pd.DataFrame()
|
|
@@ -544,13 +597,14 @@ def stock_rank_ljqs_ths() -> pd.DataFrame:
|
|
|
544
597
|
for page in tqdm(range(1, int(total_page) + 1), leave=False):
|
|
545
598
|
v_code = js_code.call("v")
|
|
546
599
|
headers = {
|
|
547
|
-
"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",
|
|
548
602
|
"Cookie": f"v={v_code}",
|
|
549
603
|
}
|
|
550
604
|
url = f"http://data.10jqka.com.cn/rank/ljqs/field/count/order/desc/ajax/1/free/1/page/{page}/free/1/"
|
|
551
605
|
r = requests.get(url, headers=headers)
|
|
552
606
|
temp_df = pd.read_html(StringIO(r.text), converters={"股票代码": str})[0]
|
|
553
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
607
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
554
608
|
big_df.columns = [
|
|
555
609
|
"序号",
|
|
556
610
|
"股票代码",
|
|
@@ -583,14 +637,17 @@ def stock_rank_ljqd_ths() -> pd.DataFrame:
|
|
|
583
637
|
js_code.eval(js_content)
|
|
584
638
|
v_code = js_code.call("v")
|
|
585
639
|
headers = {
|
|
586
|
-
"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",
|
|
587
642
|
"Cookie": f"v={v_code}",
|
|
588
643
|
}
|
|
589
644
|
url = "http://data.10jqka.com.cn/rank/ljqd/field/count/order/desc/ajax/1/free/1/page/1/free/1/"
|
|
590
645
|
r = requests.get(url, headers=headers)
|
|
591
|
-
soup = BeautifulSoup(r.text, "lxml")
|
|
646
|
+
soup = BeautifulSoup(r.text, features="lxml")
|
|
592
647
|
try:
|
|
593
|
-
total_page = soup.find("span", attrs={"class": "page_info"}).text.split(
|
|
648
|
+
total_page = soup.find(name="span", attrs={"class": "page_info"}).text.split(
|
|
649
|
+
"/"
|
|
650
|
+
)[1]
|
|
594
651
|
except AttributeError:
|
|
595
652
|
total_page = 1
|
|
596
653
|
big_df = pd.DataFrame()
|
|
@@ -598,13 +655,14 @@ def stock_rank_ljqd_ths() -> pd.DataFrame:
|
|
|
598
655
|
for page in tqdm(range(1, int(total_page) + 1), leave=False):
|
|
599
656
|
v_code = js_code.call("v")
|
|
600
657
|
headers = {
|
|
601
|
-
"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",
|
|
602
660
|
"Cookie": f"v={v_code}",
|
|
603
661
|
}
|
|
604
662
|
url = f"http://data.10jqka.com.cn/rank/ljqd/field/count/order/desc/ajax/1/free/1/page/{page}/free/1/"
|
|
605
663
|
r = requests.get(url, headers=headers)
|
|
606
664
|
temp_df = pd.read_html(StringIO(r.text), converters={"股票代码": str})[0]
|
|
607
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
665
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
608
666
|
big_df.columns = [
|
|
609
667
|
"序号",
|
|
610
668
|
"股票代码",
|
|
@@ -635,30 +693,17 @@ def stock_rank_xzjp_ths() -> pd.DataFrame:
|
|
|
635
693
|
js_code = py_mini_racer.MiniRacer()
|
|
636
694
|
js_content = _get_file_content_ths("ths.js")
|
|
637
695
|
js_code.eval(js_content)
|
|
696
|
+
big_df = pd.DataFrame()
|
|
638
697
|
v_code = js_code.call("v")
|
|
639
698
|
headers = {
|
|
640
|
-
"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",
|
|
641
701
|
"Cookie": f"v={v_code}",
|
|
642
702
|
}
|
|
643
703
|
url = "http://data.10jqka.com.cn/ajax/xzjp/field/DECLAREDATE/order/desc/ajax/1/free/1/"
|
|
644
704
|
r = requests.get(url, headers=headers)
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
total_page = soup.find("span", attrs={"class": "page_info"}).text.split("/")[1]
|
|
648
|
-
except AttributeError:
|
|
649
|
-
total_page = 1
|
|
650
|
-
big_df = pd.DataFrame()
|
|
651
|
-
tqdm = get_tqdm()
|
|
652
|
-
for page in tqdm(range(1, int(total_page) + 1), leave=False):
|
|
653
|
-
v_code = js_code.call("v")
|
|
654
|
-
headers = {
|
|
655
|
-
"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",
|
|
656
|
-
"Cookie": f"v={v_code}",
|
|
657
|
-
}
|
|
658
|
-
url = "http://data.10jqka.com.cn/ajax/xzjp/field/DECLAREDATE/order/desc/ajax/1/free/1/"
|
|
659
|
-
r = requests.get(url, headers=headers)
|
|
660
|
-
temp_df = pd.read_html(StringIO(r.text), converters={"股票代码": str})[0]
|
|
661
|
-
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)
|
|
662
707
|
big_df.columns = [
|
|
663
708
|
"序号",
|
|
664
709
|
"举牌公告日",
|
|
@@ -14,7 +14,7 @@ def stock_tfp_em(date: str = "20240426") -> pd.DataFrame:
|
|
|
14
14
|
"""
|
|
15
15
|
东方财富网-数据中心-特色数据-停复牌信息
|
|
16
16
|
https://data.eastmoney.com/tfpxx/
|
|
17
|
-
:param date:
|
|
17
|
+
:param date: 查询参数 "20240426"
|
|
18
18
|
:type date: str
|
|
19
19
|
:return: 停复牌信息表
|
|
20
20
|
:rtype: pandas.DataFrame
|
|
@@ -56,6 +56,7 @@ def stock_tfp_em(date: str = "20240426") -> pd.DataFrame:
|
|
|
56
56
|
"预计复牌时间",
|
|
57
57
|
"-",
|
|
58
58
|
"-",
|
|
59
|
+
"-",
|
|
59
60
|
]
|
|
60
61
|
big_df = big_df[
|
|
61
62
|
[
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# -*- coding:utf-8 -*-
|
|
2
2
|
# !/usr/bin/env python
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2025/5/8 20:00
|
|
5
5
|
Desc: 东方财富-股票-财务分析
|
|
6
6
|
"""
|
|
7
7
|
|
|
@@ -68,6 +68,8 @@ def stock_balance_sheet_by_report_em(symbol: str = "SH600519") -> pd.DataFrame:
|
|
|
68
68
|
}
|
|
69
69
|
r = requests.get(url, params=params)
|
|
70
70
|
data_json = r.json()
|
|
71
|
+
if "data" not in data_json.keys():
|
|
72
|
+
break
|
|
71
73
|
temp_df = pd.DataFrame(data_json["data"])
|
|
72
74
|
for col in temp_df.columns:
|
|
73
75
|
if temp_df[col].isnull().all(): # 检查列是否包含 None 或 NaN
|
|
@@ -100,7 +102,7 @@ def stock_balance_sheet_by_yearly_em(symbol: str = "SH600036") -> pd.DataFrame:
|
|
|
100
102
|
try:
|
|
101
103
|
temp_df = pd.DataFrame(data_json["data"])
|
|
102
104
|
except: # noqa: E722
|
|
103
|
-
company_type = 3
|
|
105
|
+
company_type = '3'
|
|
104
106
|
params.update({"companyType": company_type})
|
|
105
107
|
r = requests.get(url, params=params)
|
|
106
108
|
data_json = r.json()
|
|
@@ -124,6 +126,8 @@ def stock_balance_sheet_by_yearly_em(symbol: str = "SH600036") -> pd.DataFrame:
|
|
|
124
126
|
}
|
|
125
127
|
r = requests.get(url, params=params)
|
|
126
128
|
data_json = r.json()
|
|
129
|
+
if "data" not in data_json.keys():
|
|
130
|
+
break
|
|
127
131
|
temp_df = pd.DataFrame(data_json["data"])
|
|
128
132
|
for col in temp_df.columns:
|
|
129
133
|
if temp_df[col].isnull().all(): # 检查列是否包含 None 或 NaN
|
|
@@ -171,6 +175,8 @@ def stock_profit_sheet_by_report_em(symbol: str = "SH600519") -> pd.DataFrame:
|
|
|
171
175
|
}
|
|
172
176
|
r = requests.get(url, params=params)
|
|
173
177
|
data_json = r.json()
|
|
178
|
+
if "data" not in data_json.keys():
|
|
179
|
+
break
|
|
174
180
|
temp_df = pd.DataFrame(data_json["data"])
|
|
175
181
|
for col in temp_df.columns:
|
|
176
182
|
if temp_df[col].isnull().all(): # 检查列是否包含 None 或 NaN
|
|
@@ -218,6 +224,8 @@ def stock_profit_sheet_by_yearly_em(symbol: str = "SH600519") -> pd.DataFrame:
|
|
|
218
224
|
}
|
|
219
225
|
r = requests.get(url, params=params)
|
|
220
226
|
data_json = r.json()
|
|
227
|
+
if "data" not in data_json.keys():
|
|
228
|
+
break
|
|
221
229
|
temp_df = pd.DataFrame(data_json["data"])
|
|
222
230
|
for col in temp_df.columns:
|
|
223
231
|
if temp_df[col].isnull().all(): # 检查列是否包含 None 或 NaN
|
|
@@ -267,6 +275,8 @@ def stock_profit_sheet_by_quarterly_em(
|
|
|
267
275
|
}
|
|
268
276
|
r = requests.get(url, params=params)
|
|
269
277
|
data_json = r.json()
|
|
278
|
+
if "data" not in data_json.keys():
|
|
279
|
+
break
|
|
270
280
|
temp_df = pd.DataFrame(data_json["data"])
|
|
271
281
|
for col in temp_df.columns:
|
|
272
282
|
if temp_df[col].isnull().all(): # 检查列是否包含 None 或 NaN
|
|
@@ -316,6 +326,8 @@ def stock_cash_flow_sheet_by_report_em(
|
|
|
316
326
|
}
|
|
317
327
|
r = requests.get(url, params=params)
|
|
318
328
|
data_json = r.json()
|
|
329
|
+
if "data" not in data_json.keys():
|
|
330
|
+
break
|
|
319
331
|
temp_df = pd.DataFrame(data_json["data"])
|
|
320
332
|
for col in temp_df.columns:
|
|
321
333
|
if temp_df[col].isnull().all(): # 检查列是否包含 None 或 NaN
|
|
@@ -365,6 +377,8 @@ def stock_cash_flow_sheet_by_yearly_em(
|
|
|
365
377
|
}
|
|
366
378
|
r = requests.get(url, params=params)
|
|
367
379
|
data_json = r.json()
|
|
380
|
+
if "data" not in data_json.keys():
|
|
381
|
+
break
|
|
368
382
|
temp_df = pd.DataFrame(data_json["data"])
|
|
369
383
|
for col in temp_df.columns:
|
|
370
384
|
if temp_df[col].isnull().all(): # 检查列是否包含 None 或 NaN
|
|
@@ -414,6 +428,8 @@ def stock_cash_flow_sheet_by_quarterly_em(
|
|
|
414
428
|
}
|
|
415
429
|
r = requests.get(url, params=params)
|
|
416
430
|
data_json = r.json()
|
|
431
|
+
if "data" not in data_json.keys():
|
|
432
|
+
break
|
|
417
433
|
temp_df = pd.DataFrame(data_json["data"])
|
|
418
434
|
for col in temp_df.columns:
|
|
419
435
|
if temp_df[col].isnull().all(): # 检查列是否包含 None 或 NaN
|
|
@@ -437,15 +453,15 @@ def __get_report_date_list_delisted_em(symbol: str = "SZ000013") -> list:
|
|
|
437
453
|
url = "https://datacenter.eastmoney.com/securities/api/data/get"
|
|
438
454
|
params = {
|
|
439
455
|
"type": "RPT_F10_FINANCE_GINCOME",
|
|
440
|
-
"sty": "SECURITY_CODE,REPORT_DATE,REPORT_TYPE,REPORT_DATE_NAME",
|
|
441
|
-
"filter": f'(
|
|
456
|
+
"sty": "SECUCODE,SECURITY_CODE,REPORT_DATE,REPORT_TYPE,REPORT_DATE_NAME",
|
|
457
|
+
"filter": f'(SECUCODE="{symbol[2:]}.{symbol[:2]}")',
|
|
442
458
|
"p": "1",
|
|
443
459
|
"ps": "200",
|
|
444
460
|
"sr": "-1",
|
|
445
461
|
"st": "REPORT_DATE",
|
|
446
462
|
"source": "HSF10",
|
|
447
463
|
"client": "PC",
|
|
448
|
-
"v": "
|
|
464
|
+
"v": "07306678536291241",
|
|
449
465
|
}
|
|
450
466
|
r = requests.get(url, params=params)
|
|
451
467
|
data_json = r.json()
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2025/10/30 15:00
|
|
5
5
|
Desc: 全部A股-等权重市盈率、中位数市盈率
|
|
6
6
|
https://www.legulegu.com/stockdata/a-ttm-lyr
|
|
7
7
|
"""
|
|
@@ -14,27 +14,36 @@ from akshare.stock_feature.stock_a_indicator import get_token_lg, get_cookie_csr
|
|
|
14
14
|
def stock_a_ttm_lyr() -> pd.DataFrame:
|
|
15
15
|
"""
|
|
16
16
|
全部 A 股-等权重市盈率、中位数市盈率
|
|
17
|
-
https://www.legulegu.com/stockdata/a-ttm-lyr
|
|
18
17
|
:return: 全部A股-等权重市盈率、中位数市盈率
|
|
19
18
|
:rtype: pandas.DataFrame
|
|
20
19
|
"""
|
|
20
|
+
|
|
21
21
|
url = "https://legulegu.com/api/stock-data/market-ttm-lyr"
|
|
22
22
|
params = {
|
|
23
23
|
"marketId": "5",
|
|
24
24
|
"token": get_token_lg(),
|
|
25
25
|
}
|
|
26
|
-
|
|
26
|
+
# 获取 cookie 和 headers
|
|
27
|
+
csrf_data = get_cookie_csrf(url="https://www.legulegu.com/stockdata/a-ttm-lyr")
|
|
28
|
+
# 使用返回的 headers(已经是副本)
|
|
29
|
+
request_headers = csrf_data['headers'].copy()
|
|
30
|
+
request_headers.update({
|
|
31
|
+
"host": "www.legulegu.com",
|
|
32
|
+
"referer": "https://www.legulegu.com/stockdata/a-ttm-lyr",
|
|
33
|
+
})
|
|
34
|
+
# 使用独立的 session
|
|
35
|
+
session = requests.Session()
|
|
36
|
+
r = session.get(
|
|
27
37
|
url,
|
|
28
38
|
params=params,
|
|
29
|
-
|
|
39
|
+
cookies=csrf_data['cookies'],
|
|
40
|
+
headers=request_headers,
|
|
30
41
|
)
|
|
31
42
|
data_json = r.json()
|
|
32
43
|
temp_df = pd.DataFrame(data_json["data"])
|
|
33
|
-
temp_df["date"] = (
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
.dt.date
|
|
37
|
-
)
|
|
44
|
+
temp_df["date"] = pd.to_datetime(temp_df["date"], errors="coerce").dt.date
|
|
45
|
+
# 关闭 session
|
|
46
|
+
session.close()
|
|
38
47
|
return temp_df
|
|
39
48
|
|
|
40
49
|
|