akshare 1.12.95__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 (240) hide show
  1. akshare/__init__.py +446 -139
  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_convert.py +40 -16
  10. akshare/bond/bond_info_cm.py +28 -8
  11. akshare/bond/bond_issue_cninfo.py +73 -30
  12. akshare/bond/{bond_zh_cov_sina.py → bond_zh_cov.py} +41 -17
  13. akshare/bond/bond_zh_sina.py +57 -51
  14. akshare/cal/__init__.py +0 -0
  15. akshare/cal/rv.py +170 -0
  16. akshare/cost/cost_living.py +7 -5
  17. akshare/currency/currency_safe.py +7 -6
  18. akshare/data/cninfo.js +15 -0
  19. akshare/datasets.py +10 -21
  20. akshare/economic/macro_bank.py +95 -653
  21. akshare/economic/macro_china.py +772 -1024
  22. akshare/economic/macro_china_hk.py +65 -243
  23. akshare/economic/macro_china_nbs.py +24 -7
  24. akshare/economic/macro_constitute.py +17 -12
  25. akshare/economic/macro_euro.py +13 -6
  26. akshare/economic/macro_finance_ths.py +133 -0
  27. akshare/economic/macro_info_ws.py +100 -0
  28. akshare/economic/macro_japan.py +5 -4
  29. akshare/economic/macro_other.py +12 -9
  30. akshare/economic/macro_usa.py +376 -1940
  31. akshare/economic/marco_cnbs.py +11 -6
  32. akshare/energy/energy_carbon.py +94 -125
  33. akshare/event/migration.py +3 -2
  34. akshare/exceptions.py +43 -0
  35. akshare/file_fold/calendar.json +245 -2
  36. akshare/fortune/fortune_500.py +15 -48
  37. akshare/fund/fund_amac.py +157 -75
  38. akshare/fund/fund_em.py +191 -184
  39. akshare/fund/fund_etf_em.py +20 -19
  40. akshare/fund/fund_etf_sina.py +71 -23
  41. akshare/fund/fund_etf_ths.py +93 -0
  42. akshare/fund/fund_fee_em.py +98 -0
  43. akshare/fund/fund_lof_em.py +10 -8
  44. akshare/fund/fund_portfolio_em.py +60 -50
  45. akshare/fund/fund_rank_em.py +91 -82
  46. akshare/fund/fund_report_cninfo.py +63 -48
  47. akshare/fund/fund_scale_sina.py +20 -10
  48. akshare/fund/fund_xq.py +139 -109
  49. akshare/futures/cons.py +8 -31
  50. akshare/futures/cot.py +185 -137
  51. akshare/futures/futures_basis.py +97 -32
  52. akshare/futures/futures_comm_ctp.py +37 -0
  53. akshare/futures/futures_comm_qihuo.py +74 -45
  54. akshare/futures/futures_daily_bar.py +121 -184
  55. akshare/futures/futures_hf_em.py +66 -61
  56. akshare/futures/futures_hq_sina.py +79 -61
  57. akshare/futures/futures_index_ccidx.py +6 -3
  58. akshare/futures/futures_inventory_99.py +61 -272
  59. akshare/futures/futures_news_shmet.py +4 -2
  60. akshare/futures/futures_roll_yield.py +12 -25
  61. akshare/futures/futures_spot_stock_em.py +19 -13
  62. akshare/futures/futures_stock_js.py +14 -12
  63. akshare/futures/futures_to_spot.py +38 -33
  64. akshare/futures/futures_warehouse_receipt.py +75 -71
  65. akshare/futures/futures_zh_sina.py +73 -50
  66. akshare/futures/symbol_var.py +18 -13
  67. akshare/futures_derivative/futures_contract_info_czce.py +60 -52
  68. akshare/futures_derivative/futures_contract_info_ine.py +43 -34
  69. akshare/futures_derivative/futures_contract_info_shfe.py +46 -35
  70. akshare/futures_derivative/futures_cot_sina.py +26 -19
  71. akshare/futures_derivative/futures_spot_sys.py +21 -8
  72. akshare/fx/currency_investing.py +19 -285
  73. akshare/index/index_cflp.py +29 -26
  74. akshare/index/index_cni.py +86 -88
  75. akshare/index/index_cons.py +26 -10
  76. akshare/index/index_cx.py +248 -47
  77. akshare/index/index_drewry.py +17 -16
  78. akshare/index/index_hog.py +27 -26
  79. akshare/index/index_option_qvix.py +329 -0
  80. akshare/index/index_research_fund_sw.py +134 -0
  81. akshare/index/{index_sw_research.py → index_research_sw.py} +122 -58
  82. akshare/index/index_spot.py +9 -5
  83. akshare/index/index_stock_hk.py +35 -16
  84. akshare/index/index_stock_us_sina.py +1 -1
  85. akshare/index/index_stock_zh.py +180 -89
  86. akshare/index/index_stock_zh_csindex.py +15 -369
  87. akshare/index/index_sw.py +62 -34
  88. akshare/index/index_yw.py +46 -23
  89. akshare/index/index_zh_a_scope.py +48 -0
  90. akshare/index/index_zh_em.py +17 -14
  91. akshare/interest_rate/interbank_rate_em.py +14 -9
  92. akshare/movie/artist_yien.py +32 -5
  93. akshare/movie/movie_yien.py +92 -18
  94. akshare/movie/video_yien.py +28 -5
  95. akshare/news/news_baidu.py +78 -44
  96. akshare/news/news_cctv.py +38 -38
  97. akshare/news/news_stock.py +6 -3
  98. akshare/nlp/nlp_interface.py +7 -8
  99. akshare/option/cons.py +11 -11
  100. akshare/option/option_comm_qihuo.py +86 -0
  101. akshare/option/option_commodity.py +178 -51
  102. akshare/option/option_daily_stats_sse_szse.py +146 -0
  103. akshare/option/option_em.py +147 -138
  104. akshare/option/option_finance_sina.py +160 -137
  105. akshare/option/option_lhb_em.py +62 -56
  106. akshare/option/option_risk_indicator_sse.py +17 -14
  107. akshare/other/other_car_cpca.py +934 -0
  108. akshare/other/{other_car.py → other_car_gasgoo.py} +15 -54
  109. akshare/qdii/__init__.py +0 -0
  110. akshare/qdii/qdii_jsl.py +233 -0
  111. akshare/request.py +117 -0
  112. akshare/spot/spot_hog_soozhu.py +232 -0
  113. akshare/spot/spot_price_qh.py +121 -0
  114. akshare/spot/spot_sge.py +63 -10
  115. akshare/stock/stock_allotment_cninfo.py +10 -9
  116. akshare/stock/stock_ask_bid_em.py +27 -3
  117. akshare/stock/stock_board_concept_em.py +23 -14
  118. akshare/stock/stock_board_industry_em.py +40 -34
  119. akshare/stock/stock_cg_equity_mortgage.py +15 -11
  120. akshare/stock/stock_cg_guarantee.py +41 -51
  121. akshare/stock/stock_cg_lawsuit.py +36 -35
  122. akshare/stock/stock_dividend_cninfo.py +12 -6
  123. akshare/stock/stock_dzjy_em.py +347 -260
  124. akshare/stock/stock_fund_em.py +332 -84
  125. akshare/stock/stock_hk_famous.py +108 -0
  126. akshare/stock/stock_hk_sina.py +8 -7
  127. akshare/stock/stock_hold_control_cninfo.py +100 -15
  128. akshare/stock/stock_hold_control_em.py +4 -3
  129. akshare/stock/stock_hold_num_cninfo.py +18 -12
  130. akshare/stock/stock_hot_rank_em.py +2 -1
  131. akshare/stock/stock_hot_search_baidu.py +5 -2
  132. akshare/stock/stock_industry_cninfo.py +24 -18
  133. akshare/stock/stock_industry_pe_cninfo.py +45 -31
  134. akshare/stock/stock_industry_sw.py +9 -10
  135. akshare/stock/stock_info.py +25 -15
  136. akshare/stock/stock_info_em.py +5 -2
  137. akshare/stock/stock_intraday_em.py +5 -2
  138. akshare/stock/stock_intraday_sina.py +22 -18
  139. akshare/stock/stock_ipo_summary_cninfo.py +25 -10
  140. akshare/stock/stock_new_cninfo.py +32 -19
  141. akshare/stock/stock_news_cx.py +39 -0
  142. akshare/stock/stock_profile_cninfo.py +9 -8
  143. akshare/stock/stock_rank_forecast.py +8 -6
  144. akshare/stock/stock_share_changes_cninfo.py +18 -14
  145. akshare/stock/stock_share_hold.py +24 -19
  146. akshare/stock/stock_summary.py +54 -26
  147. akshare/stock/stock_us_famous.py +15 -6
  148. akshare/stock/stock_us_pink.py +7 -5
  149. akshare/stock/stock_us_sina.py +15 -12
  150. akshare/stock/stock_xq.py +38 -12
  151. akshare/stock/stock_zh_a_sina.py +53 -78
  152. akshare/stock/stock_zh_b_sina.py +32 -55
  153. akshare/stock/stock_zh_kcb_report.py +11 -9
  154. akshare/stock/stock_zh_kcb_sina.py +67 -64
  155. akshare/stock_feature/stock_a_below_net_asset_statistics.py +5 -2
  156. akshare/stock_feature/stock_a_high_low.py +5 -2
  157. akshare/stock_feature/stock_a_indicator.py +12 -9
  158. akshare/stock_feature/stock_a_pe_and_pb.py +27 -6
  159. akshare/stock_feature/stock_account_em.py +58 -40
  160. akshare/stock_feature/stock_analyst_em.py +36 -27
  161. akshare/stock_feature/stock_board_industry_ths.py +136 -400
  162. akshare/stock_feature/stock_comment_em.py +118 -85
  163. akshare/stock_feature/stock_concept_futu.py +183 -0
  164. akshare/stock_feature/stock_cyq_em.py +58 -54
  165. akshare/stock_feature/stock_disclosure_cninfo.py +147 -102
  166. akshare/stock_feature/stock_esg_sina.py +216 -11
  167. akshare/stock_feature/stock_fhps_em.py +60 -25
  168. akshare/stock_feature/stock_fhps_ths.py +25 -6
  169. akshare/stock_feature/stock_fund_flow.py +38 -25
  170. akshare/stock_feature/stock_gdfx_em.py +180 -95
  171. akshare/stock_feature/stock_gdhs.py +73 -49
  172. akshare/stock_feature/stock_gpzy_em.py +78 -46
  173. akshare/stock_feature/stock_hist_em.py +164 -111
  174. akshare/stock_feature/stock_hk_valuation_baidu.py +20 -8
  175. akshare/stock_feature/stock_hsgt_em.py +184 -452
  176. akshare/stock_feature/stock_info.py +52 -29
  177. akshare/stock_feature/stock_inner_trade_xq.py +39 -31
  178. akshare/stock_feature/stock_irm_cninfo.py +32 -9
  179. akshare/stock_feature/stock_jgdy_em.py +41 -38
  180. akshare/stock_feature/stock_lh_yybpm.py +36 -37
  181. akshare/stock_feature/stock_lhb_em.py +135 -71
  182. akshare/stock_feature/stock_lhb_sina.py +93 -46
  183. akshare/stock_feature/stock_margin_em.py +102 -0
  184. akshare/stock_feature/{stock_sse_margin.py → stock_margin_sse.py} +21 -15
  185. akshare/stock_feature/{stock_szse_margin.py → stock_margin_szse.py} +23 -19
  186. akshare/stock_feature/stock_market_legu.py +13 -8
  187. akshare/stock_feature/stock_pankou_em.py +72 -34
  188. akshare/stock_feature/stock_report_em.py +244 -54
  189. akshare/stock_feature/stock_research_report_em.py +48 -19
  190. akshare/stock_feature/stock_sns_sseinfo.py +15 -12
  191. akshare/stock_feature/stock_sy_em.py +86 -33
  192. akshare/stock_feature/stock_technology_ths.py +152 -120
  193. akshare/stock_feature/stock_tfp_em.py +35 -13
  194. akshare/stock_feature/stock_three_report_em.py +119 -77
  195. akshare/stock_feature/stock_ttm_lyr.py +4 -7
  196. akshare/stock_feature/stock_value_em.py +83 -0
  197. akshare/stock_feature/stock_wencai.py +21 -9
  198. akshare/stock_feature/stock_yjyg_em.py +63 -28
  199. akshare/stock_feature/stock_zf_pg.py +61 -38
  200. akshare/stock_feature/stock_zh_valuation_baidu.py +3 -2
  201. akshare/stock_feature/stock_ztb_em.py +62 -40
  202. akshare/stock_fundamental/stock_finance.py +150 -58
  203. akshare/stock_fundamental/stock_finance_ths.py +116 -31
  204. akshare/stock_fundamental/stock_mda_ym.py +5 -3
  205. akshare/stock_fundamental/stock_notice.py +29 -15
  206. akshare/stock_fundamental/stock_profit_forecast_em.py +31 -13
  207. akshare/stock_fundamental/stock_profit_forecast_ths.py +19 -10
  208. akshare/stock_fundamental/stock_register_em.py +448 -0
  209. akshare/stock_fundamental/stock_restricted_em.py +79 -32
  210. akshare/stock_fundamental/stock_zygc.py +10 -8
  211. akshare/stock_fundamental/stock_zyjs_ths.py +5 -3
  212. akshare/tool/trade_date_hist.py +4 -3
  213. akshare/utils/cons.py +10 -0
  214. akshare/utils/context.py +43 -0
  215. akshare/utils/demjson.py +2 -2
  216. akshare/utils/func.py +26 -0
  217. akshare/utils/tqdm.py +13 -3
  218. {akshare-1.12.95.dist-info → akshare-1.15.72.dist-info}/METADATA +52 -69
  219. akshare-1.15.72.dist-info/RECORD +385 -0
  220. {akshare-1.12.95.dist-info → akshare-1.15.72.dist-info}/WHEEL +1 -1
  221. tests/test_func.py +3 -5
  222. akshare/bond/bond_futures.py +0 -50
  223. akshare/bond/bond_investing.py +0 -139
  224. akshare/crypto/crypto_hist_investing.py +0 -249
  225. akshare/fortune/fortune_it_juzi.py +0 -123
  226. akshare/futures/futures_international.py +0 -170
  227. akshare/futures/futures_news_baidu.py +0 -54
  228. akshare/futures/inventory_data.py +0 -100
  229. akshare/futures_derivative/futures_index_price_nh.py +0 -61
  230. akshare/futures_derivative/futures_index_return_nh.py +0 -47
  231. akshare/futures_derivative/futures_index_volatility_nh.py +0 -51
  232. akshare/futures_derivative/futures_other_index_nh.py +0 -145
  233. akshare/index/index_fear_greed_funddb.py +0 -71
  234. akshare/index/index_investing.py +0 -232
  235. akshare/sport/sport_olympic_winter.py +0 -39
  236. akshare/stock_feature/stock_board_concept_ths.py +0 -422
  237. akshare/stock_fundamental/stock_register.py +0 -292
  238. akshare-1.12.95.dist-info/RECORD +0 -374
  239. {akshare-1.12.95.dist-info → akshare-1.15.72.dist-info}/LICENSE +0 -0
  240. {akshare-1.12.95.dist-info → akshare-1.15.72.dist-info}/top_level.txt +0 -0
