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.

Files changed (236) hide show
  1. akshare/__init__.py +442 -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.73.dist-info}/METADATA +52 -69
  215. akshare-1.15.73.dist-info/RECORD +385 -0
  216. {akshare-1.12.99.dist-info → akshare-1.15.73.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.73.dist-info}/LICENSE +0 -0
  236. {akshare-1.12.99.dist-info → akshare-1.15.73.dist-info}/top_level.txt +0 -0
@@ -1,17 +1,18 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/1/4 23:00
4
+ Date: 2024/5/28 15:30
5
5
  Desc: 股票指数数据-新浪-东财-腾讯
6
6
  所有指数-实时行情数据和历史行情数据
7
7
  https://finance.sina.com.cn/realstock/company/sz399552/nc.shtml
8
8
  """
9
+
9
10
  import datetime
10
11
  import re
11
12
 
12
13
  import pandas as pd
13
14
  import requests
14
- from py_mini_racer import py_mini_racer
15
+ import py_mini_racer
15
16
 
16
17
  from akshare.index.cons import (
17
18
  zh_sina_index_stock_payload,
@@ -69,7 +70,7 @@ def stock_zh_index_spot_sina() -> pd.DataFrame:
69
70
  zh_sina_stock_payload_copy.update({"page": page})
70
71
  res = requests.get(zh_sina_index_stock_url, params=zh_sina_stock_payload_copy)
71
72
  data_json = demjson.decode(res.text)
72
- big_df = pd.concat([big_df, pd.DataFrame(data_json)], ignore_index=True)
73
+ big_df = pd.concat(objs=[big_df, pd.DataFrame(data_json)], ignore_index=True)
73
74
  big_df = big_df.map(_replace_comma)
74
75
  big_df["trade"] = pd.to_numeric(big_df["trade"], errors="coerce")
75
76
  big_df["pricechange"] = pd.to_numeric(big_df["pricechange"], errors="coerce")
@@ -112,27 +113,110 @@ def stock_zh_index_spot_sina() -> pd.DataFrame:
112
113
  "成交额",
113
114
  ]
114
115
  ]
115
- big_df['最新价'] = pd.to_numeric(big_df['最新价'], errors="coerce")
116
- big_df['涨跌额'] = pd.to_numeric(big_df['涨跌额'], errors="coerce")
117
- big_df['涨跌幅'] = pd.to_numeric(big_df['涨跌幅'], errors="coerce")
118
- big_df['昨收'] = pd.to_numeric(big_df['昨收'], errors="coerce")
119
- big_df['今开'] = pd.to_numeric(big_df['今开'], errors="coerce")
120
- big_df['最高'] = pd.to_numeric(big_df['最高'], errors="coerce")
121
- big_df['最低'] = pd.to_numeric(big_df['最低'], errors="coerce")
122
- big_df['成交量'] = pd.to_numeric(big_df['成交量'], errors="coerce")
123
- big_df['成交额'] = pd.to_numeric(big_df['成交额'], errors="coerce")
116
+ big_df["最新价"] = pd.to_numeric(big_df["最新价"], errors="coerce")
117
+ big_df["涨跌额"] = pd.to_numeric(big_df["涨跌额"], errors="coerce")
118
+ big_df["涨跌幅"] = pd.to_numeric(big_df["涨跌幅"], errors="coerce")
119
+ big_df["昨收"] = pd.to_numeric(big_df["昨收"], errors="coerce")
120
+ big_df["今开"] = pd.to_numeric(big_df["今开"], errors="coerce")
121
+ big_df["最高"] = pd.to_numeric(big_df["最高"], errors="coerce")
122
+ big_df["最低"] = pd.to_numeric(big_df["最低"], errors="coerce")
123
+ big_df["成交量"] = pd.to_numeric(big_df["成交量"], errors="coerce")
124
+ big_df["成交额"] = pd.to_numeric(big_df["成交额"], errors="coerce")
124
125
  return big_df
125
126
 
126
127
 
128
+ def __stock_zh_main_spot_em() -> pd.DataFrame:
129
+ """
130
+ 东方财富网-行情中心-沪深重要指数
131
+ https://quote.eastmoney.com/center/hszs.html
132
+ :return: 指数的实时行情数据
133
+ :rtype: pandas.DataFrame
134
+ """
135
+ url = "https://33.push2.eastmoney.com/api/qt/clist/get"
136
+ params = {
137
+ "pn": "1",
138
+ "pz": "5000",
139
+ "po": "1",
140
+ "np": "1",
141
+ "ut": "bd1d9ddb04089700cf9c27f6f7426281",
142
+ "fltt": "2",
143
+ "invt": "2",
144
+ "dect": "1",
145
+ "wbp2u": "|0|0|0|web",
146
+ "fid": "",
147
+ "fs": "b:MK0010",
148
+ "fields": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,"
149
+ "f23,f24,f25,f26,f22,f11,f62,f128,f136,f115,f152",
150
+ "_": "1704327268532",
151
+ }
152
+ r = requests.get(url, params=params)
153
+ data_json = r.json()
154
+ temp_df = pd.DataFrame(data_json["data"]["diff"])
155
+ temp_df.reset_index(inplace=True)
156
+ temp_df["index"] = temp_df["index"] + 1
157
+ temp_df.rename(
158
+ columns={
159
+ "index": "序号",
160
+ "f2": "最新价",
161
+ "f3": "涨跌幅",
162
+ "f4": "涨跌额",
163
+ "f5": "成交量",
164
+ "f6": "成交额",
165
+ "f7": "振幅",
166
+ "f10": "量比",
167
+ "f12": "代码",
168
+ "f14": "名称",
169
+ "f15": "最高",
170
+ "f16": "最低",
171
+ "f17": "今开",
172
+ "f18": "昨收",
173
+ },
174
+ inplace=True,
175
+ )
176
+ temp_df = temp_df[
177
+ [
178
+ "序号",
179
+ "代码",
180
+ "名称",
181
+ "最新价",
182
+ "涨跌幅",
183
+ "涨跌额",
184
+ "成交量",
185
+ "成交额",
186
+ "振幅",
187
+ "最高",
188
+ "最低",
189
+ "今开",
190
+ "昨收",
191
+ "量比",
192
+ ]
193
+ ]
194
+ temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce")
195
+ temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"], errors="coerce")
196
+ temp_df["涨跌额"] = pd.to_numeric(temp_df["涨跌额"], errors="coerce")
197
+ temp_df["成交量"] = pd.to_numeric(temp_df["成交量"], errors="coerce")
198
+ temp_df["成交额"] = pd.to_numeric(temp_df["成交额"], errors="coerce")
199
+ temp_df["振幅"] = pd.to_numeric(temp_df["振幅"], errors="coerce")
200
+ temp_df["最高"] = pd.to_numeric(temp_df["最高"], errors="coerce")
201
+ temp_df["最低"] = pd.to_numeric(temp_df["最低"], errors="coerce")
202
+ temp_df["今开"] = pd.to_numeric(temp_df["今开"], errors="coerce")
203
+ temp_df["昨收"] = pd.to_numeric(temp_df["昨收"], errors="coerce")
204
+ temp_df["量比"] = pd.to_numeric(temp_df["量比"], errors="coerce")
205
+ return temp_df
206
+
207
+
127
208
  def stock_zh_index_spot_em(symbol: str = "上证系列指数") -> pd.DataFrame:
128
209
  """
