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
@@ -0,0 +1,108 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ Date: 2024/7/26 18:30
5
+ Desc: 东方财富网-行情中心-港股市场-知名港股
6
+ https://quote.eastmoney.com/center/gridlist.html#hk_wellknown
7
+ """
8
+
9
+ import pandas as pd
10
+ import requests
11
+
12
+
13
+ def stock_hk_famous_spot_em() -> pd.DataFrame:
14
+ """
15
+ 东方财富网-行情中心-港股市场-知名港股
16
+ https://quote.eastmoney.com/center/gridlist.html#hk_wellknown
17
+ :return: 知名美股实时行情
18
+ :rtype: pandas.DataFrame
19
+ """
20
+ url = "https://69.push2.eastmoney.com/api/qt/clist/get"
21
+ params = {
22
+ "pn": "1",
23
+ "pz": "2000",
24
+ "po": "1",
25
+ "np": "1",
26
+ "ut": "bd1d9ddb04089700cf9c27f6f7426281",
27
+ "fltt": "2",
28
+ "invt": "2",
29
+ "dect": "1",
30
+ "wbp2u": "|0|0|0|web",
31
+ "fid": "f3",
32
+ "fs": "b:DLMK0106",
33
+ "fields": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,"
34
+ "f25,f26,f22,f33,f11,f62,f128,f136,f115,f152",
35
+ "_": "1631271634231",
36
+ }
37
+ r = requests.get(url, params=params)
38
+ data_json = r.json()
39
+ temp_df = pd.DataFrame(data_json["data"]["diff"])
40
+ temp_df.columns = [
41
+ "_",
42
+ "最新价",
43
+ "涨跌幅",
44
+ "涨跌额",
45
+ "成交量",
46
+ "成交额",
47
+ "_",
48
+ "_",
49
+ "_",
50
+ "_",
51
+ "_",
52
+ "代码",
53
+ "编码",
54
+ "名称",
55
+ "最高",
56
+ "最低",
57
+ "今开",
58
+ "昨收",
59
+ "总市值",
60
+ "_",
61
+ "_",
62
+ "_",
63
+ "_",
64
+ "_",
65
+ "_",
66
+ "_",
67
+ "_",
68
+ "市盈率",
69
+ "_",
70
+ "_",
71
+ "_",
72
+ "_",
73
+ "_",
74
+ ]
75
+ temp_df.reset_index(inplace=True)
76
+ temp_df["index"] = range(1, len(temp_df) + 1)
77
+ temp_df.rename(columns={"index": "序号"}, inplace=True)
78
+ temp_df = temp_df[
79
+ [
80
+ "序号",
81
+ "代码",
82
+ "名称",
83
+ "最新价",
84
+ "涨跌额",
85
+ "涨跌幅",
86
+ "今开",
87
+ "最高",
88
+ "最低",
89
+ "昨收",
90
+ "成交量",
91
+ "成交额",
92
+ ]
93
+ ]
94
+ temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce")
95
+ temp_df["涨跌额"] = pd.to_numeric(temp_df["涨跌额"], errors="coerce")
96
+ temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"], errors="coerce")
97
+ temp_df["今开"] = pd.to_numeric(temp_df["今开"], errors="coerce")
98
+ temp_df["最高"] = pd.to_numeric(temp_df["最高"], errors="coerce")
99
+ temp_df["最低"] = pd.to_numeric(temp_df["最低"], errors="coerce")
100
+ temp_df["昨收"] = pd.to_numeric(temp_df["昨收"], errors="coerce")
101
+ temp_df["成交量"] = pd.to_numeric(temp_df["成交量"], errors="coerce")
102
+ temp_df["成交额"] = pd.to_numeric(temp_df["成交额"], errors="coerce")
103
+ return temp_df
104
+
105
+
106
+ if __name__ == "__main__":
107
+ stock_hk_famous_spot_em_df = stock_hk_famous_spot_em()
108
+ print(stock_hk_famous_spot_em_df)
@@ -5,9 +5,10 @@ Date: 2023/9/2 19:00
5
5
  Desc: 新浪财经-港股-实时行情数据和历史行情数据(包含前复权和后复权因子)
6
6
  http://stock.finance.sina.com.cn/hkstock/quotes/00700.html
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
- from py_mini_racer import py_mini_racer
11
+ import py_mini_racer
11
12
 
12
13
  from akshare.stock.cons import (
13
14
  hk_js_decode,
@@ -95,7 +96,7 @@ def stock_hk_daily(symbol: str = "00981", adjust: str = "") -> pd.DataFrame:
95
96
  data_df.reset_index(inplace=True)
96
97
  data_df["date"] = pd.to_datetime(data_df["date"]).dt.date
97
98
  return data_df
98
- except SyntaxError as e:
99
+ except SyntaxError:
99
100
  data_df.reset_index(inplace=True)
100
101
  data_df["date"] = pd.to_datetime(data_df["date"]).dt.date
101
102
  return data_df
@@ -114,7 +115,7 @@ def stock_hk_daily(symbol: str = "00981", adjust: str = "") -> pd.DataFrame:
114
115
  try:
115
116
  # try for pandas >= 2.1.0
116
117
  new_range.ffill(inplace=True)
117
- except Exception as e:
118
+ except Exception:
118
119
  try:
119
120
  new_range.fillna(method="ffill", inplace=True)
120
121
  except Exception as e:
@@ -127,7 +128,7 @@ def stock_hk_daily(symbol: str = "00981", adjust: str = "") -> pd.DataFrame:
127
128
  try:
128
129
  # try for pandas >= 2.1.0
129
130
  temp_df.ffill(inplace=True)
130
- except Exception as e:
131
+ except Exception:
131
132
  try:
132
133
  # try for pandas < 2.1.0
133
134
  temp_df.fillna(method="ffill", inplace=True)
@@ -160,7 +161,7 @@ def stock_hk_daily(symbol: str = "00981", adjust: str = "") -> pd.DataFrame:
160
161
  data_df["date"] = pd.to_datetime(data_df["date"]).dt.date
161
162
  return data_df
162
163
 
163
- except SyntaxError as e:
164
+ except SyntaxError:
164
165
  data_df.reset_index(inplace=True)
165
166
  data_df["date"] = pd.to_datetime(data_df["date"]).dt.date
166
167
  return data_df
@@ -178,7 +179,7 @@ def stock_hk_daily(symbol: str = "00981", adjust: str = "") -> pd.DataFrame:
178
179
  try:
179
180
  # try for pandas >= 2.1.0
180
181
  new_range.ffill(inplace=True)
181
- except Exception as e:
182
+ except Exception:
182
183
  try:
183
184
  # try for pandas < 2.1.0
184
185
  new_range.fillna(method="ffill", inplace=True)
@@ -192,7 +193,7 @@ def stock_hk_daily(symbol: str = "00981", adjust: str = "") -> pd.DataFrame:
192
193
  try:
193
194
  # try for pandas >= 2.1.0
194
195
  temp_df.ffill(inplace=True)
195
- except Exception as e:
196
+ except Exception:
196
197
  try:
197
198
  # try for pandas < 2.1.0
198
199
  temp_df.fillna(method="ffill", inplace=True)
@@ -1,18 +1,19 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/8/23 8:30
4
+ Date: 2024/7/24 23:30
5
5
  Desc: 巨潮资讯-数据中心-专题统计-股东股本-实际控制人持股变动
6
- http://webapi.cninfo.com.cn/#/thematicStatistics
6
+ https://webapi.cninfo.com.cn/#/thematicStatistics
7
7
 
8
8
  巨潮资讯-数据中心-专题统计-股东股本-高管持股变动明细
9
- http://webapi.cninfo.com.cn/#/thematicStatistics
9
+ https://webapi.cninfo.com.cn/#/thematicStatistics
10
10
  """
