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,13 +1,14 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2021/9/14 16:29
4
+ Date: 2024/6/18 18:30
5
5
  Desc: 巨潮资讯-数据中心-行业分析-行业市盈率
6
6
  http://webapi.cninfo.com.cn/#/thematicStatistics?name=%E6%8A%95%E8%B5%84%E8%AF%84%E7%BA%A7
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.datasets import get_ths_js
13
14
 
@@ -21,12 +22,14 @@ 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
 
28
29
 
29
- def stock_industry_pe_ratio_cninfo(symbol: str = "证监会行业分类", date: str = "20210910") -> pd.DataFrame:
30
+ def stock_industry_pe_ratio_cninfo(
31
+ symbol: str = "证监会行业分类", date: str = "20210910"
32
+ ) -> pd.DataFrame:
30
33
  """
31
34
  巨潮资讯-数据中心-行业分析-行业市盈率
32
35
  http://webapi.cninfo.com.cn/#/thematicStatistics
@@ -37,14 +40,12 @@ def stock_industry_pe_ratio_cninfo(symbol: str = "证监会行业分类", date:
37
40
  :return: 行业市盈率
38
41
  :rtype: pandas.DataFrame
39
42
  """
40
- sort_code_map = {
41
- "证监会行业分类": "008001",
42
- "国证行业分类": "008200"
43
- }
43
+ sort_code_map = {"证监会行业分类": "008001", "国证行业分类": "008200"}
44
44
  url = "http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1087"
45
- params = {"tdate": "-".join([date[:4], date[4:6], date[6:]]),
46
- "sortcode": sort_code_map[symbol],
47
- }
45
+ params = {
46
+ "tdate": "-".join([date[:4], date[4:6], date[6:]]),
47
+ "sortcode": sort_code_map[symbol],
48
+ }
48
49
  js_code = py_mini_racer.MiniRacer()
49
50
  js_content = _get_file_content_ths("cninfo.js")
50
51
  js_code.eval(js_content)
@@ -61,7 +62,8 @@ def stock_industry_pe_ratio_cninfo(symbol: str = "证监会行业分类", date:
61
62
  "Pragma": "no-cache",
62
63
  "Proxy-Connection": "keep-alive",
63
64
  "Referer": "http://webapi.cninfo.com.cn/",
64
- "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",
65
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
66
+ "Chrome/93.0.4577.63 Safari/537.36",
65
67
  "X-Requested-With": "XMLHttpRequest",
66
68
  }
67
69
  r = requests.post(url, params=params, headers=headers)
@@ -81,31 +83,43 @@ def stock_industry_pe_ratio_cninfo(symbol: str = "证监会行业分类", date:
81
83
  "变动日期",
82
84
  "公司数量",
83
85
  ]
84
- temp_df = temp_df[[
85
- "变动日期",
86
- "行业分类",
87
- "行业层级",
88
- "行业编码",
89
- "行业名称",
90
- "公司数量",
91
- "纳入计算公司数量",
92
- "总市值-静态",
93
- "净利润-静态",
94
- "静态市盈率-加权平均",
95
- "静态市盈率-中位数",
96
- "静态市盈率-算术平均",
97
- ]]
86
+ temp_df = temp_df[
87
+ [
88
+ "变动日期",
89
+ "行业分类",
90
+ "行业层级",
91
+ "行业编码",
92
+ "行业名称",
93
+ "公司数量",
94
+ "纳入计算公司数量",
95
+ "总市值-静态",
96
+ "净利润-静态",
97
+ "静态市盈率-加权平均",
98
+ "静态市盈率-中位数",
99
+ "静态市盈率-算术平均",
100
+ ]
101
+ ]
98
102
  temp_df["行业层级"] = pd.to_numeric(temp_df["行业层级"], errors="coerce")
99
103
  temp_df["公司数量"] = pd.to_numeric(temp_df["公司数量"], errors="coerce")