@@ -5,11 +5,12 @@ Date: 2021/12/27 15:47
5
5
  Desc: 中国公路物流运价、运量指数
6
6
  http://index.0256.cn/expx.htm
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
 
11
12
 
12
- def index_cflp_price(symbol: str = "周指数") -> pd.DataFrame:
13
+ def index_price_cflp(symbol: str = "周指数") -> pd.DataFrame:
13
14
  """
14
15
  中国公路物流运价指数
15
16
  http://index.0256.cn/expx.htm
@@ -38,7 +39,8 @@ def index_cflp_price(symbol: str = "周指数") -> pd.DataFrame:
38
39
  headers = {
39
40
  "Origin": "http://index.0256.cn",
40
41
  "Referer": "http://index.0256.cn/expx.htm",
41
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36",
42
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
43
+ "Chrome/90.0.4430.212 Safari/537.36",
42
44
  }
43
45
  r = requests.post(url, data=params, headers=headers)
44
46
  data_json = r.json()
@@ -51,14 +53,14 @@ def index_cflp_price(symbol: str = "周指数") -> pd.DataFrame:
51
53
  ]
52
54
  ).T
53
55
  temp_df.columns = ["日期", "定基指数", "环比指数", "同比指数"]
54
- temp_df["日期"] = pd.to_datetime(temp_df["日期"]).dt.date
55
- temp_df["定基指数"] = pd.to_numeric(temp_df["定基指数"])
56
- temp_df["环比指数"] = pd.to_numeric(temp_df["环比指数"])
57
- temp_df["同比指数"] = pd.to_numeric(temp_df["同比指数"])
56
+ temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
57
+ temp_df["定基指数"] = pd.to_numeric(temp_df["定基指数"], errors="coerce")
58
+ temp_df["环比指数"] = pd.to_numeric(temp_df["环比指数"], errors="coerce")
59
+ temp_df["同比指数"] = pd.to_numeric(temp_df["同比指数"], errors="coerce")
58
60
  return temp_df
59
61
 
60
62
 
61
- def index_cflp_volume(symbol: str = "月指数") -> pd.DataFrame:
63
+ def index_volume_cflp(symbol: str = "月指数") -> pd.DataFrame:
62
64
  """
