akshare 1.12.99__py3-none-any.whl → 1.15.72__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.

Files changed (236) hide show
  1. akshare/__init__.py +441 -138
  2. akshare/air/air_hebei.py +79 -53
  3. akshare/air/air_zhenqi.py +29 -43
  4. akshare/air/sunrise_tad.py +32 -17
  5. akshare/bank/bank_cbirc_2020.py +12 -9
  6. akshare/bond/bond_cb_ths.py +17 -9
  7. akshare/bond/bond_china.py +38 -39
  8. akshare/bond/bond_china_money.py +75 -48
  9. akshare/bond/bond_info_cm.py +28 -8
  10. akshare/bond/bond_issue_cninfo.py +73 -30
  11. akshare/bond/bond_zh_cov.py +1 -1
  12. akshare/bond/bond_zh_sina.py +57 -51
  13. akshare/cal/__init__.py +0 -0
  14. akshare/cal/rv.py +170 -0
  15. akshare/cost/cost_living.py +7 -5
  16. akshare/currency/currency_safe.py +7 -6
  17. akshare/data/cninfo.js +15 -0
  18. akshare/datasets.py +10 -21
  19. akshare/economic/macro_bank.py +95 -653
  20. akshare/economic/macro_china.py +772 -1024
  21. akshare/economic/macro_china_hk.py +65 -243
  22. akshare/economic/macro_china_nbs.py +24 -7
  23. akshare/economic/macro_constitute.py +17 -12
  24. akshare/economic/macro_euro.py +13 -6
  25. akshare/economic/macro_finance_ths.py +133 -0
  26. akshare/economic/macro_info_ws.py +100 -0
  27. akshare/economic/macro_japan.py +5 -4
  28. akshare/economic/macro_other.py +12 -9
  29. akshare/economic/macro_usa.py +376 -1940
  30. akshare/economic/marco_cnbs.py +11 -6
  31. akshare/energy/energy_carbon.py +94 -125
  32. akshare/event/migration.py +3 -2
  33. akshare/exceptions.py +43 -0
  34. akshare/file_fold/calendar.json +245 -2
  35. akshare/fortune/fortune_500.py +15 -48
  36. akshare/fund/fund_amac.py +157 -75
  37. akshare/fund/fund_em.py +191 -184
  38. akshare/fund/fund_etf_em.py +16 -15
  39. akshare/fund/fund_etf_sina.py +71 -23
  40. akshare/fund/fund_etf_ths.py +93 -0
  41. akshare/fund/fund_fee_em.py +98 -0
  42. akshare/fund/fund_portfolio_em.py +60 -50
  43. akshare/fund/fund_rank_em.py +91 -82
  44. akshare/fund/fund_report_cninfo.py +63 -48
  45. akshare/fund/fund_scale_sina.py +20 -10
  46. akshare/fund/fund_xq.py +139 -109
  47. akshare/futures/cons.py +8 -31
  48. akshare/futures/cot.py +185 -137
  49. akshare/futures/futures_basis.py +97 -32
  50. akshare/futures/futures_comm_ctp.py +37 -0
  51. akshare/futures/futures_comm_qihuo.py +74 -45
  52. akshare/futures/futures_daily_bar.py +121 -184
  53. akshare/futures/futures_hf_em.py +66 -61
  54. akshare/futures/futures_hq_sina.py +79 -61
  55. akshare/futures/futures_index_ccidx.py +6 -3
  56. akshare/futures/futures_inventory_99.py +61 -272
  57. akshare/futures/futures_news_shmet.py +4 -2
  58. akshare/futures/futures_roll_yield.py +12 -25
  59. akshare/futures/futures_spot_stock_em.py +19 -13
  60. akshare/futures/futures_stock_js.py +14 -12
  61. akshare/futures/futures_to_spot.py +38 -33
  62. akshare/futures/futures_warehouse_receipt.py +75 -71
  63. akshare/futures/futures_zh_sina.py +5 -5
  64. akshare/futures/symbol_var.py +18 -13
  65. akshare/futures_derivative/futures_contract_info_czce.py +60 -52
  66. akshare/futures_derivative/futures_contract_info_ine.py +43 -34
  67. akshare/futures_derivative/futures_contract_info_shfe.py +46 -35
  68. akshare/futures_derivative/futures_cot_sina.py +26 -19
  69. akshare/futures_derivative/futures_spot_sys.py +21 -8
  70. akshare/fx/currency_investing.py +19 -285
  71. akshare/index/index_cflp.py +29 -26
  72. akshare/index/index_cni.py +86 -88
  73. akshare/index/index_cons.py +26 -10
  74. akshare/index/index_cx.py +248 -47
  75. akshare/index/index_drewry.py +17 -16
  76. akshare/index/index_option_qvix.py +329 -0
  77. akshare/index/index_research_fund_sw.py +134 -0
  78. akshare/index/{index_sw_research.py → index_research_sw.py} +122 -58
  79. akshare/index/index_spot.py +9 -5
  80. akshare/index/index_stock_hk.py +35 -16
  81. akshare/index/index_stock_us_sina.py +1 -1
  82. akshare/index/index_stock_zh.py +180 -89
  83. akshare/index/index_stock_zh_csindex.py +15 -369
  84. akshare/index/index_sw.py +62 -34
  85. akshare/index/index_yw.py +46 -23
  86. akshare/index/index_zh_a_scope.py +48 -0
  87. akshare/index/index_zh_em.py +6 -4
  88. akshare/interest_rate/interbank_rate_em.py +14 -9
  89. akshare/movie/artist_yien.py +32 -5
  90. akshare/movie/movie_yien.py +92 -18
  91. akshare/movie/video_yien.py +28 -5
  92. akshare/news/news_baidu.py +78 -44
  93. akshare/news/news_cctv.py +38 -38
  94. akshare/news/news_stock.py +6 -3
  95. akshare/nlp/nlp_interface.py +7 -8
  96. akshare/option/cons.py +11 -11
  97. akshare/option/option_comm_qihuo.py +86 -0
  98. akshare/option/option_commodity.py +178 -51
  99. akshare/option/option_daily_stats_sse_szse.py +146 -0
  100. akshare/option/option_em.py +147 -138
  101. akshare/option/option_finance_sina.py +160 -137
  102. akshare/option/option_lhb_em.py +62 -56
  103. akshare/option/option_risk_indicator_sse.py +17 -14
  104. akshare/other/other_car_cpca.py +934 -0
  105. akshare/other/{other_car.py → other_car_gasgoo.py} +15 -54
  106. akshare/qdii/__init__.py +0 -0
  107. akshare/qdii/qdii_jsl.py +233 -0
  108. akshare/request.py +117 -0
  109. akshare/spot/spot_hog_soozhu.py +232 -0
  110. akshare/spot/spot_price_qh.py +121 -0
  111. akshare/spot/spot_sge.py +63 -10
  112. akshare/stock/stock_allotment_cninfo.py +10 -9
  113. akshare/stock/stock_board_concept_em.py +23 -14
  114. akshare/stock/stock_board_industry_em.py +40 -34
  115. akshare/stock/stock_cg_equity_mortgage.py +15 -11
  116. akshare/stock/stock_cg_guarantee.py +41 -51
  117. akshare/stock/stock_cg_lawsuit.py +36 -35
  118. akshare/stock/stock_dividend_cninfo.py +12 -6
  119. akshare/stock/stock_dzjy_em.py +347 -260
  120. akshare/stock/stock_fund_em.py +332 -84
  121. akshare/stock/stock_hk_famous.py +108 -0
  122. akshare/stock/stock_hk_sina.py +8 -7
  123. akshare/stock/stock_hold_control_cninfo.py +100 -15
  124. akshare/stock/stock_hold_control_em.py +4 -3
  125. akshare/stock/stock_hold_num_cninfo.py +18 -12
  126. akshare/stock/stock_hot_rank_em.py +2 -1
  127. akshare/stock/stock_hot_search_baidu.py +5 -2
  128. akshare/stock/stock_industry_cninfo.py +24 -18
  129. akshare/stock/stock_industry_pe_cninfo.py +45 -31
  130. akshare/stock/stock_industry_sw.py +9 -10
  131. akshare/stock/stock_info.py +25 -15
  132. akshare/stock/stock_info_em.py +5 -2
  133. akshare/stock/stock_intraday_em.py +5 -2
  134. akshare/stock/stock_intraday_sina.py +22 -18
  135. akshare/stock/stock_ipo_summary_cninfo.py +25 -10
  136. akshare/stock/stock_new_cninfo.py +32 -19
  137. akshare/stock/stock_news_cx.py +39 -0
  138. akshare/stock/stock_profile_cninfo.py +9 -8
  139. akshare/stock/stock_rank_forecast.py +8 -6
  140. akshare/stock/stock_share_changes_cninfo.py +18 -14
  141. akshare/stock/stock_share_hold.py +24 -19
  142. akshare/stock/stock_summary.py +54 -26
  143. akshare/stock/stock_us_famous.py +15 -6
  144. akshare/stock/stock_us_pink.py +7 -5
  145. akshare/stock/stock_us_sina.py +15 -12
  146. akshare/stock/stock_xq.py +38 -12
  147. akshare/stock/stock_zh_a_sina.py +53 -78
  148. akshare/stock/stock_zh_b_sina.py +32 -55
  149. akshare/stock/stock_zh_kcb_report.py +11 -9
  150. akshare/stock/stock_zh_kcb_sina.py +67 -64
  151. akshare/stock_feature/stock_a_below_net_asset_statistics.py +5 -2
  152. akshare/stock_feature/stock_a_high_low.py +5 -2
  153. akshare/stock_feature/stock_a_indicator.py +12 -9
  154. akshare/stock_feature/stock_a_pe_and_pb.py +27 -6
  155. akshare/stock_feature/stock_account_em.py +58 -40
  156. akshare/stock_feature/stock_analyst_em.py +36 -27
  157. akshare/stock_feature/stock_board_industry_ths.py +136 -400
  158. akshare/stock_feature/stock_comment_em.py +118 -85
  159. akshare/stock_feature/stock_concept_futu.py +183 -0
  160. akshare/stock_feature/stock_cyq_em.py +58 -54
  161. akshare/stock_feature/stock_disclosure_cninfo.py +147 -102
  162. akshare/stock_feature/stock_esg_sina.py +216 -11
  163. akshare/stock_feature/stock_fhps_em.py +60 -25
  164. akshare/stock_feature/stock_fhps_ths.py +25 -6
  165. akshare/stock_feature/stock_fund_flow.py +38 -25
  166. akshare/stock_feature/stock_gdfx_em.py +180 -95
  167. akshare/stock_feature/stock_gdhs.py +73 -49
  168. akshare/stock_feature/stock_gpzy_em.py +78 -46
  169. akshare/stock_feature/stock_hist_em.py +55 -23
  170. akshare/stock_feature/stock_hk_valuation_baidu.py +20 -8
  171. akshare/stock_feature/stock_hsgt_em.py +184 -452
  172. akshare/stock_feature/stock_info.py +52 -29
  173. akshare/stock_feature/stock_inner_trade_xq.py +39 -31
  174. akshare/stock_feature/stock_irm_cninfo.py +32 -9
  175. akshare/stock_feature/stock_jgdy_em.py +41 -38
  176. akshare/stock_feature/stock_lh_yybpm.py +36 -37
  177. akshare/stock_feature/stock_lhb_em.py +135 -71
  178. akshare/stock_feature/stock_lhb_sina.py +93 -46
  179. akshare/stock_feature/stock_margin_em.py +102 -0
  180. akshare/stock_feature/{stock_sse_margin.py → stock_margin_sse.py} +21 -15
  181. akshare/stock_feature/{stock_szse_margin.py → stock_margin_szse.py} +23 -19
  182. akshare/stock_feature/stock_market_legu.py +13 -8
  183. akshare/stock_feature/stock_pankou_em.py +72 -34
  184. akshare/stock_feature/stock_report_em.py +244 -54
  185. akshare/stock_feature/stock_research_report_em.py +48 -19
  186. akshare/stock_feature/stock_sns_sseinfo.py +15 -12
  187. akshare/stock_feature/stock_sy_em.py +86 -33
  188. akshare/stock_feature/stock_technology_ths.py +152 -120
  189. akshare/stock_feature/stock_tfp_em.py +35 -13
  190. akshare/stock_feature/stock_three_report_em.py +119 -77
  191. akshare/stock_feature/stock_ttm_lyr.py +4 -7
  192. akshare/stock_feature/stock_value_em.py +83 -0
  193. akshare/stock_feature/stock_wencai.py +21 -9
  194. akshare/stock_feature/stock_yjyg_em.py +63 -28
  195. akshare/stock_feature/stock_zf_pg.py +61 -38
  196. akshare/stock_feature/stock_zh_valuation_baidu.py +3 -2
  197. akshare/stock_feature/stock_ztb_em.py +62 -40
  198. akshare/stock_fundamental/stock_finance.py +150 -58
  199. akshare/stock_fundamental/stock_finance_ths.py +116 -31
  200. akshare/stock_fundamental/stock_mda_ym.py +5 -3
  201. akshare/stock_fundamental/stock_notice.py +29 -15
  202. akshare/stock_fundamental/stock_profit_forecast_em.py +31 -13
  203. akshare/stock_fundamental/stock_profit_forecast_ths.py +19 -10
  204. akshare/stock_fundamental/stock_register_em.py +448 -0
  205. akshare/stock_fundamental/stock_restricted_em.py +79 -32
  206. akshare/stock_fundamental/stock_zygc.py +10 -8
  207. akshare/stock_fundamental/stock_zyjs_ths.py +5 -3
  208. akshare/tool/trade_date_hist.py +4 -3
  209. akshare/utils/cons.py +10 -0
  210. akshare/utils/context.py +43 -0
  211. akshare/utils/demjson.py +2 -2
  212. akshare/utils/func.py +26 -0
  213. akshare/utils/tqdm.py +13 -3
  214. {akshare-1.12.99.dist-info → akshare-1.15.72.dist-info}/METADATA +52 -69
  215. akshare-1.15.72.dist-info/RECORD +385 -0
  216. {akshare-1.12.99.dist-info → akshare-1.15.72.dist-info}/WHEEL +1 -1
  217. tests/test_func.py +3 -5
  218. akshare/bond/bond_futures.py +0 -50
  219. akshare/bond/bond_investing.py +0 -139
  220. akshare/crypto/crypto_hist_investing.py +0 -249
  221. akshare/fortune/fortune_it_juzi.py +0 -123
  222. akshare/futures/futures_international.py +0 -170
  223. akshare/futures/futures_news_baidu.py +0 -54
  224. akshare/futures/inventory_data.py +0 -100
  225. akshare/futures_derivative/futures_index_price_nh.py +0 -61
  226. akshare/futures_derivative/futures_index_return_nh.py +0 -47
  227. akshare/futures_derivative/futures_index_volatility_nh.py +0 -51
  228. akshare/futures_derivative/futures_other_index_nh.py +0 -145
  229. akshare/index/index_fear_greed_funddb.py +0 -71
  230. akshare/index/index_investing.py +0 -232
  231. akshare/sport/sport_olympic_winter.py +0 -39
  232. akshare/stock_feature/stock_board_concept_ths.py +0 -422
  233. akshare/stock_fundamental/stock_register.py +0 -292
  234. akshare-1.12.99.dist-info/RECORD +0 -374
  235. {akshare-1.12.99.dist-info → akshare-1.15.72.dist-info}/LICENSE +0 -0
  236. {akshare-1.12.99.dist-info → akshare-1.15.72.dist-info}/top_level.txt +0 -0