100
- temp_df["纳入计算公司数量"] = pd.to_numeric(temp_df["纳入计算公司数量"], errors="coerce")
104
+ temp_df["纳入计算公司数量"] = pd.to_numeric(
105
+ temp_df["纳入计算公司数量"], errors="coerce"
106
+ )
101
107
  temp_df["总市值-静态"] = pd.to_numeric(temp_df["总市值-静态"], errors="coerce")
102
108
  temp_df["净利润-静态"] = pd.to_numeric(temp_df["净利润-静态"], errors="coerce")
103
- temp_df["静态市盈率-加权平均"] = pd.to_numeric(temp_df["静态市盈率-加权平均"], errors="coerce")
104
- temp_df["静态市盈率-中位数"] = pd.to_numeric(temp_df["静态市盈率-中位数"], errors="coerce")
105
- temp_df["静态市盈率-算术平均"] = pd.to_numeric(temp_df["静态市盈率-算术平均"], errors="coerce")
109
+ temp_df["静态市盈率-加权平均"] = pd.to_numeric(
110
+ temp_df["静态市盈率-加权平均"], errors="coerce"
111
+ )
112
+ temp_df["静态市盈率-中位数"] = pd.to_numeric(
113
+ temp_df["静态市盈率-中位数"], errors="coerce"
114
+ )
115
+ temp_df["静态市盈率-算术平均"] = pd.to_numeric(
116
+ temp_df["静态市盈率-算术平均"], errors="coerce"
117
+ )
106
118
  return temp_df
107
119
 
108
120
 
109
121
  if __name__ == "__main__":
110
- stock_industry_pe_ratio_cninfo_df = stock_industry_pe_ratio_cninfo(symbol="国证行业分类", date="20210910")
122
+ stock_industry_pe_ratio_cninfo_df = stock_industry_pe_ratio_cninfo(
123
+ symbol="国证行业分类", date="20240617"
124
+ )
111
125
  print(stock_industry_pe_ratio_cninfo_df)
@@ -1,16 +1,18 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/8/14 16:20
4
+ Date: 2024/7/22 17:30
5
5
  Desc: 申万宏源研究-行业分类
6
- https://www.swhyresearch.com/institute_sw/allIndex/downloadCenter/industryType
6
+ http://www.swhyresearch.com/institute_sw/allIndex/downloadCenter/industryType
7
7
  """
8
+
8
9
  import io
9
- from datetime import datetime
10
10
 
11
11
  import pandas as pd
12
12
  import requests
13
13
 
14
+ from akshare.utils.cons import headers
15
+
14
16
 
15
17
  def stock_industry_clf_hist_sw() -> pd.DataFrame:
16
18
  """
@@ -19,14 +21,11 @@ def stock_industry_clf_hist_sw() -> pd.DataFrame:
19
21
  :return: 个股行业分类变动历史
20
22
  :rtype: pandas.DataFrame
21
23
  """
22
- url = (
23
- "https://www.swsresearch.com/swindex/pdf/SwClass2021/StockClassifyUse_stock.xls"
24
- )
25
- headers = {
26
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36"
27
- }
24
+ url = "https://www.swsresearch.com/swindex/pdf/SwClass2021/StockClassifyUse_stock.xls" # 此处为 https
28
25
  r = requests.get(url, headers=headers)
29
- temp_df = pd.read_excel(io.BytesIO(r.content), dtype={"股票代码": "str", "行业代码": "str"})
26
+ temp_df = pd.read_excel(
27
+ io.BytesIO(r.content), dtype={"股票代码": "str", "行业代码": "str"}
28
+ )
30
29
  temp_df.rename(
31
30
  columns={
32
31
  "股票代码": "symbol",
@@ -1,9 +1,10 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/2/29 18:50
4
+ Date: 2024/5/27 15:30
5
5
  Desc: 股票基本信息
6
6
  """
7
+
7
8
  import json
8
9
  import warnings
9
10
  from functools import lru_cache