63
65
  中国公路物流运量指数
64
66
  http://index.0256.cn/expx.htm
@@ -86,7 +88,8 @@ def index_cflp_volume(symbol: str = "月指数") -> pd.DataFrame:
86
88
  headers = {
87
89
  "Origin": "http://index.0256.cn",
88
90
  "Referer": "http://index.0256.cn/expx.htm",
89
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36",
91
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
92
+ "Chrome/90.0.4430.212 Safari/537.36",
90
93
  }
91
94
  r = requests.post(url, data=params, headers=headers)
92
95
  data_json = r.json()
@@ -99,31 +102,31 @@ def index_cflp_volume(symbol: str = "月指数") -> pd.DataFrame:
99
102
  ]
100
103
  ).T
101
104
  temp_df.columns = ["日期", "定基指数", "环比指数", "同比指数"]
102
- temp_df["日期"] = pd.to_datetime(temp_df["日期"]).dt.date
103
- temp_df["定基指数"] = pd.to_numeric(temp_df["定基指数"])
104
- temp_df["环比指数"] = pd.to_numeric(temp_df["环比指数"])
105
- temp_df["同比指数"] = pd.to_numeric(temp_df["同比指数"])
105
+ temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
106
+ temp_df["定基指数"] = pd.to_numeric(temp_df["定基指数"], errors="coerce")
107
+ temp_df["环比指数"] = pd.to_numeric(temp_df["环比指数"], errors="coerce")
108
+ temp_df["同比指数"] = pd.to_numeric(temp_df["同比指数"], errors="coerce")
106
109
  return temp_df