129
210
  东方财富网-行情中心-沪深京指数
130
211
  https://quote.eastmoney.com/center/gridlist.html#index_sz
131
- :param symbol: "上证系列指数"; choice of {"上证系列指数", "深证系列指数", "指数成份", "中证系列指数"}
212
+ :param symbol: "上证系列指数"; choice of {"沪深重要指数", "上证系列指数", "深证系列指数", "指数成份", "中证系列指数"}
132
213
  :type symbol: str
133
214
  :return: 指数的实时行情数据
134
215
  :rtype: pandas.DataFrame
135
216
  """
217
+ if symbol == "沪深重要指数":
218
+ return __stock_zh_main_spot_em()
219
+
136
220
  url = "https://48.push2.eastmoney.com/api/qt/clist/get"
137
221
  symbol_map = {
138
222
  "上证系列指数": "m:1 s:2",
@@ -141,67 +225,73 @@ def stock_zh_index_spot_em(symbol: str = "上证系列指数") -> pd.DataFrame:
141
225
  "中证系列指数": "m:2",
142
226
  }
143
227
  params = {
144
- 'pn': '1',
145
- 'pz': '5000',
146
- 'po': '1',
147
- 'np': '1',
148
- 'ut': 'bd1d9ddb04089700cf9c27f6f7426281',
149
- 'fltt': '2',
150
- 'invt': '2',
151
- 'wbp2u': '|0|0|0|web',
152
- 'fid': 'f3',
153
- 'fs': symbol_map[symbol],
154
- 'fields': 'f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f26,f22,f33,f11,f62,f128,f136,f115,f152',
155
- '_': '1704327268532',
228
+ "pn": "1",
229
+ "pz": "5000",
230
+ "po": "1",
231
+ "np": "1",
232
+ "ut": "bd1d9ddb04089700cf9c27f6f7426281",
233
+ "fltt": "2",
234
+ "invt": "2",
235
+ "wbp2u": "|0|0|0|web",
236
+ "fid": "f3",
237
+ "fs": symbol_map[symbol],
238
+ "fields": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,"
239
+ "f26,f22,f33,f11,f62,f128,f136,f115,f152",
240
+ "_": "1704327268532",
156
241
  }
157
242
  r = requests.get(url, params=params)
158
243
  data_json = r.json()
159
- temp_df = pd.DataFrame(data_json['data']['diff'])
244
+ temp_df = pd.DataFrame(data_json["data"]["diff"])
160
245
  temp_df.reset_index(inplace=True)
161
- temp_df['index'] = temp_df['index'] + 1
162
- temp_df.rename(columns={
163
- 'index': '序号',
164
- 'f2': '最新价',
165
- 'f3': '涨跌幅',
166
- 'f4': '涨跌额',
167
- 'f5': '成交量',
168
- 'f6': '成交额',
169
- 'f7': '振幅',
170
- 'f10': '量比',
171
- 'f12': '代码',
172
- 'f14': '名称',
173
- 'f15': '最高',
174
- 'f16': '最低',
175
- 'f17': '今开',
176
- 'f18': '昨收',
177
- }, inplace=True)
178
- temp_df = temp_df[[
179
- '序号',
180
- '代码',
181
- '名称',
182
- '最新价',
183
- '涨跌幅',
184
- '涨跌额',
185
- '成交量',
186
- '成交额',
187
- '振幅',
188
- '最高',
189
- '最低',
190
- '今开',
191
- '昨收',
192
- '量比',
193
- ]]
194
- temp_df['最新价'] = pd.to_numeric(temp_df['最新价'], errors="coerce")
195
- temp_df['涨跌幅'] = pd.to_numeric(temp_df['涨跌幅'], errors="coerce")
196
- temp_df['涨跌额'] = pd.to_numeric(temp_df['涨跌额'], errors="coerce")
197
- temp_df['成交量'] = pd.to_numeric(temp_df['成交量'], errors="coerce")
198
- temp_df['成交额'] = pd.to_numeric(temp_df['成交额'], errors="coerce")
199
- temp_df['振幅'] = pd.to_numeric(temp_df['振幅'], errors="coerce")
200
- temp_df['最高'] = pd.to_numeric(temp_df['最高'], errors="coerce")
201
- temp_df['最低'] = pd.to_numeric(temp_df['最低'], errors="coerce")
202
- temp_df['今开'] = pd.to_numeric(temp_df['今开'], errors="coerce")
203
- temp_df['昨收'] = pd.to_numeric(temp_df['昨收'], errors="coerce")
204
- temp_df['量比'] = pd.to_numeric(temp_df['量比'], errors="coerce")
246
+ temp_df["index"] = temp_df["index"] + 1
247
+ temp_df.rename(
248
+ columns={
249
+ "index": "序号",
250
+ "f2": "最新价",
251
+ "f3": "涨跌幅",
252
+ "f4": "涨跌额",
253
+ "f5": "成交量",
254
+ "f6": "成交额",
255
+ "f7": "振幅",
256
+ "f10": "量比",
257
+ "f12": "代码",
258
+ "f14": "名称",
259
+ "f15": "最高",
260
+ "f16": "最低",
261
+ "f17": "今开",
262
+ "f18": "昨收",
263
+ },
264
+ inplace=True,
265
+ )
266
+ temp_df = temp_df[
267
+ [
268
+ "序号",
269
+ "代码",
270
+ "名称",
271
+ "最新价",
272
+ "涨跌幅",
273
+ "涨跌额",
274
+ "成交量",
275
+ "成交额",
276
+ "振幅",
277
+ "最高",
278
+ "最低",
279
+ "今开",
280
+ "昨收",
281
+ "量比",
282
+ ]
283
+ ]
284
+ temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce")
285
+ temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"], errors="coerce")
286
+ temp_df["涨跌额"] = pd.to_numeric(temp_df["涨跌额"], errors="coerce")
287
+ temp_df["成交量"] = pd.to_numeric(temp_df["成交量"], errors="coerce")
288
+ temp_df["成交额"] = pd.to_numeric(temp_df["成交额"], errors="coerce")
289
+ temp_df["振幅"] = pd.to_numeric(temp_df["振幅"], errors="coerce")
290
+ temp_df["最高"] = pd.to_numeric(temp_df["最高"], errors="coerce")
291
+ temp_df["最低"] = pd.to_numeric(temp_df["最低"], errors="coerce")
292
+ temp_df["今开"] = pd.to_numeric(temp_df["今开"], errors="coerce")
293
+ temp_df["昨收"] = pd.to_numeric(temp_df["昨收"], errors="coerce")
294
+ temp_df["量比"] = pd.to_numeric(temp_df["量比"], errors="coerce")
205
295
  return temp_df
206
296
 
207
297
 
@@ -240,7 +330,7 @@ def get_tx_start_year(symbol: str = "sh000919") -> pd.DataFrame:
240
330
  :return: 开始日期
241
331
  :rtype: pandas.DataFrame
242
332
  """