11
+
11
12
  import datetime
12
13
 
13
14
  import pandas as pd
15
+ import py_mini_racer
14
16
  import requests
15
- from py_mini_racer import py_mini_racer
16
17
 
17
18
  from akshare.datasets import get_ths_js
18
19
 
@@ -26,7 +27,7 @@ def _get_file_content_cninfo(file: str = "cninfo.js") -> str:
26
27
  :rtype: str
27
28
  """
28
29
  setting_file_path = get_ths_js(file)
29
- with open(setting_file_path) as f:
30
+ with open(setting_file_path, encoding="utf-8") as f:
30
31
  file_data = f.read()
31
32
  return file_data
32
33
 
@@ -34,7 +35,7 @@ def _get_file_content_cninfo(file: str = "cninfo.js") -> str:
34
35
  def stock_hold_control_cninfo(symbol: str = "全部") -> pd.DataFrame:
35
36
  """
36
37
  巨潮资讯-数据中心-专题统计-股东股本-实际控制人持股变动
37
- http://webapi.cninfo.com.cn/#/thematicStatistics
38
+ https://webapi.cninfo.com.cn/#/thematicStatistics
38
39
  :param symbol: choice of {"单独控制", "实际控制人", "一致行动人", "家族控制", "全部"}; 从 2010 开始