@@ -133,7 +134,8 @@ def stock_info_sh_name_code(symbol: str = "主板A股") -> pd.DataFrame:
133
134
  "Host": "query.sse.com.cn",
134
135
  "Pragma": "no-cache",
135
136
  "Referer": "https://www.sse.com.cn/assortment/stock/list/share/",
136
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36",
137
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
138
+ "Chrome/81.0.4044.138 Safari/537.36",
137
139
  }
138
140
  params = {
139
141
  "STOCK_TYPE": indicator_map[symbol],
@@ -194,11 +196,12 @@ def stock_info_bj_name_code() -> pd.DataFrame:
194
196
  "sorttype": "asc",
195
197
  }
196
198
  headers = {
197
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
199
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
200
+ "Chrome/110.0.0.0 Safari/537.36"
198
201
  }
199
202
  r = requests.post(url, data=payload, headers=headers)
200
203
  data_text = r.text
201
- data_json = json.loads(data_text[data_text.find("["): -1])
204
+ data_json = json.loads(data_text[data_text.find("[") : -1])
202
205
  total_page = data_json[0]["totalPages"]
203
206
  big_df = pd.DataFrame()
204
207
  tqdm = get_tqdm()
@@ -206,7 +209,7 @@ def stock_info_bj_name_code() -> pd.DataFrame:
206
209
  payload.update({"page": page})
207
210
  r = requests.post(url, data=payload, headers=headers)
208
211
  data_text = r.text
209
- data_json = json.loads(data_text[data_text.find("["): -1])
212
+ data_json = json.loads(data_text[data_text.find("[") : -1])
210
213
  temp_df = data_json[0]["content"]
211
214
  temp_df = pd.DataFrame(temp_df)
212
215
  big_df = pd.concat([big_df, temp_df], ignore_index=True)
@@ -280,7 +283,7 @@ def stock_info_bj_name_code() -> pd.DataFrame:
280
283
  def stock_info_sh_delist(symbol: str = "全部") -> pd.DataFrame:
281
284
  """
282
285
  上海证券交易所-终止上市公司
283
- http://www.sse.com.cn/assortment/stock/list/delisting/
286
+ https://www.sse.com.cn/assortment/stock/list/delisting/
284
287
  :param symbol: choice of {"全部", "沪市", "科创板"}
285
288
  :type symbol: str
286
289
  :return: 终止上市公司
@@ -300,8 +303,9 @@ def stock_info_sh_delist(symbol: str = "全部") -> pd.DataFrame:
300
303
  "Connection": "keep-alive",
301
304
  "Host": "query.sse.com.cn",
302
305
  "Pragma": "no-cache",
303
- "Referer": "http://www.sse.com.cn/",
304
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36",
306
+ "Referer": "https://www.sse.com.cn/",
307
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
308
+ "Chrome/97.0.4692.71 Safari/537.36",
305
309
  }
306
310
  params = {
307
311
  "sqlId": "COMMON_SSE_CP_GPJCTPZ_GPLB_GP_L",
@@ -340,7 +344,9 @@ def stock_info_sh_delist(symbol: str = "全部") -> pd.DataFrame:
340
344
  ]
341
345
  ]
342
346
  temp_df["上市日期"] = pd.to_datetime(temp_df["上市日期"], errors="coerce").dt.date
343
- temp_df["暂停上市日期"] = pd.to_datetime(temp_df["暂停上市日期"], errors="coerce").dt.date
347
+ temp_df["暂停上市日期"] = pd.to_datetime(
348
+ temp_df["暂停上市日期"], errors="coerce"
349
+ ).dt.date
344
350
  return temp_df
345
351
 
346
352
 
@@ -416,13 +422,15 @@ def stock_info_change_name(symbol: str = "000503") -> pd.DataFrame:
416
422
  temp_df.columns = ["item", "value"]
417
423
  temp_df["item"] = temp_df["item"].str.split(":", expand=True)[0]
418
424
  try:
419
- name_list = temp_df[temp_df["item"] == "证券简称更名历史"].value.tolist()[0].split(" ")
425
+ name_list = (
426
+ temp_df[temp_df["item"] == "证券简称更名历史"].value.tolist()[0].split(" ")
427
+ )
420
428
  big_df = pd.DataFrame(name_list)
421
429
  big_df.reset_index(inplace=True)
422
430
  big_df["index"] = big_df.index + 1
423
431
  big_df.columns = ["index", "name"]
424
432
  return big_df
425
- except IndexError as e:
433
+ except IndexError:
426
434
  return pd.DataFrame()
427
435
 
428
436
 
@@ -439,7 +447,9 @@ def stock_info_a_code_name() -> pd.DataFrame:
439
447
 
440
448
  stock_sz = stock_info_sz_name_code(symbol="A股列表")
441
449
  stock_sz["A股代码"] = stock_sz["A股代码"].astype(str).str.zfill(6)
442
- big_df = pd.concat([big_df, stock_sz[["A股代码", "A股简称"]]], ignore_index=True)
450
+ big_df = pd.concat(
451
+ objs=[big_df, stock_sz[["A股代码", "A股简称"]]], ignore_index=True
452
+ )
443
453
  big_df.columns = ["证券代码", "证券简称"]
444
454
 
445
455
  stock_kcb = stock_info_sh_name_code(symbol="科创板")
@@ -449,9 +459,9 @@ def stock_info_a_code_name() -> pd.DataFrame:
449
459
  stock_bse = stock_bse[["证券代码", "证券简称"]]
450
460
  stock_bse.columns = ["证券代码", "证券简称"]
451
461
 
452
- big_df = pd.concat([big_df, stock_sh], ignore_index=True)
453
- big_df = pd.concat([big_df, stock_kcb], ignore_index=True)
454
- big_df = pd.concat([big_df, stock_bse], ignore_index=True)
462
+ big_df = pd.concat(objs=[big_df, stock_sh], ignore_index=True)
463
+ big_df = pd.concat(objs=[big_df, stock_kcb], ignore_index=True)
464
+ big_df = pd.concat(objs=[big_df, stock_bse], ignore_index=True)
455
465
  big_df.columns = ["code", "name"]
456
466
  return big_df
457
467
 
@@ -5,13 +5,16 @@ Date: 2023/8/11 11:44
5
5
  Desc: 东方财富网-个股-股票信息
6
6
  https://quote.eastmoney.com/concept/sh603777.html?from=classic
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
 
11
12
  from akshare.stock_feature.stock_hist_em import code_id_map_em
12
13
 
13
14
 
14
- def stock_individual_info_em(symbol: str = "603777", timeout: float = None) -> pd.DataFrame:
15
+ def stock_individual_info_em(
16
+ symbol: str = "603777", timeout: float = None
17
+ ) -> pd.DataFrame:
15
18
  """
16
19
  东方财富-个股-股票信息
17
20
  https://quote.eastmoney.com/concept/sh603777.html?from=classic
@@ -64,5 +67,5 @@ def stock_individual_info_em(symbol: str = "603777", timeout: float = None) -> p
64
67
 
65
68
 
66
69
  if __name__ == "__main__":
67
- stock_individual_info_em_df = stock_individual_info_em(symbol="000001", timeout=None)
70
+ stock_individual_info_em_df = stock_individual_info_em(symbol="000002")
68
71
  print(stock_individual_info_em_df)
@@ -5,6 +5,7 @@ Date: 2023/10/14 22:00
5
5
  Desc: 东财财富-日内分时数据
6
6
  https://quote.eastmoney.com/f1.html?newcode=0.000001