243
- url = "http://web.ifzq.gtimg.cn/other/klineweb/klineWeb/weekTrends"
333
+ url = "https://web.ifzq.gtimg.cn/other/klineweb/klineWeb/weekTrends"
244
334
  params = {
245
335
  "code": symbol,
246
336
  "type": "qfq",
@@ -249,7 +339,7 @@ def get_tx_start_year(symbol: str = "sh000919") -> pd.DataFrame:
249
339
  }
250
340
  r = requests.get(url, params=params)
251
341
  data_text = r.text
252
- if not demjson.decode(data_text[data_text.find("={") + 1:])["data"]:
342
+ if not demjson.decode(data_text[data_text.find("={") + 1 :])["data"]:
253
343
  url = "https://proxy.finance.qq.com/ifzqgtimg/appstock/app/newfqkline/get"
254
344
  params = {
255
345
  "_var": "kline_dayqfq",
@@ -258,18 +348,18 @@ def get_tx_start_year(symbol: str = "sh000919") -> pd.DataFrame:
258
348
  }
259
349
  r = requests.get(url, params=params)
260
350
  data_text = r.text
261
- start_date = demjson.decode(data_text[data_text.find("={") + 1:])["data"][
351
+ start_date = demjson.decode(data_text[data_text.find("={") + 1 :])["data"][
262
352
  symbol
263
353
  ]["day"][0][0]
264
354
  return start_date
265
- start_date = demjson.decode(data_text[data_text.find("={") + 1:])["data"][0][0]
355
+ start_date = demjson.decode(data_text[data_text.find("={") + 1 :])["data"][0][0]
266
356
  return start_date
267
357
 
268
358
 
269
359
  def stock_zh_index_daily_tx(symbol: str = "sz980017") -> pd.DataFrame:
270
360
  """
271
361
  腾讯证券-日频-股票或者指数历史数据
272
- 作为 stock_zh_index_daily 的补充, 因为在新浪中有部分指数数据缺失
362
+ 作为 ak.stock_zh_index_daily() 的补充, 因为在新浪中有部分指数数据缺失
273
363
  注意都是: 前复权, 不同网站复权方式不同, 不可混用数据
274
364
  https://gu.qq.com/sh000919/zs
275
365
  :param symbol: 带市场标识的股票或者指数代码
@@ -293,13 +383,13 @@ def stock_zh_index_daily_tx(symbol: str = "sz980017") -> pd.DataFrame:
293
383
  text = res.text
294
384
  try:
295
385
  inner_temp_df = pd.DataFrame(
296
- demjson.decode(text[text.find("={") + 1:])["data"][symbol]["day"]
386
+ demjson.decode(text[text.find("={") + 1 :])["data"][symbol]["day"]
297
387
  )
298
- except:
388
+ except: # noqa: E722
299
389
  inner_temp_df = pd.DataFrame(
300
- demjson.decode(text[text.find("={") + 1:])["data"][symbol]["qfqday"]
390
+ demjson.decode(text[text.find("={") + 1 :])["data"][symbol]["qfqday"]
301
391
  )
302
- temp_df = pd.concat([temp_df, inner_temp_df], ignore_index=True)
392
+ temp_df = pd.concat(objs=[temp_df, inner_temp_df], ignore_index=True)
303
393
  if temp_df.shape[1] == 6:
304
394
  temp_df.columns = ["date", "open", "close", "high", "low", "amount"]
305
395
  else:
@@ -316,9 +406,9 @@ def stock_zh_index_daily_tx(symbol: str = "sz980017") -> pd.DataFrame:
316
406
 
317
407
 
318
408
  def stock_zh_index_daily_em(
319
- symbol: str = "csi931151",
320
- start_date: str = "19900101",
321
- end_date: str = "20500101",
409
+ symbol: str = "csi931151",
410
+ start_date: str = "19900101",
411
+ end_date: str = "20500101",
322
412
  ) -> pd.DataFrame:
323
413
  """
324
414
  东方财富网-股票指数数据
@@ -333,7 +423,7 @@ def stock_zh_index_daily_em(
333
423
  :rtype: pandas.DataFrame
334
424
  """
335
425
  market_map = {"sz": "0", "sh": "1", "csi": "2"}
336
- url = "http://push2his.eastmoney.com/api/qt/stock/kline/get"
426
+ url = "https://push2his.eastmoney.com/api/qt/stock/kline/get"
337
427
  if symbol.find("sz") != -1:
338
428
  secid = "{}.{}".format(market_map["sz"], symbol.replace("sz", ""))
339
429
  elif symbol.find("sh") != -1:
@@ -356,8 +446,11 @@ def stock_zh_index_daily_em(
356
446
  }
357
447
  r = requests.get(url, params=params)
358
448
  data_text = r.text
359
- data_json = demjson.decode(data_text[data_text.find("{"): -2])
449
+ data_json = demjson.decode(data_text[data_text.find("{") : -2])
360
450
  temp_df = pd.DataFrame([item.split(",") for item in data_json["data"]["klines"]])
451
+ # check temp_df data availability before further transformations which may raise errors
452
+ if temp_df.empty:
453
+ return pd.DataFrame()
361
454
  temp_df.columns = ["date", "open", "close", "high", "low", "volume", "amount", "_"]
362
455
  temp_df = temp_df[["date", "open", "close", "high", "low", "volume", "amount"]]
363
456
  temp_df["open"] = pd.to_numeric(temp_df["open"], errors="coerce")
@@ -370,19 +463,17 @@ def stock_zh_index_daily_em(
370
463
 
371
464
 
372
465
  if __name__ == "__main__":
373
- stock_zh_index_daily_df = stock_zh_index_daily(symbol="sz399905")
466
+ stock_zh_index_daily_df = stock_zh_index_daily(symbol="sh000510")
374
467
  print(stock_zh_index_daily_df)
375
468
 
376
469
  stock_zh_index_spot_sina_df = stock_zh_index_spot_sina()
377
470
  print(stock_zh_index_spot_sina_df)
378
471
 
379
- stock_zh_index_spot_em_df = stock_zh_index_spot_em(symbol="上证系列指数")
472
+ stock_zh_index_spot_em_df = stock_zh_index_spot_em(symbol="沪深重要指数")
380
473
  print(stock_zh_index_spot_em_df)
381
474
 
382
475
  stock_zh_index_daily_tx_df = stock_zh_index_daily_tx(symbol="sh000919")
383
476
  print(stock_zh_index_daily_tx_df)
384
477
 
385
- stock_zh_index_daily_em_df = stock_zh_index_daily_em(
386
- symbol="sz399812"
387
- )
478
+ stock_zh_index_daily_em_df = stock_zh_index_daily_em(symbol="sz399812")
388
479
  print(stock_zh_index_daily_em_df)