107
110
 
108
111
 
109
112
  if __name__ == "__main__":
110
- index_cflp_price_df = index_cflp_price(symbol="周指数")
111
- print(index_cflp_price_df)
113
+ index_price_cflp_df = index_price_cflp(symbol="周指数")
114
+ print(index_price_cflp_df)
112
115
 
113
- index_cflp_price_df = index_cflp_price(symbol="月指数")
114
- print(index_cflp_price_df)
116
+ index_price_cflp_df = index_price_cflp(symbol="月指数")
117
+ print(index_price_cflp_df)
115
118
 
116
- index_cflp_price_df = index_cflp_price(symbol="季度指数")
117
- print(index_cflp_price_df)
119
+ index_price_cflp_df = index_price_cflp(symbol="季度指数")
120
+ print(index_price_cflp_df)
118
121
 
119
- index_cflp_price_df = index_cflp_price(symbol="年度指数")
120
- print(index_cflp_price_df)
122
+ index_price_cflp_df = index_price_cflp(symbol="年度指数")
123
+ print(index_price_cflp_df)
121
124
 
122
- index_cflp_volume_df = index_cflp_volume(symbol="月指数")
123
- print(index_cflp_volume_df)
125
+ index_volume_cflp_df = index_volume_cflp(symbol="月指数")
126
+ print(index_volume_cflp_df)
124
127
 
125
- index_cflp_volume_df = index_cflp_volume(symbol="季度指数")
126
- print(index_cflp_volume_df)
128
+ index_volume_cflp_df = index_volume_cflp(symbol="季度指数")
129
+ print(index_volume_cflp_df)
127
130
 
128
- index_cflp_volume_df = index_cflp_volume(symbol="年度指数")
129
- print(index_cflp_volume_df)
131
+ index_volume_cflp_df = index_volume_cflp(symbol="年度指数")
132
+ print(index_volume_cflp_df)
@@ -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