7
7
  """
8
+
8
9
  import json
9
10
  from functools import lru_cache
10
11
 
@@ -130,11 +131,13 @@ def stock_intraday_em(symbol: str = "000001") -> pd.DataFrame:
130
131
  temp_df = pd.DataFrame(
131
132
  [item.split(",") for item in event_json["data"]["details"]]
132
133
  )
133
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
134
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
134
135
  break
135
136
 
136
137
  big_df.columns = ["时间", "成交价", "手数", "-", "买卖盘性质"]
137
- big_df['买卖盘性质'] = big_df['买卖盘性质'].map({'2': '买盘', '1': '卖盘', '4': '中性盘'})
138
+ big_df["买卖盘性质"] = big_df["买卖盘性质"].map(
139
+ {"2": "买盘", "1": "卖盘", "4": "中性盘"}
140
+ )
138
141
  big_df = big_df[["时间", "成交价", "手数", "买卖盘性质"]]
139
142
  big_df["成交价"] = pd.to_numeric(big_df["成交价"], errors="coerce")
140
143
  big_df["手数"] = pd.to_numeric(big_df["手数"], errors="coerce")
@@ -1,10 +1,11 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/12/11 17:00
4
+ Date: 2024/3/22 17:00
5
5
  Desc: 新浪财经-日内分时数据
6
6
  https://quote.eastmoney.com/f1.html?newcode=0.000001
7
7
  """
8
+
8
9
  import math
9
10
 
10
11
  import pandas as pd
@@ -13,7 +14,9 @@ import requests
13
14
  from akshare.utils.tqdm import get_tqdm
14
15
 
15
16
 
16
- def stock_intraday_sina(symbol: str = "sz000001", date: str = "20231108") -> pd.DataFrame:
17
+ def stock_intraday_sina(
18
+ symbol: str = "sz000001", date: str = "20240321"
19
+ ) -> pd.DataFrame:
17
20
  """
18
21
  新浪财经-日内分时数据
19
22
  https://vip.stock.finance.sina.com.cn/quotes_service/view/cn_bill.php?symbol=sz000001
@@ -26,19 +29,20 @@ def stock_intraday_sina(symbol: str = "sz000001", date: str = "20231108") -> pd.
26
29
  """
27
30
  url = "https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/CN_Bill.GetBillListCount"
28
31
  params = {
29
- 'symbol': f'{symbol}',
30
- 'num': '60',
31
- 'page': '1',
32
- 'sort': 'ticktime',
33
- 'asc': '0',
34
- 'volume': '0',
35
- 'amount': '0',
36
- 'type': '0',
37
- 'day': "-".join([date[:4], date[4:6], date[6:]]),
32
+ "symbol": f"{symbol}",
33
+ "num": "60",
34
+ "page": "1",
35
+ "sort": "ticktime",
36
+ "asc": "0",
37
+ "volume": "0",
38
+ "amount": "0",
39
+ "type": "0",
40
+ "day": "-".join([date[:4], date[4:6], date[6:]]),
38
41
  }
39
42
  headers = {
40
43
  "Referer": f"https://vip.stock.finance.sina.com.cn/quotes_service/view/cn_bill.php?symbol={symbol}",
41
- "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36",
44
+ "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
45
+ "Chrome/107.0.0.0 Safari/537.36",
42
46
  }
43
47
  r = requests.get(url=url, params=params, headers=headers)
44
48
  data_json = r.json()
@@ -47,18 +51,18 @@ def stock_intraday_sina(symbol: str = "sz000001", date: str = "20231108") -> pd.
47
51
  big_df = pd.DataFrame()
48
52
  tqdm = get_tqdm()
49
53
  for page in tqdm(range(1, total_page + 1), leave=False):
50
- params.update({'page': page})
54
+ params.update({"page": page})
51
55
  r = requests.get(url=url, params=params, headers=headers)
52
56
  data_json = r.json()
53
57
  temp_df = pd.DataFrame(data_json)
54
58
  big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