39
40
  :type symbol: str
40
41
  :return: 实际控制人持股变动
@@ -47,7 +48,7 @@ def stock_hold_control_cninfo(symbol: str = "全部") -> pd.DataFrame:
47
48
  "家族控制": "069004",
48
49
  "全部": "",
49
50
  }
50
- url = "http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1033"
51
+ url = "https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1033"
51
52
  js_code = py_mini_racer.MiniRacer()
52
53
  js_content = _get_file_content_cninfo("cninfo.js")
53
54
  js_code.eval(js_content)
@@ -60,11 +61,12 @@ def stock_hold_control_cninfo(symbol: str = "全部") -> pd.DataFrame:
60
61
  "Cache-Control": "no-cache",
61
62
  "Content-Length": "0",
62
63
  "Host": "webapi.cninfo.com.cn",
63
- "Origin": "http://webapi.cninfo.com.cn",
64
+ "Origin": "https://webapi.cninfo.com.cn",
64
65
  "Pragma": "no-cache",
65
66
  "Proxy-Connection": "keep-alive",
66
- "Referer": "http://webapi.cninfo.com.cn/",
67
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36",
67
+ "Referer": "https://webapi.cninfo.com.cn/",
68
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
69
+ "Chrome/93.0.4577.63 Safari/537.36",
68
70
  "X-Requested-With": "XMLHttpRequest",
69
71
  }