@@ -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['成交量'] = temp_df['成交量'] / 100000
72
- temp_df['成交额'] = temp_df['成交额'] / 100000000
73
- temp_df['总市值'] = temp_df['总市值'] / 100000000
74
- temp_df['自由流通市值'] = temp_df['自由流通市值'] / 100000000
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(symbol: str = "399001", start_date: str = "20230114", end_date: str = "20240114") -> pd.DataFrame:
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(['日期'], inplace=True, ignore_index=True)
132
- temp_df['日期'] = pd.to_datetime(temp_df['日期'], errors="coerce").dt.date
133
- temp_df['开盘价'] = pd.to_numeric(temp_df['开盘价'], errors="coerce")
134
- temp_df['最高价'] = pd.to_numeric(temp_df['最高价'], errors="coerce")
135
- temp_df['最低价'] = pd.to_numeric(temp_df['最低价'], errors="coerce")
136
- temp_df['收盘价'] = pd.to_numeric(temp_df['收盘价'], errors="coerce")
137
- temp_df['涨跌幅'] = pd.to_numeric(temp_df['涨跌幅'], errors="coerce")
138
- temp_df['成交量'] = pd.to_numeric(temp_df['成交量'], errors="coerce")
139
- temp_df['成交额'] = pd.to_numeric(temp_df['成交额'], errors="coerce")
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 = '399005', date: str = '202011') -> pd.DataFrame:
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 = 'http://www.cnindex.com.cn/sample-detail/download'
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['样本代码'] = temp_df['样本代码'].astype(str).str.zfill(6)
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['自由流通市值'] = pd.to_numeric(temp_df['自由流通市值'], errors="coerce")
172
- temp_df['总市值'] = pd.to_numeric(temp_df['总市值'], errors="coerce")
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 = '399001', date: str = "") -> pd.DataFrame:
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 date: 指数代码
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 = 'http://www.cnindex.com.cn/sample-detail/detail'
187
+ url = "http://www.cnindex.com.cn/sample-detail/detail"
190
188
  params = {
191
- 'indexcode': symbol,
192
- 'dateStr': '-'.join([date[:4], date[4:]]),
193
- 'pageNum': '1',
194
- 'rows': '50000',
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['data']['rows'])
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 = 'http://www.cnindex.com.cn/sample-detail/download-history'
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['样本代码'] = temp_df['样本代码'].astype(str).str.zfill(6)
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['自由流通市值'] = pd.to_numeric(temp_df['自由流通市值'])
239
- temp_df['总市值'] = pd.to_numeric(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 = '399005') -> pd.DataFrame:
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 = 'http://www.cnindex.com.cn/sample-detail/download-adjustment'
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
- temp_df = pd.read_excel(BytesIO(r.content), engine="openpyxl")
260
- except zipfile.BadZipFile as e:
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['样本代码'] = temp_df['样本代码'].astype(str).str.zfill(6)
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(symbol="399005", start_date="20230114", end_date="20240114")
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='399001', date='202011')
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='399005', date='202201')
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='399005')
277
+ index_detail_hist_adjust_cni_df = index_detail_hist_adjust_cni(symbol="399005")
280
278
  print(index_detail_hist_adjust_cni_df)
@@ -1,11 +1,12 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/1/5 17:00
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 = "https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeStockCountSimple"
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
- return pd.DataFrame(demjson.decode(r.text))
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]], ignore_index=True
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 = f"https://csi-web-dev.oss-cn-shanghai-finance-1-pub.aliyuncs.com/static/html/csindex/public/uploads/file/autofile/cons/{symbol}cons.xls"
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(temp_df["日期"], format="%Y%m%d").dt.date
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 = f"https://csi-web-dev.oss-cn-shanghai-finance-1-pub.aliyuncs.com/static/html/csindex/public/uploads/file/autofile/closeweight/{symbol}closeweight.xls"
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(temp_df["日期"], format="%Y%m%d").dt.date
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