55
- big_df.sort_values(by=['ticktime'], inplace=True, ignore_index=True)
56
- big_df['price'] = pd.to_numeric(big_df['price'], errors="coerce")
57
- big_df['volume'] = pd.to_numeric(big_df['volume'], errors="coerce")
58
- big_df['prev_price'] = pd.to_numeric(big_df['prev_price'], errors="coerce")
59
+ big_df.sort_values(by=["ticktime"], inplace=True, ignore_index=True)
60
+ big_df["price"] = pd.to_numeric(big_df["price"], errors="coerce")
61
+ big_df["volume"] = pd.to_numeric(big_df["volume"], errors="coerce")
62
+ big_df["prev_price"] = pd.to_numeric(big_df["prev_price"], errors="coerce")
59
63
  return big_df
60
64
 
61
65
 
62
66
  if __name__ == "__main__":
63
- stock_intraday_sina_df = stock_intraday_sina(symbol="sz000001", date="20231212")
67
+ stock_intraday_sina_df = stock_intraday_sina(symbol="sz000001", date="20240321")
64
68
  print(stock_intraday_sina_df)
@@ -1,13 +1,14 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/2/18 12:20
4
+ Date: 2024/4/25 15:00
5
5
  Desc: 巨潮资讯-个股-上市相关
6
6
  https://webapi.cninfo.com.cn/#/company
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.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="utf8") as f:
25
26
  file_data = f.read()
26
27
  return file_data
27
28
 
@@ -77,19 +78,33 @@ def stock_ipo_summary_cninfo(symbol: str = "600030") -> pd.DataFrame:
77
78
  "上网发行中签率",
78
79
  "主承销商",
79
80
  ]
80
- temp_df["招股公告日期"] = pd.to_datetime(temp_df["招股公告日期"], errors="coerce").dt.date
81
- temp_df["中签率公告日"] = pd.to_datetime(temp_df["中签率公告日"], errors="coerce").dt.date
82
- temp_df["上网发行日期"] = pd.to_datetime(temp_df["上网发行日期"], errors="coerce").dt.date
81
+ temp_df["招股公告日期"] = pd.to_datetime(
82
+ temp_df["招股公告日期"], errors="coerce"
83
+ ).dt.date
84
+ temp_df["中签率公告日"] = pd.to_datetime(
85
+ temp_df["中签率公告日"], errors="coerce"
86
+ ).dt.date
87
+ temp_df["上网发行日期"] = pd.to_datetime(
88
+ temp_df["上网发行日期"], errors="coerce"
89
+ ).dt.date
83
90
  temp_df["上市日期"] = pd.to_datetime(temp_df["上市日期"], errors="coerce").dt.date
84
91
  temp_df["每股面值"] = pd.to_numeric(temp_df["每股面值"], errors="coerce")
85
92
  temp_df["总发行数量"] = pd.to_numeric(temp_df["总发行数量"], errors="coerce")
86
- temp_df["发行前每股净资产"] = pd.to_numeric(temp_df["发行前每股净资产"], errors="coerce")
87
- temp_df["摊薄发行市盈率"] = pd.to_numeric(temp_df["摊薄发行市盈率"], errors="coerce")
93
+ temp_df["发行前每股净资产"] = pd.to_numeric(
94
+ temp_df["发行前每股净资产"], errors="coerce"
95
+ )
96
+ temp_df["摊薄发行市盈率"] = pd.to_numeric(
97
+ temp_df["摊薄发行市盈率"], errors="coerce"
98
+ )
88
99
  temp_df["募集资金净额"] = pd.to_numeric(temp_df["募集资金净额"], errors="coerce")
89
100
  temp_df["发行价格"] = pd.to_numeric(temp_df["发行价格"], errors="coerce")
90
101
  temp_df["发行费用总额"] = pd.to_numeric(temp_df["发行费用总额"], errors="coerce")
91
- temp_df["发行后每股净资产"] = pd.to_numeric(temp_df["发行后每股净资产"], errors="coerce")
92
- temp_df["上网发行中签率"] = pd.to_numeric(temp_df["上网发行中签率"], errors="coerce")
102
+ temp_df["发行后每股净资产"] = pd.to_numeric(
103
+ temp_df["发行后每股净资产"], errors="coerce"
104
+ )
105
+ temp_df["上网发行中签率"] = pd.to_numeric(
106
+ temp_df["上网发行中签率"], errors="coerce"
107
+ )
93
108
  return temp_df