70
72
  params = {
@@ -104,7 +106,7 @@ def stock_hold_control_cninfo(symbol: str = "全部") -> pd.DataFrame:
104
106
  def stock_hold_management_detail_cninfo(symbol: str = "增持") -> pd.DataFrame:
105
107
  """
106
108
  巨潮资讯-数据中心-专题统计-股东股本-高管持股变动明细
107
- http://webapi.cninfo.com.cn/#/thematicStatistics
109
+ https://webapi.cninfo.com.cn/#/thematicStatistics
108
110
  :param symbol: choice of {"增持", "减持"}
109
111
  :type symbol: str
110
112
  :return: 高管持股变动明细
@@ -115,7 +117,7 @@ def stock_hold_management_detail_cninfo(symbol: str = "增持") -> pd.DataFrame:
115
117
  "减持": "S",
116
118
  }
117
119
  current_date = datetime.datetime.now().date().isoformat()
118
- url = "http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1030"
120
+ url = "https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1030"
119
121
  js_code = py_mini_racer.MiniRacer()
120
122
  js_content = _get_file_content_cninfo("cninfo.js")
121
123
  js_code.eval(js_content)
@@ -128,11 +130,12 @@ def stock_hold_management_detail_cninfo(symbol: str = "增持") -> pd.DataFrame:
128
130
  "Content-Length": "0",
129
131
  "Host": "webapi.cninfo.com.cn",
130
132
  "Accept-Enckey": mcode,
131
- "Origin": "http://webapi.cninfo.com.cn",
133
+ "Origin": "https://webapi.cninfo.com.cn",
132
134
  "Pragma": "no-cache",
133
135
  "Proxy-Connection": "keep-alive",
134
- "Referer": "http://webapi.cninfo.com.cn/",
135
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36",
136
+ "Referer": "https://webapi.cninfo.com.cn/",
137
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
138
+ "Chrome/93.0.4577.63 Safari/537.36",
136
139
  "X-Requested-With": "XMLHttpRequest",
137
140
  }
138
141
  params = {
@@ -192,6 +195,85 @@ def stock_hold_management_detail_cninfo(symbol: str = "增持") -> pd.DataFrame:
192
195
  return temp_df
193
196
 
194
197
 
198
+ def stock_hold_change_cninfo(symbol: str = "全部") -> pd.DataFrame:
199
+ """
200
+ 巨潮资讯-数据中心-专题统计-股东股本-股本变动
201
+ https://webapi.cninfo.com.cn/#/thematicStatistics
202
+ :param symbol: choice of {"深市主板", "沪市", "创业板", "科创板", "北交所", "全部"}
203
+ :type symbol: str
204
+ :return: 股本变动
205
+ :rtype: pandas.DataFrame
206
+ """
207
+ symbol_map = {
208
+ "深市主板": "012002",
209
+ "沪市": "012001",
210
+ "创业板": "012015",
211
+ "科创板": "012029",
212
+ "北交所": "012046",
213
+ "全部": "",
214
+ }
215
+ url = "https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1029"
216
+ js_code = py_mini_racer.MiniRacer()
217
+ js_content = _get_file_content_cninfo("cninfo.js")
218
+ js_code.eval(js_content)
219
+ mcode = js_code.call("getResCode1")
220
+ headers = {
221
+ "Accept": "/",
222
+ "Accept-Enckey": mcode,
223
+ "Accept-Encoding": "gzip, deflate",
224
+ "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
225
+ "Cache-Control": "no-cache",
226
+ "Content-Length": "0",
227
+ "Host": "webapi.cninfo.com.cn",
228
+ "Origin": "https://webapi.cninfo.com.cn",
229
+ "Pragma": "no-cache",
230
+ "Proxy-Connection": "keep-alive",
231
+ "Referer": "https://webapi.cninfo.com.cn/",
232
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
233
+ "Chrome/93.0.4577.63 Safari/537.36",
234
+ "X-Requested-With": "XMLHttpRequest",
235
+ }
236
+ params = {
237
+ "market": symbol_map[symbol],
238
+ }
239
+ r = requests.get(url, headers=headers, params=params)
240
+ data_json = r.json()
241
+ temp_df = pd.DataFrame(data_json["records"])
242
+ temp_df.columns = [
243
+ "已流通股份",
244
+ "总股本",
245
+ "交易市场",
246
+ "证券简称",
247
+ "公告日期",
248
+ "变动原因",
249
+ "证券代码",
250
+ "变动日期",
251
+ "流通受限股份",
252
+ "已流通比例",
253
+ ]
254
+ temp_df = temp_df[
255
+ [
256
+ "证券代码",
257
+ "证券简称",
258
+ "交易市场",
259
+ "公告日期",
260
+ "变动日期",
261
+ "变动原因",
262
+ "总股本",
263
+ "已流通股份",
264
+ "已流通比例",
265
+ "流通受限股份",
266
+ ]
267
+ ]
268
+ temp_df["变动日期"] = pd.to_datetime(temp_df["变动日期"], errors="coerce").dt.date
269
+ temp_df["公告日期"] = pd.to_datetime(temp_df["公告日期"], errors="coerce").dt.date
270
+ temp_df["总股本"] = pd.to_numeric(temp_df["总股本"], errors="coerce")
271
+ temp_df["已流通股份"] = pd.to_numeric(temp_df["已流通股份"], errors="coerce")
272
+ temp_df["已流通比例"] = pd.to_numeric(temp_df["已流通比例"], errors="coerce")
273
+ temp_df["流通受限股份"] = pd.to_numeric(temp_df["流通受限股份"], errors="coerce")
274
+ return temp_df
275
+
276
+
195
277
  if __name__ == "__main__":
196
278
  stock_hold_control_cninfo_df = stock_hold_control_cninfo(symbol="全部")
197
279
  print(stock_hold_control_cninfo_df)
@@ -200,3 +282,6 @@ if __name__ == "__main__":
200
282
  symbol="增持"
201
283
  )
202
284
  print(stock_hold_management_detail_cninfo_df)
285
+
286
+ stock_hold_change_cninfo_df = stock_hold_change_cninfo(symbol="全部")
287
+ print(stock_hold_change_cninfo_df)
@@ -1,10 +1,11 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/8/8 21:30
4
+ Date: 2024/5/19 18:30
5
5
  Desc: 东方财富网-数据中心-特色数据-高管持股
6
6
  https://data.eastmoney.com/executive/list.html
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
  from tqdm import tqdm
@@ -47,10 +48,10 @@ def stock_hold_management_detail_em() -> pd.DataFrame:
47
48
  "pageNum": page,
48
49
  }
49
50
  )
50
- r = requests.post(url, params=params)
51
+ r = requests.get(url, params=params)
51
52
  data_json = r.json()
52
53
  temp_df = pd.DataFrame(data_json["result"]["data"])
53
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
54
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
54
55
 
55
56
  big_df.rename(
56
57
  columns={
@@ -1,13 +1,14 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/5/30 00:19
4
+ Date: 2024/7/24 23:30
5
5
  Desc: 巨潮资讯-数据中心-专题统计-股东股本-股东人数及持股集中度
6
- http://webapi.cninfo.com.cn/#/thematicStatistics
6
+ https://webapi.cninfo.com.cn/#/thematicStatistics
7
7
  """
8
+
8
9
  import pandas as pd
10
+ import py_mini_racer
9
11
  import requests
10
- from py_mini_racer import py_mini_racer
11
12
 
12
13
  from akshare.datasets import get_ths_js
13
14
 
@@ -21,7 +22,7 @@ def _get_file_content_ths(file: str = "cninfo.js") -> str:
21
22
  :rtype: str
22
23
  """
23
24
  setting_file_path = get_ths_js(file)
24
- with open(setting_file_path) as f:
25
+ with open(setting_file_path, encoding="utf-8") as f:
25
26
  file_data = f.read()
26
27
  return file_data
27
28
 
@@ -29,13 +30,13 @@ def _get_file_content_ths(file: str = "cninfo.js") -> str:
29
30
  def stock_hold_num_cninfo(date: str = "20210630") -> pd.DataFrame:
30
31
  """
31
32
  巨潮资讯-数据中心-专题统计-股东股本-股东人数及持股集中度
32
- http://webapi.cninfo.com.cn/#/thematicStatistics
33
+ https://webapi.cninfo.com.cn/#/thematicStatistics
33
34
  :param date: choice of {"XXXX0331", "XXXX0630", "XXXX0930", "XXXX1231"}; 从 20170331 开始
34
35
  :type date: str
35
36
  :return: 股东人数及持股集中度
36
37
  :rtype: pandas.DataFrame
37
38
  """
38
- url = "http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1034"
39
+ url = "https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1034"
39
40
  js_code = py_mini_racer.MiniRacer()
40
41
  js_content = _get_file_content_ths("cninfo.js")
41
42
  js_code.eval(js_content)
@@ -48,11 +49,12 @@ def stock_hold_num_cninfo(date: str = "20210630") -> pd.DataFrame:
48
49
  "Cache-Control": "no-cache",
49
50
  "Content-Length": "0",
50
51
  "Host": "webapi.cninfo.com.cn",
51
- "Origin": "http://webapi.cninfo.com.cn",
52
+ "Origin": "https://webapi.cninfo.com.cn",
52
53
  "Pragma": "no-cache",
53
54
  "Proxy-Connection": "keep-alive",
54
- "Referer": "http://webapi.cninfo.com.cn/",
55
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36",
55
+ "Referer": "https://webapi.cninfo.com.cn/",
56
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
57
+ "Chrome/93.0.4577.63 Safari/537.36",
56
58
  "X-Requested-With": "XMLHttpRequest",
57
59
  }
58
60
  params = {
@@ -85,15 +87,19 @@ def stock_hold_num_cninfo(date: str = "20210630") -> pd.DataFrame:
85
87
  "人均持股数量增幅",
86
88
  ]
87
89
  ]
88
- temp_df["变动日期"] = pd.to_datetime(temp_df["变动日期"]).dt.date
90
+ temp_df["变动日期"] = pd.to_datetime(temp_df["变动日期"], errors="coerce").dt.date
89
91
  temp_df["本期人均持股数量"] = pd.to_numeric(
90
92
  temp_df["本期人均持股数量"], errors="coerce"
91
93
  )
92
94
  temp_df["股东人数增幅"] = pd.to_numeric(temp_df["股东人数增幅"], errors="coerce")
93
95
  temp_df["上期股东人数"] = pd.to_numeric(temp_df["上期股东人数"], errors="coerce")
94
96
  temp_df["本期股东人数"] = pd.to_numeric(temp_df["本期股东人数"], errors="coerce")
95
- temp_df["人均持股数量增幅"] = pd.to_numeric(temp_df["人均持股数量增幅"], errors="coerce")
96
- temp_df["上期人均持股数量"] = pd.to_numeric(temp_df["上期人均持股数量"], errors="coerce")
97
+ temp_df["人均持股数量增幅"] = pd.to_numeric(
98
+ temp_df["人均持股数量增幅"], errors="coerce"
99
+ )
100
+ temp_df["上期人均持股数量"] = pd.to_numeric(
101
+ temp_df["上期人均持股数量"], errors="coerce"
102
+ )
97
103
  return temp_df
98
104
 
99
105
 
@@ -5,6 +5,7 @@ Date: 2023/7/8 17:15
5
5
  Desc: 东方财富个股人气榜
6
6
  https://guba.eastmoney.com/rank/
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
 
@@ -190,7 +191,7 @@ def stock_hot_rank_relate_em(symbol: str = "SZ000665") -> pd.DataFrame:
190
191
  temp_df.columns = ["时间", "-", "股票代码", "-", "相关股票代码", "涨跌幅", "-"]
191
192
  temp_df = temp_df[["时间", "股票代码", "相关股票代码", "涨跌幅"]]
192
193
  temp_df["涨跌幅"] = temp_df["涨跌幅"].str.strip("%")
193
- temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"])
194
+ temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"], errors="coerce")
194
195
  return temp_df
195
196
 
196
197
 
@@ -5,12 +5,15 @@ Date: 2023/4/21 14:19
5
5
  Desc: 百度股市通-热搜股票
6
6
  https://gushitong.baidu.com/expressnews
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
  from datetime import datetime
11
12
 
12
13
 
13
- def stock_hot_search_baidu(symbol: str = "A股", date: str = "20230428", time: str = "今日"):
14
+ def stock_hot_search_baidu(
15
+ symbol: str = "A股", date: str = "20240929", time: str = "今日"
16
+ ):
14
17
  """
15
18
  百度股市通-热搜股票
16
19
  https://gushitong.baidu.com/expressnews
@@ -55,6 +58,6 @@ def stock_hot_search_baidu(symbol: str = "A股", date: str = "20230428", time: s
55
58
 
56
59
  if __name__ == "__main__":
57
60
  stock_hot_search_baidu_df = stock_hot_search_baidu(
58
- symbol="A股", date="20230428", time="今日"
61
+ symbol="A股", date="20240929", time="今日"
59
62
  )
60
63
  print(stock_hot_search_baidu_df)
@@ -1,15 +1,16 @@
1
1
  # -*- coding:utf-8 -*-
2
2
  # !/usr/bin/env python
3
3
  """
4
- Date: 2023/5/29 23:34
4
+ Date: 2024/5/19 18:34
5
5
  Desc: 巨潮资讯-行业分类数据
6
- http://webapi.cninfo.com.cn/#/apiDoc
7
- http://webapi.cninfo.com.cn/api/stock/p_stock2110
6
+ https://webapi.cninfo.com.cn/#/apiDoc
7
+ https://webapi.cninfo.com.cn/api/stock/p_stock2110
8
8
  """
9
+
9
10
  import numpy as np
10
11
  import pandas as pd
11
12
  import requests
12
- from py_mini_racer import py_mini_racer
13
+ import py_mini_racer
13
14
 
14
15
  from akshare.datasets import get_ths_js
15
16
 
@@ -23,7 +24,7 @@ def _get_file_content_ths(file: str = "cninfo.js") -> str:
23
24
  :rtype: str
24
25
  """
25
26
  setting_file_path = get_ths_js(file)
26
- with open(setting_file_path) as f:
27
+ with open(setting_file_path, encoding="utf-8") as f:
27
28
  file_data = f.read()
28
29
  return file_data
29
30
 
@@ -31,9 +32,10 @@ def _get_file_content_ths(file: str = "cninfo.js") -> str:
31
32
  def stock_industry_category_cninfo(symbol: str = "巨潮行业分类标准") -> pd.DataFrame:
32
33
  """
33
34
  巨潮资讯-行业分类数据
34
- http://webapi.cninfo.com.cn/#/apiDoc
35
+ https://webapi.cninfo.com.cn/#/apiDoc
35
36
  查询 p_public0002 接口
36
- :param symbol: 行业类型; choice of {"证监会行业分类标准", "巨潮行业分类标准", "申银万国行业分类标准", "新财富行业分类标准", "国资委行业分类标准", "巨潮产业细分标准", "天相行业分类标准", "全球行业分类标准"}
37
+ :param symbol: 行业类型; choice of {"证监会行业分类标准", "巨潮行业分类标准", "申银万国行业分类标准",
38
+ "新财富行业分类标准", "国资委行业分类标准", "巨潮产业细分标准", "天相行业分类标准", "全球行业分类标准"}
37
39
  :type symbol: str
38
40
  :return: 行业分类数据
39
41
  :rtype: pandas.DataFrame
@@ -48,7 +50,7 @@ def stock_industry_category_cninfo(symbol: str = "巨潮行业分类标准") ->
48
50
  "天相行业分类标准": "008007",
49
51
  "全球行业分类标准": "008008",
50
52
  }
51
- url = "http://webapi.cninfo.com.cn/api/stock/p_public0002"
53
+ url = "https://webapi.cninfo.com.cn/api/stock/p_public0002"
52
54
  params = {"indcode": "", "indtype": symbol_map[symbol], "format": "json"}
53
55
  js_code = py_mini_racer.MiniRacer()
54
56
  js_content = _get_file_content_ths("cninfo.js")
@@ -62,11 +64,12 @@ def stock_industry_category_cninfo(symbol: str = "巨潮行业分类标准") ->
62
64
  "Content-Length": "0",
63
65
  "Host": "webapi.cninfo.com.cn",
64
66
  "Accept-Enckey": mcode,
65
- "Origin": "http://webapi.cninfo.com.cn",
67
+ "Origin": "https://webapi.cninfo.com.cn",
66
68
  "Pragma": "no-cache",
67
69
  "Proxy-Connection": "keep-alive",
68
- "Referer": "http://webapi.cninfo.com.cn/",
69
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36",
70
+ "Referer": "https://webapi.cninfo.com.cn/",
71
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
72
+ "Chrome/93.0.4577.63 Safari/537.36",
70
73
  "X-Requested-With": "XMLHttpRequest",
71
74
  }
