akshare 1.12.99__py3-none-any.whl → 1.15.73__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.
Potentially problematic release.
This version of akshare might be problematic. Click here for more details.
- akshare/__init__.py +442 -138
- akshare/air/air_hebei.py +79 -53
- akshare/air/air_zhenqi.py +29 -43
- akshare/air/sunrise_tad.py +32 -17
- akshare/bank/bank_cbirc_2020.py +12 -9
- akshare/bond/bond_cb_ths.py +17 -9
- akshare/bond/bond_china.py +38 -39
- akshare/bond/bond_china_money.py +75 -48
- akshare/bond/bond_info_cm.py +28 -8
- akshare/bond/bond_issue_cninfo.py +73 -30
- akshare/bond/bond_zh_cov.py +1 -1
- akshare/bond/bond_zh_sina.py +57 -51
- akshare/cal/__init__.py +0 -0
- akshare/cal/rv.py +170 -0
- akshare/cost/cost_living.py +7 -5
- akshare/currency/currency_safe.py +7 -6
- akshare/data/cninfo.js +15 -0
- akshare/datasets.py +10 -21
- akshare/economic/macro_bank.py +95 -653
- akshare/economic/macro_china.py +772 -1024
- akshare/economic/macro_china_hk.py +65 -243
- akshare/economic/macro_china_nbs.py +24 -7
- akshare/economic/macro_constitute.py +17 -12
- akshare/economic/macro_euro.py +13 -6
- akshare/economic/macro_finance_ths.py +133 -0
- akshare/economic/macro_info_ws.py +100 -0
- akshare/economic/macro_japan.py +5 -4
- akshare/economic/macro_other.py +12 -9
- akshare/economic/macro_usa.py +376 -1940
- akshare/economic/marco_cnbs.py +11 -6
- akshare/energy/energy_carbon.py +94 -125
- akshare/event/migration.py +3 -2
- akshare/exceptions.py +43 -0
- akshare/file_fold/calendar.json +245 -2
- akshare/fortune/fortune_500.py +15 -48
- akshare/fund/fund_amac.py +157 -75
- akshare/fund/fund_em.py +191 -184
- akshare/fund/fund_etf_em.py +16 -15
- akshare/fund/fund_etf_sina.py +71 -23
- akshare/fund/fund_etf_ths.py +93 -0
- akshare/fund/fund_fee_em.py +98 -0
- akshare/fund/fund_portfolio_em.py +60 -50
- akshare/fund/fund_rank_em.py +91 -82
- akshare/fund/fund_report_cninfo.py +63 -48
- akshare/fund/fund_scale_sina.py +20 -10
- akshare/fund/fund_xq.py +139 -109
- akshare/futures/cons.py +8 -31
- akshare/futures/cot.py +185 -137
- akshare/futures/futures_basis.py +97 -32
- akshare/futures/futures_comm_ctp.py +37 -0
- akshare/futures/futures_comm_qihuo.py +74 -45
- akshare/futures/futures_daily_bar.py +121 -184
- akshare/futures/futures_hf_em.py +66 -61
- akshare/futures/futures_hq_sina.py +79 -61
- akshare/futures/futures_index_ccidx.py +6 -3
- akshare/futures/futures_inventory_99.py +61 -272
- akshare/futures/futures_news_shmet.py +4 -2
- akshare/futures/futures_roll_yield.py +12 -25
- akshare/futures/futures_spot_stock_em.py +19 -13
- akshare/futures/futures_stock_js.py +14 -12
- akshare/futures/futures_to_spot.py +38 -33
- akshare/futures/futures_warehouse_receipt.py +75 -71
- akshare/futures/futures_zh_sina.py +5 -5
- akshare/futures/symbol_var.py +18 -13
- akshare/futures_derivative/futures_contract_info_czce.py +60 -52
- akshare/futures_derivative/futures_contract_info_ine.py +43 -34
- akshare/futures_derivative/futures_contract_info_shfe.py +46 -35
- akshare/futures_derivative/futures_cot_sina.py +26 -19
- akshare/futures_derivative/futures_spot_sys.py +21 -8
- akshare/fx/currency_investing.py +19 -285
- akshare/index/index_cflp.py +29 -26
- akshare/index/index_cni.py +86 -88
- akshare/index/index_cons.py +26 -10
- akshare/index/index_cx.py +248 -47
- akshare/index/index_drewry.py +17 -16
- akshare/index/index_option_qvix.py +329 -0
- akshare/index/index_research_fund_sw.py +134 -0
- akshare/index/{index_sw_research.py → index_research_sw.py} +122 -58
- akshare/index/index_spot.py +9 -5
- akshare/index/index_stock_hk.py +35 -16
- akshare/index/index_stock_us_sina.py +1 -1
- akshare/index/index_stock_zh.py +180 -89
- akshare/index/index_stock_zh_csindex.py +15 -369
- akshare/index/index_sw.py +62 -34
- akshare/index/index_yw.py +46 -23
- akshare/index/index_zh_a_scope.py +48 -0
- akshare/index/index_zh_em.py +6 -4
- akshare/interest_rate/interbank_rate_em.py +14 -9
- akshare/movie/artist_yien.py +32 -5
- akshare/movie/movie_yien.py +92 -18
- akshare/movie/video_yien.py +28 -5
- akshare/news/news_baidu.py +78 -44
- akshare/news/news_cctv.py +38 -38
- akshare/news/news_stock.py +6 -3
- akshare/nlp/nlp_interface.py +7 -8
- akshare/option/cons.py +11 -11
- akshare/option/option_comm_qihuo.py +86 -0
- akshare/option/option_commodity.py +178 -51
- akshare/option/option_daily_stats_sse_szse.py +146 -0
- akshare/option/option_em.py +147 -138
- akshare/option/option_finance_sina.py +160 -137
- akshare/option/option_lhb_em.py +62 -56
- akshare/option/option_risk_indicator_sse.py +17 -14
- akshare/other/other_car_cpca.py +934 -0
- akshare/other/{other_car.py → other_car_gasgoo.py} +15 -54
- akshare/qdii/__init__.py +0 -0
- akshare/qdii/qdii_jsl.py +233 -0
- akshare/request.py +117 -0
- akshare/spot/spot_hog_soozhu.py +232 -0
- akshare/spot/spot_price_qh.py +121 -0
- akshare/spot/spot_sge.py +63 -10
- akshare/stock/stock_allotment_cninfo.py +10 -9
- akshare/stock/stock_board_concept_em.py +23 -14
- akshare/stock/stock_board_industry_em.py +40 -34
- 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 +12 -6
- akshare/stock/stock_dzjy_em.py +347 -260
- akshare/stock/stock_fund_em.py +332 -84
- akshare/stock/stock_hk_famous.py +108 -0
- akshare/stock/stock_hk_sina.py +8 -7
- akshare/stock/stock_hold_control_cninfo.py +100 -15
- akshare/stock/stock_hold_control_em.py +4 -3
- akshare/stock/stock_hold_num_cninfo.py +18 -12
- akshare/stock/stock_hot_rank_em.py +2 -1
- akshare/stock/stock_hot_search_baidu.py +5 -2
- akshare/stock/stock_industry_cninfo.py +24 -18
- akshare/stock/stock_industry_pe_cninfo.py +45 -31
- akshare/stock/stock_industry_sw.py +9 -10
- akshare/stock/stock_info.py +25 -15
- akshare/stock/stock_info_em.py +5 -2
- akshare/stock/stock_intraday_em.py +5 -2
- akshare/stock/stock_intraday_sina.py +22 -18
- 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_rank_forecast.py +8 -6
- akshare/stock/stock_share_changes_cninfo.py +18 -14
- akshare/stock/stock_share_hold.py +24 -19
- akshare/stock/stock_summary.py +54 -26
- akshare/stock/stock_us_famous.py +15 -6
- akshare/stock/stock_us_pink.py +7 -5
- akshare/stock/stock_us_sina.py +15 -12
- akshare/stock/stock_xq.py +38 -12
- akshare/stock/stock_zh_a_sina.py +53 -78
- akshare/stock/stock_zh_b_sina.py +32 -55
- akshare/stock/stock_zh_kcb_report.py +11 -9
- akshare/stock/stock_zh_kcb_sina.py +67 -64
- 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 +12 -9
- akshare/stock_feature/stock_a_pe_and_pb.py +27 -6
- akshare/stock_feature/stock_account_em.py +58 -40
- akshare/stock_feature/stock_analyst_em.py +36 -27
- akshare/stock_feature/stock_board_industry_ths.py +136 -400
- akshare/stock_feature/stock_comment_em.py +118 -85
- akshare/stock_feature/stock_concept_futu.py +183 -0
- akshare/stock_feature/stock_cyq_em.py +58 -54
- akshare/stock_feature/stock_disclosure_cninfo.py +147 -102
- akshare/stock_feature/stock_esg_sina.py +216 -11
- akshare/stock_feature/stock_fhps_em.py +60 -25
- akshare/stock_feature/stock_fhps_ths.py +25 -6
- akshare/stock_feature/stock_fund_flow.py +38 -25
- akshare/stock_feature/stock_gdfx_em.py +180 -95
- akshare/stock_feature/stock_gdhs.py +73 -49
- akshare/stock_feature/stock_gpzy_em.py +78 -46
- akshare/stock_feature/stock_hist_em.py +55 -23
- akshare/stock_feature/stock_hk_valuation_baidu.py +20 -8
- akshare/stock_feature/stock_hsgt_em.py +184 -452
- akshare/stock_feature/stock_info.py +52 -29
- akshare/stock_feature/stock_inner_trade_xq.py +39 -31
- akshare/stock_feature/stock_irm_cninfo.py +32 -9
- akshare/stock_feature/stock_jgdy_em.py +41 -38
- akshare/stock_feature/stock_lh_yybpm.py +36 -37
- akshare/stock_feature/stock_lhb_em.py +135 -71
- akshare/stock_feature/stock_lhb_sina.py +93 -46
- akshare/stock_feature/stock_margin_em.py +102 -0
- akshare/stock_feature/{stock_sse_margin.py → stock_margin_sse.py} +21 -15
- akshare/stock_feature/{stock_szse_margin.py → stock_margin_szse.py} +23 -19
- akshare/stock_feature/stock_market_legu.py +13 -8
- akshare/stock_feature/stock_pankou_em.py +72 -34
- akshare/stock_feature/stock_report_em.py +244 -54
- akshare/stock_feature/stock_research_report_em.py +48 -19
- akshare/stock_feature/stock_sns_sseinfo.py +15 -12
- akshare/stock_feature/stock_sy_em.py +86 -33
- akshare/stock_feature/stock_technology_ths.py +152 -120
- akshare/stock_feature/stock_tfp_em.py +35 -13
- akshare/stock_feature/stock_three_report_em.py +119 -77
- akshare/stock_feature/stock_ttm_lyr.py +4 -7
- akshare/stock_feature/stock_value_em.py +83 -0
- akshare/stock_feature/stock_wencai.py +21 -9
- akshare/stock_feature/stock_yjyg_em.py +63 -28
- akshare/stock_feature/stock_zf_pg.py +61 -38
- akshare/stock_feature/stock_zh_valuation_baidu.py +3 -2
- akshare/stock_feature/stock_ztb_em.py +62 -40
- akshare/stock_fundamental/stock_finance.py +150 -58
- akshare/stock_fundamental/stock_finance_ths.py +116 -31
- akshare/stock_fundamental/stock_mda_ym.py +5 -3
- akshare/stock_fundamental/stock_notice.py +29 -15
- akshare/stock_fundamental/stock_profit_forecast_em.py +31 -13
- akshare/stock_fundamental/stock_profit_forecast_ths.py +19 -10
- akshare/stock_fundamental/stock_register_em.py +448 -0
- akshare/stock_fundamental/stock_restricted_em.py +79 -32
- akshare/stock_fundamental/stock_zygc.py +10 -8
- akshare/stock_fundamental/stock_zyjs_ths.py +5 -3
- akshare/tool/trade_date_hist.py +4 -3
- akshare/utils/cons.py +10 -0
- akshare/utils/context.py +43 -0
- akshare/utils/demjson.py +2 -2
- akshare/utils/func.py +26 -0
- akshare/utils/tqdm.py +13 -3
- {akshare-1.12.99.dist-info → akshare-1.15.73.dist-info}/METADATA +52 -69
- akshare-1.15.73.dist-info/RECORD +385 -0
- {akshare-1.12.99.dist-info → akshare-1.15.73.dist-info}/WHEEL +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/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 -71
- akshare/index/index_investing.py +0 -232
- akshare/sport/sport_olympic_winter.py +0 -39
- akshare/stock_feature/stock_board_concept_ths.py +0 -422
- akshare/stock_fundamental/stock_register.py +0 -292
- akshare-1.12.99.dist-info/RECORD +0 -374
- {akshare-1.12.99.dist-info → akshare-1.15.73.dist-info}/LICENSE +0 -0
- {akshare-1.12.99.dist-info → akshare-1.15.73.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# -*- coding:utf-8 -*-
|
|
3
|
+
"""
|
|
4
|
+
Date: 2024/7/26 18:30
|
|
5
|
+
Desc: 东方财富网-行情中心-港股市场-知名港股
|
|
6
|
+
https://quote.eastmoney.com/center/gridlist.html#hk_wellknown
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import pandas as pd
|
|
10
|
+
import requests
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def stock_hk_famous_spot_em() -> pd.DataFrame:
|
|
14
|
+
"""
|
|
15
|
+
东方财富网-行情中心-港股市场-知名港股
|
|
16
|
+
https://quote.eastmoney.com/center/gridlist.html#hk_wellknown
|
|
17
|
+
:return: 知名美股实时行情
|
|
18
|
+
:rtype: pandas.DataFrame
|
|
19
|
+
"""
|
|
20
|
+
url = "https://69.push2.eastmoney.com/api/qt/clist/get"
|
|
21
|
+
params = {
|
|
22
|
+
"pn": "1",
|
|
23
|
+
"pz": "2000",
|
|
24
|
+
"po": "1",
|
|
25
|
+
"np": "1",
|
|
26
|
+
"ut": "bd1d9ddb04089700cf9c27f6f7426281",
|
|
27
|
+
"fltt": "2",
|
|
28
|
+
"invt": "2",
|
|
29
|
+
"dect": "1",
|
|
30
|
+
"wbp2u": "|0|0|0|web",
|
|
31
|
+
"fid": "f3",
|
|
32
|
+
"fs": "b:DLMK0106",
|
|
33
|
+
"fields": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,"
|
|
34
|
+
"f25,f26,f22,f33,f11,f62,f128,f136,f115,f152",
|
|
35
|
+
"_": "1631271634231",
|
|
36
|
+
}
|
|
37
|
+
r = requests.get(url, params=params)
|
|
38
|
+
data_json = r.json()
|
|
39
|
+
temp_df = pd.DataFrame(data_json["data"]["diff"])
|
|
40
|
+
temp_df.columns = [
|
|
41
|
+
"_",
|
|
42
|
+
"最新价",
|
|
43
|
+
"涨跌幅",
|
|
44
|
+
"涨跌额",
|
|
45
|
+
"成交量",
|
|
46
|
+
"成交额",
|
|
47
|
+
"_",
|
|
48
|
+
"_",
|
|
49
|
+
"_",
|
|
50
|
+
"_",
|
|
51
|
+
"_",
|
|
52
|
+
"代码",
|
|
53
|
+
"编码",
|
|
54
|
+
"名称",
|
|
55
|
+
"最高",
|
|
56
|
+
"最低",
|
|
57
|
+
"今开",
|
|
58
|
+
"昨收",
|
|
59
|
+
"总市值",
|
|
60
|
+
"_",
|
|
61
|
+
"_",
|
|
62
|
+
"_",
|
|
63
|
+
"_",
|
|
64
|
+
"_",
|
|
65
|
+
"_",
|
|
66
|
+
"_",
|
|
67
|
+
"_",
|
|
68
|
+
"市盈率",
|
|
69
|
+
"_",
|
|
70
|
+
"_",
|
|
71
|
+
"_",
|
|
72
|
+
"_",
|
|
73
|
+
"_",
|
|
74
|
+
]
|
|
75
|
+
temp_df.reset_index(inplace=True)
|
|
76
|
+
temp_df["index"] = range(1, len(temp_df) + 1)
|
|
77
|
+
temp_df.rename(columns={"index": "序号"}, inplace=True)
|
|
78
|
+
temp_df = temp_df[
|
|
79
|
+
[
|
|
80
|
+
"序号",
|
|
81
|
+
"代码",
|
|
82
|
+
"名称",
|
|
83
|
+
"最新价",
|
|
84
|
+
"涨跌额",
|
|
85
|
+
"涨跌幅",
|
|
86
|
+
"今开",
|
|
87
|
+
"最高",
|
|
88
|
+
"最低",
|
|
89
|
+
"昨收",
|
|
90
|
+
"成交量",
|
|
91
|
+
"成交额",
|
|
92
|
+
]
|
|
93
|
+
]
|
|
94
|
+
temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce")
|
|
95
|
+
temp_df["涨跌额"] = pd.to_numeric(temp_df["涨跌额"], errors="coerce")
|
|
96
|
+
temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"], errors="coerce")
|
|
97
|
+
temp_df["今开"] = pd.to_numeric(temp_df["今开"], errors="coerce")
|
|
98
|
+
temp_df["最高"] = pd.to_numeric(temp_df["最高"], errors="coerce")
|
|
99
|
+
temp_df["最低"] = pd.to_numeric(temp_df["最低"], errors="coerce")
|
|
100
|
+
temp_df["昨收"] = pd.to_numeric(temp_df["昨收"], errors="coerce")
|
|
101
|
+
temp_df["成交量"] = pd.to_numeric(temp_df["成交量"], errors="coerce")
|
|
102
|
+
temp_df["成交额"] = pd.to_numeric(temp_df["成交额"], errors="coerce")
|
|
103
|
+
return temp_df
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
if __name__ == "__main__":
|
|
107
|
+
stock_hk_famous_spot_em_df = stock_hk_famous_spot_em()
|
|
108
|
+
print(stock_hk_famous_spot_em_df)
|
akshare/stock/stock_hk_sina.py
CHANGED
|
@@ -5,9 +5,10 @@ Date: 2023/9/2 19:00
|
|
|
5
5
|
Desc: 新浪财经-港股-实时行情数据和历史行情数据(包含前复权和后复权因子)
|
|
6
6
|
http://stock.finance.sina.com.cn/hkstock/quotes/00700.html
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
import pandas as pd
|
|
9
10
|
import requests
|
|
10
|
-
|
|
11
|
+
import py_mini_racer
|
|
11
12
|
|
|
12
13
|
from akshare.stock.cons import (
|
|
13
14
|
hk_js_decode,
|
|
@@ -95,7 +96,7 @@ def stock_hk_daily(symbol: str = "00981", adjust: str = "") -> pd.DataFrame:
|
|
|
95
96
|
data_df.reset_index(inplace=True)
|
|
96
97
|
data_df["date"] = pd.to_datetime(data_df["date"]).dt.date
|
|
97
98
|
return data_df
|
|
98
|
-
except SyntaxError
|
|
99
|
+
except SyntaxError:
|
|
99
100
|
data_df.reset_index(inplace=True)
|
|
100
101
|
data_df["date"] = pd.to_datetime(data_df["date"]).dt.date
|
|
101
102
|
return data_df
|
|
@@ -114,7 +115,7 @@ def stock_hk_daily(symbol: str = "00981", adjust: str = "") -> pd.DataFrame:
|
|
|
114
115
|
try:
|
|
115
116
|
# try for pandas >= 2.1.0
|
|
116
117
|
new_range.ffill(inplace=True)
|
|
117
|
-
except Exception
|
|
118
|
+
except Exception:
|
|
118
119
|
try:
|
|
119
120
|
new_range.fillna(method="ffill", inplace=True)
|
|
120
121
|
except Exception as e:
|
|
@@ -127,7 +128,7 @@ def stock_hk_daily(symbol: str = "00981", adjust: str = "") -> pd.DataFrame:
|
|
|
127
128
|
try:
|
|
128
129
|
# try for pandas >= 2.1.0
|
|
129
130
|
temp_df.ffill(inplace=True)
|
|
130
|
-
except Exception
|
|
131
|
+
except Exception:
|
|
131
132
|
try:
|
|
132
133
|
# try for pandas < 2.1.0
|
|
133
134
|
temp_df.fillna(method="ffill", inplace=True)
|
|
@@ -160,7 +161,7 @@ def stock_hk_daily(symbol: str = "00981", adjust: str = "") -> pd.DataFrame:
|
|
|
160
161
|
data_df["date"] = pd.to_datetime(data_df["date"]).dt.date
|
|
161
162
|
return data_df
|
|
162
163
|
|
|
163
|
-
except SyntaxError
|
|
164
|
+
except SyntaxError:
|
|
164
165
|
data_df.reset_index(inplace=True)
|
|
165
166
|
data_df["date"] = pd.to_datetime(data_df["date"]).dt.date
|
|
166
167
|
return data_df
|
|
@@ -178,7 +179,7 @@ def stock_hk_daily(symbol: str = "00981", adjust: str = "") -> pd.DataFrame:
|
|
|
178
179
|
try:
|
|
179
180
|
# try for pandas >= 2.1.0
|
|
180
181
|
new_range.ffill(inplace=True)
|
|
181
|
-
except Exception
|
|
182
|
+
except Exception:
|
|
182
183
|
try:
|
|
183
184
|
# try for pandas < 2.1.0
|
|
184
185
|
new_range.fillna(method="ffill", inplace=True)
|
|
@@ -192,7 +193,7 @@ def stock_hk_daily(symbol: str = "00981", adjust: str = "") -> pd.DataFrame:
|
|
|
192
193
|
try:
|
|
193
194
|
# try for pandas >= 2.1.0
|
|
194
195
|
temp_df.ffill(inplace=True)
|
|
195
|
-
except Exception
|
|
196
|
+
except Exception:
|
|
196
197
|
try:
|
|
197
198
|
# try for pandas < 2.1.0
|
|
198
199
|
temp_df.fillna(method="ffill", inplace=True)
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2024/7/24 23:30
|
|
5
5
|
Desc: 巨潮资讯-数据中心-专题统计-股东股本-实际控制人持股变动
|
|
6
|
-
|
|
6
|
+
https://webapi.cninfo.com.cn/#/thematicStatistics
|
|
7
7
|
|
|
8
8
|
巨潮资讯-数据中心-专题统计-股东股本-高管持股变动明细
|
|
9
|
-
|
|
9
|
+
https://webapi.cninfo.com.cn/#/thematicStatistics
|
|
10
10
|
"""
|
|
11
|
+
|
|
11
12
|
import datetime
|
|
12
13
|
|
|
13
14
|
import pandas as pd
|
|
15
|
+
import py_mini_racer
|
|
14
16
|
import requests
|
|
15
|
-
from py_mini_racer import py_mini_racer
|
|
16
17
|
|
|
17
18
|
from akshare.datasets import get_ths_js
|
|
18
19
|
|
|
@@ -26,7 +27,7 @@ def _get_file_content_cninfo(file: str = "cninfo.js") -> str:
|
|
|
26
27
|
:rtype: str
|
|
27
28
|
"""
|
|
28
29
|
setting_file_path = get_ths_js(file)
|
|
29
|
-
with open(setting_file_path) as f:
|
|
30
|
+
with open(setting_file_path, encoding="utf-8") as f:
|
|
30
31
|
file_data = f.read()
|
|
31
32
|
return file_data
|
|
32
33
|
|
|
@@ -34,7 +35,7 @@ def _get_file_content_cninfo(file: str = "cninfo.js") -> str:
|
|
|
34
35
|
def stock_hold_control_cninfo(symbol: str = "全部") -> pd.DataFrame:
|
|
35
36
|
"""
|
|
36
37
|
巨潮资讯-数据中心-专题统计-股东股本-实际控制人持股变动
|
|
37
|
-
|
|
38
|
+
https://webapi.cninfo.com.cn/#/thematicStatistics
|
|
38
39
|
:param symbol: choice of {"单独控制", "实际控制人", "一致行动人", "家族控制", "全部"}; 从 2010 开始
|
|
39
40
|
:type symbol: str
|
|
40
41
|
:return: 实际控制人持股变动
|
|
@@ -47,7 +48,7 @@ def stock_hold_control_cninfo(symbol: str = "全部") -> pd.DataFrame:
|
|
|
47
48
|
"家族控制": "069004",
|
|
48
49
|
"全部": "",
|
|
49
50
|
}
|
|
50
|
-
url = "
|
|
51
|
+
url = "https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1033"
|
|
51
52
|
js_code = py_mini_racer.MiniRacer()
|
|
52
53
|
js_content = _get_file_content_cninfo("cninfo.js")
|
|
53
54
|
js_code.eval(js_content)
|
|
@@ -60,11 +61,12 @@ def stock_hold_control_cninfo(symbol: str = "全部") -> pd.DataFrame:
|
|
|
60
61
|
"Cache-Control": "no-cache",
|
|
61
62
|
"Content-Length": "0",
|
|
62
63
|
"Host": "webapi.cninfo.com.cn",
|
|
63
|
-
"Origin": "
|
|
64
|
+
"Origin": "https://webapi.cninfo.com.cn",
|
|
64
65
|
"Pragma": "no-cache",
|
|
65
66
|
"Proxy-Connection": "keep-alive",
|
|
66
|
-
"Referer": "
|
|
67
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
67
|
+
"Referer": "https://webapi.cninfo.com.cn/",
|
|
68
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
69
|
+
"Chrome/93.0.4577.63 Safari/537.36",
|
|
68
70
|
"X-Requested-With": "XMLHttpRequest",
|
|
69
71
|
}
|
|
70
72
|
params = {
|
|
@@ -104,7 +106,7 @@ def stock_hold_control_cninfo(symbol: str = "全部") -> pd.DataFrame:
|
|
|
104
106
|
def stock_hold_management_detail_cninfo(symbol: str = "增持") -> pd.DataFrame:
|
|
105
107
|
"""
|
|
106
108
|
巨潮资讯-数据中心-专题统计-股东股本-高管持股变动明细
|
|
107
|
-
|
|
109
|
+
https://webapi.cninfo.com.cn/#/thematicStatistics
|
|
108
110
|
:param symbol: choice of {"增持", "减持"}
|
|
109
111
|
:type symbol: str
|
|
110
112
|
:return: 高管持股变动明细
|
|
@@ -115,7 +117,7 @@ def stock_hold_management_detail_cninfo(symbol: str = "增持") -> pd.DataFrame:
|
|
|
115
117
|
"减持": "S",
|
|
116
118
|
}
|
|
117
119
|
current_date = datetime.datetime.now().date().isoformat()
|
|
118
|
-
url = "
|
|
120
|
+
url = "https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1030"
|
|
119
121
|
js_code = py_mini_racer.MiniRacer()
|
|
120
122
|
js_content = _get_file_content_cninfo("cninfo.js")
|
|
121
123
|
js_code.eval(js_content)
|
|
@@ -128,11 +130,12 @@ def stock_hold_management_detail_cninfo(symbol: str = "增持") -> pd.DataFrame:
|
|
|
128
130
|
"Content-Length": "0",
|
|
129
131
|
"Host": "webapi.cninfo.com.cn",
|
|
130
132
|
"Accept-Enckey": mcode,
|
|
131
|
-
"Origin": "
|
|
133
|
+
"Origin": "https://webapi.cninfo.com.cn",
|
|
132
134
|
"Pragma": "no-cache",
|
|
133
135
|
"Proxy-Connection": "keep-alive",
|
|
134
|
-
"Referer": "
|
|
135
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
136
|
+
"Referer": "https://webapi.cninfo.com.cn/",
|
|
137
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
138
|
+
"Chrome/93.0.4577.63 Safari/537.36",
|
|
136
139
|
"X-Requested-With": "XMLHttpRequest",
|
|
137
140
|
}
|
|
138
141
|
params = {
|
|
@@ -192,6 +195,85 @@ def stock_hold_management_detail_cninfo(symbol: str = "增持") -> pd.DataFrame:
|
|
|
192
195
|
return temp_df
|
|
193
196
|
|
|
194
197
|
|
|
198
|
+
def stock_hold_change_cninfo(symbol: str = "全部") -> pd.DataFrame:
|
|
199
|
+
"""
|
|
200
|
+
巨潮资讯-数据中心-专题统计-股东股本-股本变动
|
|
201
|
+
https://webapi.cninfo.com.cn/#/thematicStatistics
|
|
202
|
+
:param symbol: choice of {"深市主板", "沪市", "创业板", "科创板", "北交所", "全部"}
|
|
203
|
+
:type symbol: str
|
|
204
|
+
:return: 股本变动
|
|
205
|
+
:rtype: pandas.DataFrame
|
|
206
|
+
"""
|
|
207
|
+
symbol_map = {
|
|
208
|
+
"深市主板": "012002",
|
|
209
|
+
"沪市": "012001",
|
|
210
|
+
"创业板": "012015",
|
|
211
|
+
"科创板": "012029",
|
|
212
|
+
"北交所": "012046",
|
|
213
|
+
"全部": "",
|
|
214
|
+
}
|
|
215
|
+
url = "https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1029"
|
|
216
|
+
js_code = py_mini_racer.MiniRacer()
|
|
217
|
+
js_content = _get_file_content_cninfo("cninfo.js")
|
|
218
|
+
js_code.eval(js_content)
|
|
219
|
+
mcode = js_code.call("getResCode1")
|
|
220
|
+
headers = {
|
|
221
|
+
"Accept": "/",
|
|
222
|
+
"Accept-Enckey": mcode,
|
|
223
|
+
"Accept-Encoding": "gzip, deflate",
|
|
224
|
+
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
|
|
225
|
+
"Cache-Control": "no-cache",
|
|
226
|
+
"Content-Length": "0",
|
|
227
|
+
"Host": "webapi.cninfo.com.cn",
|
|
228
|
+
"Origin": "https://webapi.cninfo.com.cn",
|
|
229
|
+
"Pragma": "no-cache",
|
|
230
|
+
"Proxy-Connection": "keep-alive",
|
|
231
|
+
"Referer": "https://webapi.cninfo.com.cn/",
|
|
232
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
233
|
+
"Chrome/93.0.4577.63 Safari/537.36",
|
|
234
|
+
"X-Requested-With": "XMLHttpRequest",
|
|
235
|
+
}
|
|
236
|
+
params = {
|
|
237
|
+
"market": symbol_map[symbol],
|
|
238
|
+
}
|
|
239
|
+
r = requests.get(url, headers=headers, params=params)
|
|
240
|
+
data_json = r.json()
|
|
241
|
+
temp_df = pd.DataFrame(data_json["records"])
|
|
242
|
+
temp_df.columns = [
|
|
243
|
+
"已流通股份",
|
|
244
|
+
"总股本",
|
|
245
|
+
"交易市场",
|
|
246
|
+
"证券简称",
|
|
247
|
+
"公告日期",
|
|
248
|
+
"变动原因",
|
|
249
|
+
"证券代码",
|
|
250
|
+
"变动日期",
|
|
251
|
+
"流通受限股份",
|
|
252
|
+
"已流通比例",
|
|
253
|
+
]
|
|
254
|
+
temp_df = temp_df[
|
|
255
|
+
[
|
|
256
|
+
"证券代码",
|
|
257
|
+
"证券简称",
|
|
258
|
+
"交易市场",
|
|
259
|
+
"公告日期",
|
|
260
|
+
"变动日期",
|
|
261
|
+
"变动原因",
|
|
262
|
+
"总股本",
|
|
263
|
+
"已流通股份",
|
|
264
|
+
"已流通比例",
|
|
265
|
+
"流通受限股份",
|
|
266
|
+
]
|
|
267
|
+
]
|
|
268
|
+
temp_df["变动日期"] = pd.to_datetime(temp_df["变动日期"], errors="coerce").dt.date
|
|
269
|
+
temp_df["公告日期"] = pd.to_datetime(temp_df["公告日期"], errors="coerce").dt.date
|
|
270
|
+
temp_df["总股本"] = pd.to_numeric(temp_df["总股本"], errors="coerce")
|
|
271
|
+
temp_df["已流通股份"] = pd.to_numeric(temp_df["已流通股份"], errors="coerce")
|
|
272
|
+
temp_df["已流通比例"] = pd.to_numeric(temp_df["已流通比例"], errors="coerce")
|
|
273
|
+
temp_df["流通受限股份"] = pd.to_numeric(temp_df["流通受限股份"], errors="coerce")
|
|
274
|
+
return temp_df
|
|
275
|
+
|
|
276
|
+
|
|
195
277
|
if __name__ == "__main__":
|
|
196
278
|
stock_hold_control_cninfo_df = stock_hold_control_cninfo(symbol="全部")
|
|
197
279
|
print(stock_hold_control_cninfo_df)
|
|
@@ -200,3 +282,6 @@ if __name__ == "__main__":
|
|
|
200
282
|
symbol="增持"
|
|
201
283
|
)
|
|
202
284
|
print(stock_hold_management_detail_cninfo_df)
|
|
285
|
+
|
|
286
|
+
stock_hold_change_cninfo_df = stock_hold_change_cninfo(symbol="全部")
|
|
287
|
+
print(stock_hold_change_cninfo_df)
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2024/5/19 18:30
|
|
5
5
|
Desc: 东方财富网-数据中心-特色数据-高管持股
|
|
6
6
|
https://data.eastmoney.com/executive/list.html
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
import pandas as pd
|
|
9
10
|
import requests
|
|
10
11
|
from tqdm import tqdm
|
|
@@ -47,10 +48,10 @@ def stock_hold_management_detail_em() -> pd.DataFrame:
|
|
|
47
48
|
"pageNum": page,
|
|
48
49
|
}
|
|
49
50
|
)
|
|
50
|
-
r = requests.
|
|
51
|
+
r = requests.get(url, params=params)
|
|
51
52
|
data_json = r.json()
|
|
52
53
|
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
53
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
54
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
54
55
|
|
|
55
56
|
big_df.rename(
|
|
56
57
|
columns={
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2024/7/24 23:30
|
|
5
5
|
Desc: 巨潮资讯-数据中心-专题统计-股东股本-股东人数及持股集中度
|
|
6
|
-
|
|
6
|
+
https://webapi.cninfo.com.cn/#/thematicStatistics
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
import pandas as pd
|
|
10
|
+
import py_mini_racer
|
|
9
11
|
import requests
|
|
10
|
-
from py_mini_racer import py_mini_racer
|
|
11
12
|
|
|
12
13
|
from akshare.datasets import get_ths_js
|
|
13
14
|
|
|
@@ -21,7 +22,7 @@ def _get_file_content_ths(file: str = "cninfo.js") -> str:
|
|
|
21
22
|
:rtype: str
|
|
22
23
|
"""
|
|
23
24
|
setting_file_path = get_ths_js(file)
|
|
24
|
-
with open(setting_file_path) as f:
|
|
25
|
+
with open(setting_file_path, encoding="utf-8") as f:
|
|
25
26
|
file_data = f.read()
|
|
26
27
|
return file_data
|
|
27
28
|
|
|
@@ -29,13 +30,13 @@ def _get_file_content_ths(file: str = "cninfo.js") -> str:
|
|
|
29
30
|
def stock_hold_num_cninfo(date: str = "20210630") -> pd.DataFrame:
|
|
30
31
|
"""
|
|
31
32
|
巨潮资讯-数据中心-专题统计-股东股本-股东人数及持股集中度
|
|
32
|
-
|
|
33
|
+
https://webapi.cninfo.com.cn/#/thematicStatistics
|
|
33
34
|
:param date: choice of {"XXXX0331", "XXXX0630", "XXXX0930", "XXXX1231"}; 从 20170331 开始
|
|
34
35
|
:type date: str
|
|
35
36
|
:return: 股东人数及持股集中度
|
|
36
37
|
:rtype: pandas.DataFrame
|
|
37
38
|
"""
|
|
38
|
-
url = "
|
|
39
|
+
url = "https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1034"
|
|
39
40
|
js_code = py_mini_racer.MiniRacer()
|
|
40
41
|
js_content = _get_file_content_ths("cninfo.js")
|
|
41
42
|
js_code.eval(js_content)
|
|
@@ -48,11 +49,12 @@ def stock_hold_num_cninfo(date: str = "20210630") -> pd.DataFrame:
|
|
|
48
49
|
"Cache-Control": "no-cache",
|
|
49
50
|
"Content-Length": "0",
|
|
50
51
|
"Host": "webapi.cninfo.com.cn",
|
|
51
|
-
"Origin": "
|
|
52
|
+
"Origin": "https://webapi.cninfo.com.cn",
|
|
52
53
|
"Pragma": "no-cache",
|
|
53
54
|
"Proxy-Connection": "keep-alive",
|
|
54
|
-
"Referer": "
|
|
55
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
55
|
+
"Referer": "https://webapi.cninfo.com.cn/",
|
|
56
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
57
|
+
"Chrome/93.0.4577.63 Safari/537.36",
|
|
56
58
|
"X-Requested-With": "XMLHttpRequest",
|
|
57
59
|
}
|
|
58
60
|
params = {
|
|
@@ -85,15 +87,19 @@ def stock_hold_num_cninfo(date: str = "20210630") -> pd.DataFrame:
|
|
|
85
87
|
"人均持股数量增幅",
|
|
86
88
|
]
|
|
87
89
|
]
|
|
88
|
-
temp_df["变动日期"] = pd.to_datetime(temp_df["变动日期"]).dt.date
|
|
90
|
+
temp_df["变动日期"] = pd.to_datetime(temp_df["变动日期"], errors="coerce").dt.date
|
|
89
91
|
temp_df["本期人均持股数量"] = pd.to_numeric(
|
|
90
92
|
temp_df["本期人均持股数量"], errors="coerce"
|
|
91
93
|
)
|
|
92
94
|
temp_df["股东人数增幅"] = pd.to_numeric(temp_df["股东人数增幅"], errors="coerce")
|
|
93
95
|
temp_df["上期股东人数"] = pd.to_numeric(temp_df["上期股东人数"], errors="coerce")
|
|
94
96
|
temp_df["本期股东人数"] = pd.to_numeric(temp_df["本期股东人数"], errors="coerce")
|
|
95
|
-
temp_df["人均持股数量增幅"] = pd.to_numeric(
|
|
96
|
-
|
|
97
|
+
temp_df["人均持股数量增幅"] = pd.to_numeric(
|
|
98
|
+
temp_df["人均持股数量增幅"], errors="coerce"
|
|
99
|
+
)
|
|
100
|
+
temp_df["上期人均持股数量"] = pd.to_numeric(
|
|
101
|
+
temp_df["上期人均持股数量"], errors="coerce"
|
|
102
|
+
)
|
|
97
103
|
return temp_df
|
|
98
104
|
|
|
99
105
|
|
|
@@ -5,6 +5,7 @@ Date: 2023/7/8 17:15
|
|
|
5
5
|
Desc: 东方财富个股人气榜
|
|
6
6
|
https://guba.eastmoney.com/rank/
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
import pandas as pd
|
|
9
10
|
import requests
|
|
10
11
|
|
|
@@ -190,7 +191,7 @@ def stock_hot_rank_relate_em(symbol: str = "SZ000665") -> pd.DataFrame:
|
|
|
190
191
|
temp_df.columns = ["时间", "-", "股票代码", "-", "相关股票代码", "涨跌幅", "-"]
|
|
191
192
|
temp_df = temp_df[["时间", "股票代码", "相关股票代码", "涨跌幅"]]
|
|
192
193
|
temp_df["涨跌幅"] = temp_df["涨跌幅"].str.strip("%")
|
|
193
|
-
temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"])
|
|
194
|
+
temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"], errors="coerce")
|
|
194
195
|
return temp_df
|
|
195
196
|
|
|
196
197
|
|
|
@@ -5,12 +5,15 @@ Date: 2023/4/21 14:19
|
|
|
5
5
|
Desc: 百度股市通-热搜股票
|
|
6
6
|
https://gushitong.baidu.com/expressnews
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
import pandas as pd
|
|
9
10
|
import requests
|
|
10
11
|
from datetime import datetime
|
|
11
12
|
|
|
12
13
|
|
|
13
|
-
def stock_hot_search_baidu(
|
|
14
|
+
def stock_hot_search_baidu(
|
|
15
|
+
symbol: str = "A股", date: str = "20240929", time: str = "今日"
|
|
16
|
+
):
|
|
14
17
|
"""
|
|
15
18
|
百度股市通-热搜股票
|
|
16
19
|
https://gushitong.baidu.com/expressnews
|
|
@@ -55,6 +58,6 @@ def stock_hot_search_baidu(symbol: str = "A股", date: str = "20230428", time: s
|
|
|
55
58
|
|
|
56
59
|
if __name__ == "__main__":
|
|
57
60
|
stock_hot_search_baidu_df = stock_hot_search_baidu(
|
|
58
|
-
symbol="A股", date="
|
|
61
|
+
symbol="A股", date="20240929", time="今日"
|
|
59
62
|
)
|
|
60
63
|
print(stock_hot_search_baidu_df)
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
# -*- coding:utf-8 -*-
|
|
2
2
|
# !/usr/bin/env python
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2024/5/19 18:34
|
|
5
5
|
Desc: 巨潮资讯-行业分类数据
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
https://webapi.cninfo.com.cn/#/apiDoc
|
|
7
|
+
https://webapi.cninfo.com.cn/api/stock/p_stock2110
|
|
8
8
|
"""
|
|
9
|
+
|
|
9
10
|
import numpy as np
|
|
10
11
|
import pandas as pd
|
|
11
12
|
import requests
|
|
12
|
-
|
|
13
|
+
import py_mini_racer
|
|
13
14
|
|
|
14
15
|
from akshare.datasets import get_ths_js
|
|
15
16
|
|
|
@@ -23,7 +24,7 @@ def _get_file_content_ths(file: str = "cninfo.js") -> str:
|
|
|
23
24
|
:rtype: str
|
|
24
25
|
"""
|
|
25
26
|
setting_file_path = get_ths_js(file)
|
|
26
|
-
with open(setting_file_path) as f:
|
|
27
|
+
with open(setting_file_path, encoding="utf-8") as f:
|
|
27
28
|
file_data = f.read()
|
|
28
29
|
return file_data
|
|
29
30
|
|
|
@@ -31,9 +32,10 @@ def _get_file_content_ths(file: str = "cninfo.js") -> str:
|
|
|
31
32
|
def stock_industry_category_cninfo(symbol: str = "巨潮行业分类标准") -> pd.DataFrame:
|
|
32
33
|
"""
|
|
33
34
|
巨潮资讯-行业分类数据
|
|
34
|
-
|
|
35
|
+
https://webapi.cninfo.com.cn/#/apiDoc
|
|
35
36
|
查询 p_public0002 接口
|
|
36
|
-
:param symbol: 行业类型; choice of {"证监会行业分类标准", "巨潮行业分类标准", "申银万国行业分类标准",
|
|
37
|
+
:param symbol: 行业类型; choice of {"证监会行业分类标准", "巨潮行业分类标准", "申银万国行业分类标准",
|
|
38
|
+
"新财富行业分类标准", "国资委行业分类标准", "巨潮产业细分标准", "天相行业分类标准", "全球行业分类标准"}
|
|
37
39
|
:type symbol: str
|
|
38
40
|
:return: 行业分类数据
|
|
39
41
|
:rtype: pandas.DataFrame
|
|
@@ -48,7 +50,7 @@ def stock_industry_category_cninfo(symbol: str = "巨潮行业分类标准") ->
|
|
|
48
50
|
"天相行业分类标准": "008007",
|
|
49
51
|
"全球行业分类标准": "008008",
|
|
50
52
|
}
|
|
51
|
-
url = "
|
|
53
|
+
url = "https://webapi.cninfo.com.cn/api/stock/p_public0002"
|
|
52
54
|
params = {"indcode": "", "indtype": symbol_map[symbol], "format": "json"}
|
|
53
55
|
js_code = py_mini_racer.MiniRacer()
|
|
54
56
|
js_content = _get_file_content_ths("cninfo.js")
|
|
@@ -62,11 +64,12 @@ def stock_industry_category_cninfo(symbol: str = "巨潮行业分类标准") ->
|
|
|
62
64
|
"Content-Length": "0",
|
|
63
65
|
"Host": "webapi.cninfo.com.cn",
|
|
64
66
|
"Accept-Enckey": mcode,
|
|
65
|
-
"Origin": "
|
|
67
|
+
"Origin": "https://webapi.cninfo.com.cn",
|
|
66
68
|
"Pragma": "no-cache",
|
|
67
69
|
"Proxy-Connection": "keep-alive",
|
|
68
|
-
"Referer": "
|
|
69
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
70
|
+
"Referer": "https://webapi.cninfo.com.cn/",
|
|
71
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
72
|
+
"Chrome/93.0.4577.63 Safari/537.36",
|
|
70
73
|
"X-Requested-With": "XMLHttpRequest",
|
|
71
74
|
}
|
|
72
75
|
r = requests.get(url, params=params, headers=headers)
|
|
@@ -89,11 +92,13 @@ def stock_industry_category_cninfo(symbol: str = "巨潮行业分类标准") ->
|
|
|
89
92
|
g = tmp.groupby("len")
|
|
90
93
|
level = 0
|
|
91
94
|
for k in g.groups.keys():
|
|
92
|
-
temp_df.loc[temp_df["类目编码"].isin(g.get_group(k)["类目编码"]), "Level"] =
|
|
95
|
+
temp_df.loc[temp_df["类目编码"].isin(g.get_group(k)["类目编码"]), "Level"] = (
|
|
96
|
+
level
|
|
97
|
+
)
|
|
93
98
|
level += 1
|
|
94
99
|
temp_df["Level"] = temp_df["Level"].astype(int)
|
|
95
100
|
temp_df.rename(columns={"Level": "分级"}, inplace=True)
|
|
96
|
-
temp_df["终止日期"] = pd.to_datetime(temp_df["终止日期"]).dt.date
|
|
101
|
+
temp_df["终止日期"] = pd.to_datetime(temp_df["终止日期"], errors="coerce").dt.date
|
|
97
102
|
return temp_df
|
|
98
103
|
|
|
99
104
|
|
|
@@ -104,7 +109,7 @@ def stock_industry_change_cninfo(
|
|
|
104
109
|
) -> pd.DataFrame:
|
|
105
110
|
"""
|
|
106
111
|
巨潮资讯-上市公司行业归属的变动情况
|
|
107
|
-
|
|
112
|
+
https://webapi.cninfo.com.cn/#/apiDoc
|
|
108
113
|
查询 p_stock2110 接口
|
|
109
114
|
:param symbol: 股票代码
|
|
110
115
|
:type symbol: str
|
|
@@ -115,7 +120,7 @@ def stock_industry_change_cninfo(
|
|
|
115
120
|
:return: 行业归属的变动情况
|
|
116
121
|
:rtype: pandas.DataFrame
|
|
117
122
|
"""
|
|
118
|
-
url = "
|
|
123
|
+
url = "https://webapi.cninfo.com.cn/api/stock/p_stock2110"
|
|
119
124
|
params = {
|
|
120
125
|
"scode": symbol,
|
|
121
126
|
"sdate": "-".join([start_date[:4], start_date[4:6], start_date[6:]]),
|
|
@@ -134,11 +139,12 @@ def stock_industry_change_cninfo(
|
|
|
134
139
|
"Content-Length": "0",
|
|
135
140
|
"Host": "webapi.cninfo.com.cn",
|
|
136
141
|
"Accept-Enckey": mcode,
|
|
137
|
-
"Origin": "
|
|
142
|
+
"Origin": "https://webapi.cninfo.com.cn",
|
|
138
143
|
"Pragma": "no-cache",
|
|
139
144
|
"Proxy-Connection": "keep-alive",
|
|
140
|
-
"Referer": "
|
|
141
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
145
|
+
"Referer": "https://webapi.cninfo.com.cn/",
|
|
146
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
147
|
+
"Chrome/93.0.4577.63 Safari/537.36",
|
|
142
148
|
"X-Requested-With": "XMLHttpRequest",
|
|
143
149
|
}
|
|
144
150
|
r = requests.post(url, params=params, headers=headers)
|