94
109
 
95
110
 
@@ -1,13 +1,14 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/6/12 17:29
4
+ Date: 2024/7/25 14:30
5
5
  Desc: 巨潮资讯-数据中心-新股数据
6
- http://webapi.cninfo.com.cn/#/xinguList
6
+ https://webapi.cninfo.com.cn/#/xinguList
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_cninfo(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,11 +30,11 @@ def _get_file_content_cninfo(file: str = "cninfo.js") -> str:
29
30
  def stock_new_gh_cninfo() -> pd.DataFrame:
30
31
  """
31
32
  巨潮资讯-数据中心-新股数据-新股过会
32
- http://webapi.cninfo.com.cn/#/xinguList
33
+ https://webapi.cninfo.com.cn/#/xinguList
33
34
  :return: 新股过会
34
35
  :rtype: pandas.DataFrame
35
36
  """
36
- url = "http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1098"
37
+ url = "https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1098"
37
38
  js_code = py_mini_racer.MiniRacer()
38
39
  js_content = _get_file_content_cninfo("cninfo.js")
39
40
  js_code.eval(js_content)
@@ -46,11 +47,12 @@ def stock_new_gh_cninfo() -> pd.DataFrame:
46
47
  "Cache-Control": "no-cache",
47
48
  "Content-Length": "0",
48
49
  "Host": "webapi.cninfo.com.cn",
49
- "Origin": "http://webapi.cninfo.com.cn",
50
+ "Origin": "https://webapi.cninfo.com.cn",
50
51
  "Pragma": "no-cache",
51
52
  "Proxy-Connection": "keep-alive",
52
- "Referer": "http://webapi.cninfo.com.cn/",
53
- "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",
53
+ "Referer": "https://webapi.cninfo.com.cn/",
54
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
55
+ "Chrome/93.0.4577.63 Safari/537.36",
54
56
  "X-Requested-With": "XMLHttpRequest",
55
57
  }
56
58
  r = requests.post(url, headers=headers)
@@ -65,18 +67,20 @@ def stock_new_gh_cninfo() -> pd.DataFrame:
65
67
  "审核公告日",
66
68
  ]
67
69
  temp_df["上会日期"] = pd.to_datetime(temp_df["上会日期"], errors="coerce").dt.date
68
- temp_df["审核公告日"] = pd.to_datetime(temp_df["审核公告日"], errors="coerce").dt.date
70
+ temp_df["审核公告日"] = pd.to_datetime(
71
+ temp_df["审核公告日"], errors="coerce"
72
+ ).dt.date
69
73
  return temp_df
70
74
 
71
75
 
72
76
  def stock_new_ipo_cninfo() -> pd.DataFrame:
73
77
  """
74
78
  巨潮资讯-数据中心-新股数据-新股发行
75
- http://webapi.cninfo.com.cn/#/xinguList
79
+ https://webapi.cninfo.com.cn/#/xinguList
76
80
  :return: 新股发行
77
81
  :rtype: pandas.DataFrame
78
82
  """
79
- url = "http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1097"
83
+ url = "https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1097"
80
84
  js_code = py_mini_racer.MiniRacer()
81
85
  js_content = _get_file_content_cninfo("cninfo.js")
82
86
  js_code.eval(js_content)
@@ -89,11 +93,12 @@ def stock_new_ipo_cninfo() -> pd.DataFrame:
89
93
  "Cache-Control": "no-cache",
90
94
  "Content-Length": "0",
91
95
  "Host": "webapi.cninfo.com.cn",
92
- "Origin": "http://webapi.cninfo.com.cn",
96
+ "Origin": "https://webapi.cninfo.com.cn",
93
97
  "Pragma": "no-cache",
94
98
  "Proxy-Connection": "keep-alive",