72
75
  r = requests.get(url, params=params, headers=headers)
@@ -89,11 +92,13 @@ def stock_industry_category_cninfo(symbol: str = "巨潮行业分类标准") ->
89
92
  g = tmp.groupby("len")
90
93
  level = 0
91
94
  for k in g.groups.keys():
92
- temp_df.loc[temp_df["类目编码"].isin(g.get_group(k)["类目编码"]), "Level"] = level
95
+ temp_df.loc[temp_df["类目编码"].isin(g.get_group(k)["类目编码"]), "Level"] = (
96
+ level
97
+ )
93
98
  level += 1
94
99
  temp_df["Level"] = temp_df["Level"].astype(int)
95
100
  temp_df.rename(columns={"Level": "分级"}, inplace=True)
96
- temp_df["终止日期"] = pd.to_datetime(temp_df["终止日期"]).dt.date
101
+ temp_df["终止日期"] = pd.to_datetime(temp_df["终止日期"], errors="coerce").dt.date
97
102
  return temp_df
98
103
 
99
104
 
@@ -104,7 +109,7 @@ def stock_industry_change_cninfo(
104
109
  ) -> pd.DataFrame:
105
110
  """
106
111
  巨潮资讯-上市公司行业归属的变动情况
107
- http://webapi.cninfo.com.cn/#/apiDoc
112
+ https://webapi.cninfo.com.cn/#/apiDoc
108
113
  查询 p_stock2110 接口
109
114
  :param symbol: 股票代码
110
115
  :type symbol: str
@@ -115,7 +120,7 @@ def stock_industry_change_cninfo(
115
120
  :return: 行业归属的变动情况
116
121
  :rtype: pandas.DataFrame
117
122
  """
118
- url = "http://webapi.cninfo.com.cn/api/stock/p_stock2110"
123
+ url = "https://webapi.cninfo.com.cn/api/stock/p_stock2110"
119
124
  params = {
120
125
  "scode": symbol,
121
126
  "sdate": "-".join([start_date[:4], start_date[4:6], start_date[6:]]),
@@ -134,11 +139,12 @@ def stock_industry_change_cninfo(
134
139
  "Content-Length": "0",
135
140
  "Host": "webapi.cninfo.com.cn",
136
141
  "Accept-Enckey": mcode,
137
- "Origin": "http://webapi.cninfo.com.cn",
142
+ "Origin": "https://webapi.cninfo.com.cn",
138
143
  "Pragma": "no-cache",
139
144
  "Proxy-Connection": "keep-alive",
140
- "Referer": "http://webapi.cninfo.com.cn/",
141
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36",
145
+ "Referer": "https://webapi.cninfo.com.cn/",
146
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
147
+ "Chrome/93.0.4577.63 Safari/537.36",
142
148
  "X-Requested-With": "XMLHttpRequest",
143
149
  }
144
150
  r = requests.post(url, params=params, headers=headers)