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
akshare/index/index_cni.py
CHANGED
|
@@ -5,6 +5,7 @@ Date: 2024/1/14 18:00
|
|
|
5
5
|
Desc: 国证指数
|
|
6
6
|
http://www.cnindex.com.cn/index.html
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
import zipfile
|
|
9
10
|
from io import BytesIO
|
|
10
11
|
|
|
@@ -68,14 +69,16 @@ def index_all_cni() -> pd.DataFrame:
|
|
|
68
69
|
"自由流通市值",
|
|
69
70
|
]
|
|
70
71
|
]
|
|
71
|
-
temp_df[
|
|
72
|
-
temp_df[
|
|
73
|
-
temp_df[
|
|
74
|
-
temp_df[
|
|
72
|
+
temp_df["成交量"] = temp_df["成交量"] / 100000
|
|
73
|
+
temp_df["成交额"] = temp_df["成交额"] / 100000000
|
|
74
|
+
temp_df["总市值"] = temp_df["总市值"] / 100000000
|
|
75
|
+
temp_df["自由流通市值"] = temp_df["自由流通市值"] / 100000000
|
|
75
76
|
return temp_df
|
|
76
77
|
|
|
77
78
|
|
|
78
|
-
def index_hist_cni(
|
|
79
|
+
def index_hist_cni(
|
|
80
|
+
symbol: str = "399001", start_date: str = "20230114", end_date: str = "20240114"
|
|
81
|
+
) -> pd.DataFrame:
|
|
79
82
|
"""
|
|
80
83
|
指数历史行情数据
|
|
81
84
|
http://www.cnindex.com.cn/module/index-detail.html?act_menu=1&indexCode=399001
|
|
@@ -128,19 +131,19 @@ def index_hist_cni(symbol: str = "399001", start_date: str = "20230114", end_dat
|
|
|
128
131
|
temp_df["涨跌幅"] = temp_df["涨跌幅"].str.replace("%", "")
|
|
129
132
|
temp_df["涨跌幅"] = temp_df["涨跌幅"].astype("float")
|
|
130
133
|
temp_df["涨跌幅"] = temp_df["涨跌幅"] / 100
|
|
131
|
-
temp_df.sort_values([
|
|
132
|
-
temp_df[
|
|
133
|
-
temp_df[
|
|
134
|
-
temp_df[
|
|
135
|
-
temp_df[
|
|
136
|
-
temp_df[
|
|
137
|
-
temp_df[
|
|
138
|
-
temp_df[
|
|
139
|
-
temp_df[
|
|
134
|
+
temp_df.sort_values(["日期"], inplace=True, ignore_index=True)
|
|
135
|
+
temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
|
|
136
|
+
temp_df["开盘价"] = pd.to_numeric(temp_df["开盘价"], errors="coerce")
|
|
137
|
+
temp_df["最高价"] = pd.to_numeric(temp_df["最高价"], errors="coerce")
|
|
138
|
+
temp_df["最低价"] = pd.to_numeric(temp_df["最低价"], errors="coerce")
|
|
139
|
+
temp_df["收盘价"] = pd.to_numeric(temp_df["收盘价"], errors="coerce")
|
|
140
|
+
temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"], errors="coerce")
|
|
141
|
+
temp_df["成交量"] = pd.to_numeric(temp_df["成交量"], errors="coerce")
|
|
142
|
+
temp_df["成交额"] = pd.to_numeric(temp_df["成交额"], errors="coerce")
|
|
140
143
|
return temp_df
|
|
141
144
|
|
|
142
145
|
|
|
143
|
-
def index_detail_cni(symbol: str =
|
|
146
|
+
def index_detail_cni(symbol: str = "399001", date: str = "202404") -> pd.DataFrame:
|
|
144
147
|
"""
|
|
145
148
|
国证指数-样本详情-指定日期的样本成份
|
|
146
149
|
http://www.cnindex.com.cn/module/index-detail.html?act_menu=1&indexCode=399001
|
|
@@ -151,97 +154,88 @@ def index_detail_cni(symbol: str = '399005', date: str = '202011') -> pd.DataFra
|
|
|
151
154
|
:return: 指定日期的样本成份
|
|
152
155
|
:rtype: pandas.DataFrame
|
|
153
156
|
"""
|
|
154
|
-
url =
|
|
155
|
-
params = {
|
|
156
|
-
'indexcode': symbol,
|
|
157
|
-
'dateStr': '-'.join([date[:4], date[4:]])
|
|
158
|
-
}
|
|
157
|
+
url = "http://www.cnindex.com.cn/sample-detail/download"
|
|
158
|
+
params = {"indexcode": symbol, "dateStr": "-".join([date[:4], date[4:]])}
|
|
159
159
|
r = requests.get(url, params=params)
|
|
160
160
|
temp_df = pd.read_excel(BytesIO(r.content))
|
|
161
|
-
temp_df[
|
|
161
|
+
temp_df["样本代码"] = temp_df["样本代码"].astype(str).str.zfill(6)
|
|
162
162
|
temp_df.columns = [
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
'权重',
|
|
163
|
+
"日期",
|
|
164
|
+
"样本代码",
|
|
165
|
+
"样本简称",
|
|
166
|
+
"所属行业",
|
|
167
|
+
"总市值",
|
|
168
|
+
"权重",
|
|
170
169
|
]
|
|
171
|
-
temp_df[
|
|
172
|
-
temp_df[
|
|
173
|
-
temp_df['权重'] = pd.to_numeric(temp_df['权重'], errors="coerce")
|
|
170
|
+
temp_df["总市值"] = pd.to_numeric(temp_df["总市值"], errors="coerce")
|
|
171
|
+
temp_df["权重"] = pd.to_numeric(temp_df["权重"], errors="coerce")
|
|
174
172
|
return temp_df
|
|
175
173
|
|
|
176
174
|
|
|
177
|
-
def index_detail_hist_cni(symbol: str =
|
|
175
|
+
def index_detail_hist_cni(symbol: str = "399001", date: str = "") -> pd.DataFrame:
|
|
178
176
|
"""
|
|
179
177
|
国证指数-样本详情-历史样本
|
|
180
178
|
http://www.cnindex.com.cn/module/index-detail.html?act_menu=1&indexCode=399001
|
|
181
|
-
:param
|
|
182
|
-
:type date: str
|
|
183
|
-
:param symbol: 指数代码
|
|
179
|
+
:param symbol: 指数代码; "399001"
|
|
184
180
|
:type symbol: str
|
|
181
|
+
:param date: 指定月份; "202201", 为空返回所有数据
|
|
182
|
+
:type date: str
|
|
185
183
|
:return: 历史样本
|
|
186
184
|
:rtype: pandas.DataFrame
|
|
187
185
|
"""
|
|
188
186
|
if date:
|
|
189
|
-
url =
|
|
187
|
+
url = "http://www.cnindex.com.cn/sample-detail/detail"
|
|
190
188
|
params = {
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
189
|
+
"indexcode": symbol,
|
|
190
|
+
"dateStr": "-".join([date[:4], date[4:]]),
|
|
191
|
+
"pageNum": "1",
|
|
192
|
+
"rows": "50000",
|
|
195
193
|
}
|
|
196
194
|
r = requests.get(url, params=params)
|
|
197
195
|
data_json = r.json()
|
|
198
|
-
temp_df = pd.DataFrame(data_json[
|
|
196
|
+
temp_df = pd.DataFrame(data_json["data"]["rows"])
|
|
199
197
|
temp_df.columns = [
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
198
|
+
"-",
|
|
199
|
+
"-",
|
|
200
|
+
"日期",
|
|
201
|
+
"样本代码",
|
|
202
|
+
"样本简称",
|
|
203
|
+
"所属行业",
|
|
204
|
+
"-",
|
|
205
|
+
"总市值",
|
|
206
|
+
"权重",
|
|
207
|
+
"-",
|
|
208
|
+
]
|
|
209
|
+
temp_df = temp_df[
|
|
210
|
+
[
|
|
211
|
+
"日期",
|
|
212
|
+
"样本代码",
|
|
213
|
+
"样本简称",
|
|
214
|
+
"所属行业",
|
|
215
|
+
"总市值",
|
|
216
|
+
"权重",
|
|
217
|
+
]
|
|
211
218
|
]
|
|
212
|
-
temp_df = temp_df[[
|
|
213
|
-
'日期',
|
|
214
|
-
'样本代码',
|
|
215
|
-
'样本简称',
|
|
216
|
-
'所属行业',
|
|
217
|
-
'自由流通市值',
|
|
218
|
-
'总市值',
|
|
219
|
-
'权重',
|
|
220
|
-
]]
|
|
221
219
|
else:
|
|
222
|
-
url =
|
|
223
|
-
params = {
|
|
224
|
-
'indexcode': symbol
|
|
225
|
-
}
|
|
220
|
+
url = "http://www.cnindex.com.cn/sample-detail/download-history"
|
|
221
|
+
params = {"indexcode": symbol}
|
|
226
222
|
r = requests.get(url, params=params)
|
|
227
223
|
temp_df = pd.read_excel(BytesIO(r.content))
|
|
228
|
-
temp_df[
|
|
224
|
+
temp_df["样本代码"] = temp_df["样本代码"].astype(str).str.zfill(6)
|
|
229
225
|
temp_df.columns = [
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
'权重',
|
|
226
|
+
"日期",
|
|
227
|
+
"样本代码",
|
|
228
|
+
"样本简称",
|
|
229
|
+
"所属行业",
|
|
230
|
+
"总市值",
|
|
231
|
+
"权重",
|
|
237
232
|
]
|
|
238
|
-
temp_df[
|
|
239
|
-
temp_df[
|
|
240
|
-
temp_df['权重'] = pd.to_numeric(temp_df['权重'])
|
|
233
|
+
temp_df["总市值"] = pd.to_numeric(temp_df["总市值"])
|
|
234
|
+
temp_df["权重"] = pd.to_numeric(temp_df["权重"])
|
|
241
235
|
return temp_df
|
|
242
236
|
|
|
243
237
|
|
|
244
|
-
def index_detail_hist_adjust_cni(symbol: str =
|
|
238
|
+
def index_detail_hist_adjust_cni(symbol: str = "399005") -> pd.DataFrame:
|
|
245
239
|
"""
|
|
246
240
|
国证指数-样本详情-历史调样
|
|
247
241
|
http://www.cnindex.com.cn/module/index-detail.html?act_menu=1&indexCode=399005
|
|
@@ -250,16 +244,18 @@ def index_detail_hist_adjust_cni(symbol: str = '399005') -> pd.DataFrame:
|
|
|
250
244
|
:return: 历史调样
|
|
251
245
|
:rtype: pandas.DataFrame
|
|
252
246
|
"""
|
|
253
|
-
url =
|
|
254
|
-
params = {
|
|
255
|
-
'indexcode': symbol
|
|
256
|
-
}
|
|
247
|
+
url = "http://www.cnindex.com.cn/sample-detail/download-adjustment"
|
|
248
|
+
params = {"indexcode": symbol}
|
|
257
249
|
r = requests.get(url, params=params)
|
|
258
250
|
try:
|
|
259
|
-
|
|
260
|
-
|
|
251
|
+
import warnings
|
|
252
|
+
|
|
253
|
+
with warnings.catch_warnings():
|
|
254
|
+
warnings.simplefilter(action="ignore", category=UserWarning)
|
|
255
|
+
temp_df = pd.read_excel(BytesIO(r.content), engine="openpyxl")
|
|
256
|
+
except zipfile.BadZipFile:
|
|
261
257
|
return pd.DataFrame()
|
|
262
|
-
temp_df[
|
|
258
|
+
temp_df["样本代码"] = temp_df["样本代码"].astype(str).str.zfill(6)
|
|
263
259
|
return temp_df
|
|
264
260
|
|
|
265
261
|
|
|
@@ -267,14 +263,16 @@ if __name__ == "__main__":
|
|
|
267
263
|
index_all_cni_df = index_all_cni()
|
|
268
264
|
print(index_all_cni_df)
|
|
269
265
|
|
|
270
|
-
index_hist_cni_df = index_hist_cni(
|
|
266
|
+
index_hist_cni_df = index_hist_cni(
|
|
267
|
+
symbol="399005", start_date="20230114", end_date="20240114"
|
|
268
|
+
)
|
|
271
269
|
print(index_hist_cni_df)
|
|
272
270
|
|
|
273
|
-
index_detail_cni_df = index_detail_cni(symbol=
|
|
271
|
+
index_detail_cni_df = index_detail_cni(symbol="399001", date="202404")
|
|
274
272
|
print(index_detail_cni_df)
|
|
275
273
|
|
|
276
|
-
index_detail_hist_cni_df = index_detail_hist_cni(symbol=
|
|
274
|
+
index_detail_hist_cni_df = index_detail_hist_cni(symbol="399101", date="202404")
|
|
277
275
|
print(index_detail_hist_cni_df)
|
|
278
276
|
|
|
279
|
-
index_detail_hist_adjust_cni_df = index_detail_hist_adjust_cni(symbol=
|
|
277
|
+
index_detail_hist_adjust_cni_df = index_detail_hist_adjust_cni(symbol="399005")
|
|
280
278
|
print(index_detail_hist_adjust_cni_df)
|
akshare/index/index_cons.py
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date: 2024/
|
|
4
|
+
Date: 2024/6/17 14:00
|
|
5
5
|
Desc: 股票指数成份股数据, 新浪有两个接口, 这里使用老接口:
|
|
6
6
|
新接口:https://vip.stock.finance.sina.com.cn/mkt/#zhishu_000001
|
|
7
7
|
老接口:https://vip.stock.finance.sina.com.cn/corp/view/vII_NewestComponent.php?page=1&indexid=399639
|
|
8
8
|
"""
|
|
9
|
+
|
|
9
10
|
import math
|
|
10
11
|
from io import BytesIO, StringIO
|
|
11
12
|
|
|
@@ -27,7 +28,10 @@ def index_stock_cons_sina(symbol: str = "000300") -> pd.DataFrame:
|
|
|
27
28
|
"""
|
|
28
29
|
if symbol == "000300":
|
|
29
30
|
symbol = "hs300"
|
|
30
|
-
url =
|
|
31
|
+
url = (
|
|
32
|
+
"https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php"
|
|
33
|
+
"/Market_Center.getHQNodeStockCountSimple"
|
|
34
|
+
)
|
|
31
35
|
params = {"node": f"{symbol}"}
|
|
32
36
|
r = requests.get(url, params=params)
|
|
33
37
|
page_num = math.ceil(int(r.json()) / 80) + 1
|
|
@@ -45,7 +49,7 @@ def index_stock_cons_sina(symbol: str = "000300") -> pd.DataFrame:
|
|
|
45
49
|
}
|
|
46
50
|
r = requests.get(url, params=params)
|
|
47
51
|
temp_df = pd.concat(
|
|
48
|
-
[temp_df, pd.DataFrame(demjson.decode(r.text))], ignore_index=True
|
|
52
|
+
objs=[temp_df, pd.DataFrame(demjson.decode(r.text))], ignore_index=True
|
|
49
53
|
)
|
|
50
54
|
return temp_df
|
|
51
55
|
|
|
@@ -59,7 +63,8 @@ def index_stock_cons_sina(symbol: str = "000300") -> pd.DataFrame:
|
|
|
59
63
|
"_s_r_a": "setlen",
|
|
60
64
|
}
|
|
61
65
|
r = requests.get(url, params=params)
|
|
62
|
-
|
|
66
|
+
temp = pd.DataFrame(demjson.decode(r.text))
|
|
67
|
+
return temp
|
|
63
68
|
|
|
64
69
|
|
|
65
70
|
def index_stock_info() -> pd.DataFrame:
|
|
@@ -110,7 +115,8 @@ def index_stock_cons(symbol: str = "399639") -> pd.DataFrame:
|
|
|
110
115
|
r = requests.get(url)
|
|
111
116
|
r.encoding = "gb2312"
|
|
112
117
|
temp_df = pd.concat(
|
|
113
|
-
[temp_df, pd.read_html(StringIO(r.text), header=1)[3]],
|
|
118
|
+
objs=[temp_df, pd.read_html(StringIO(r.text), header=1)[3]],
|
|
119
|
+
ignore_index=True,
|
|
114
120
|
)
|
|
115
121
|
temp_df = temp_df.iloc[:, :3]
|
|
116
122
|
temp_df["品种代码"] = temp_df["品种代码"].astype(str).str.zfill(6)
|
|
@@ -126,7 +132,10 @@ def index_stock_cons_csindex(symbol: str = "000300") -> pd.DataFrame:
|
|
|
126
132
|
:return: 最新指数的成份股
|
|
127
133
|
:rtype: pandas.DataFrame
|
|
128
134
|
"""
|
|
129
|
-
url =
|
|
135
|
+
url = (
|
|
136
|
+
f"https://oss-ch.csindex.com.cn/static/"
|
|
137
|
+
f"html/csindex/public/uploads/file/autofile/cons/{symbol}cons.xls"
|
|
138
|
+
)
|
|
130
139
|
r = requests.get(url)
|
|
131
140
|
temp_df = pd.read_excel(BytesIO(r.content))
|
|
132
141
|
temp_df.columns = [
|
|
@@ -140,7 +149,9 @@ def index_stock_cons_csindex(symbol: str = "000300") -> pd.DataFrame:
|
|
|
140
149
|
"交易所",
|
|
141
150
|
"交易所英文名称",
|
|
142
151
|
]
|
|
143
|
-
temp_df["日期"] = pd.to_datetime(
|
|
152
|
+
temp_df["日期"] = pd.to_datetime(
|
|
153
|
+
temp_df["日期"], format="%Y%m%d", errors="coerce"
|
|
154
|
+
).dt.date
|
|
144
155
|
temp_df["指数代码"] = temp_df["指数代码"].astype(str).str.zfill(6)
|
|
145
156
|
temp_df["成分券代码"] = temp_df["成分券代码"].astype(str).str.zfill(6)
|
|
146
157
|
return temp_df
|
|
@@ -155,7 +166,10 @@ def index_stock_cons_weight_csindex(symbol: str = "000300") -> pd.DataFrame:
|
|
|
155
166
|
:return: 最新指数的成份股权重
|
|
156
167
|
:rtype: pandas.DataFrame
|
|
157
168
|
"""
|
|
158
|
-
url =
|
|
169
|
+
url = (
|
|
170
|
+
f"https://oss-ch.csindex.com.cn/static/html/csindex/"
|
|
171
|
+
f"public/uploads/file/autofile/closeweight/{symbol}closeweight.xls"
|
|
172
|
+
)
|
|
159
173
|
r = requests.get(url)
|
|
160
174
|
temp_df = pd.read_excel(BytesIO(r.content))
|
|
161
175
|
temp_df.columns = [
|
|
@@ -170,10 +184,12 @@ def index_stock_cons_weight_csindex(symbol: str = "000300") -> pd.DataFrame:
|
|
|
170
184
|
"交易所英文名称",
|
|
171
185
|
"权重",
|
|
172
186
|
]
|
|
173
|
-
temp_df["日期"] = pd.to_datetime(
|
|
187
|
+
temp_df["日期"] = pd.to_datetime(
|
|
188
|
+
temp_df["日期"], format="%Y%m%d", errors="coerce"
|
|
189
|
+
).dt.date
|
|
174
190
|
temp_df["指数代码"] = temp_df["指数代码"].astype(str).str.zfill(6)
|
|
175
191
|
temp_df["成分券代码"] = temp_df["成分券代码"].astype(str).str.zfill(6)
|
|
176
|
-
temp_df["权重"] = pd.to_numeric(temp_df["权重"])
|
|
192
|
+
temp_df["权重"] = pd.to_numeric(temp_df["权重"], errors="coerce")
|
|
177
193
|
return temp_df
|
|
178
194
|
|
|
179
195
|
|