95
- "Referer": "http://webapi.cninfo.com.cn/",
96
- "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",
99
+ "Referer": "https://webapi.cninfo.com.cn/",
100
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
101
+ "Chrome/93.0.4577.63 Safari/537.36",
97
102
  "X-Requested-With": "XMLHttpRequest",
98
103
  }
99
104
  params = {
@@ -135,13 +140,21 @@ def stock_new_ipo_cninfo() -> pd.DataFrame:
135
140
  "上网发行数量",
136
141
  ]
137
142
  ]
138
- temp_df["摇号结果公告日"] = pd.to_datetime(temp_df["摇号结果公告日"], errors="coerce").dt.date
139
- temp_df["中签公告日"] = pd.to_datetime(temp_df["中签公告日"], errors="coerce").dt.date
143
+ temp_df["摇号结果公告日"] = pd.to_datetime(
144
+ temp_df["摇号结果公告日"], errors="coerce"
145
+ ).dt.date
146
+ temp_df["中签公告日"] = pd.to_datetime(
147
+ temp_df["中签公告日"], errors="coerce"
148
+ ).dt.date
140
149
  temp_df["上市日期"] = pd.to_datetime(temp_df["上市日期"], errors="coerce").dt.date
141
- temp_df["中签缴款日"] = pd.to_datetime(temp_df["中签缴款日"], errors="coerce").dt.date
150
+ temp_df["中签缴款日"] = pd.to_datetime(
151
+ temp_df["中签缴款日"], errors="coerce"
152
+ ).dt.date
142
153
  temp_df["申购日期"] = pd.to_datetime(temp_df["申购日期"], errors="coerce").dt.date
143
154
  temp_df["发行价"] = pd.to_numeric(temp_df["发行价"], errors="coerce")
144
- temp_df["上网发行中签率"] = pd.to_numeric(temp_df["上网发行中签率"], errors="coerce")
155
+ temp_df["上网发行中签率"] = pd.to_numeric(
156
+ temp_df["上网发行中签率"], errors="coerce"
157
+ )
145
158
  temp_df["总发行数量"] = pd.to_numeric(temp_df["总发行数量"], errors="coerce")
146
159
  temp_df["发行市盈率"] = pd.to_numeric(temp_df["发行市盈率"], errors="coerce")
147
160
  temp_df["上网发行数量"] = pd.to_numeric(temp_df["上网发行数量"], errors="coerce")
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ Date: 2024/11/18 16:00
5
+ Desc: 财新网-财新数据通
6
+ https://cxdata.caixin.com/pc/
7
+ """
8
+
9
+ import pandas as pd
10
+
11
+ from akshare.request import make_request_with_retry_json
12
+
13
+
14
+ def stock_news_main_cx() -> pd.DataFrame:
15
+ """
16
+ 财新网-财新数据通
17
+ https://cxdata.caixin.com/pc/
18
+ :return: 特定时间表示的字典
19
+ :rtype: pandas.DataFrame
20
+ """
21
+ url = "https://cxdata.caixin.com/api/dataplus/sjtPc/jxNews"
22
+ params = {
23
+ "pageNum": "1",
24
+ "pageSize": "20000",
25
+ "showLabels": "true",
26
+ }
27
+ data_json = make_request_with_retry_json(url, params=params)
28
+ temp_df = pd.DataFrame(data_json["data"]["data"])
29
+ temp_df = temp_df[["tag", "summary", "intervalTime", "pubTime", "url"]]
30
+ temp_df.columns = ["tag", "summary", "interval_time", "pub_time", "url"]
31
+ temp_df["pub_time"] = pd.to_datetime(
32
+ temp_df["pub_time"], errors="coerce", unit="ms"
33
+ ).astype(str)
34
+ return temp_df
35
+
36
+
37
+ if __name__ == "__main__":
38
+ stock_news_main_cx_df = stock_news_main_cx()
39
+ print(stock_news_main_cx_df)