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,15 +1,16 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/4/6 16:24
4
+ Date: 2024/10/19 21:30
5
5
  Desc: 乐咕乐股-A 股市盈率和市净率
6
6
  https://legulegu.com/stockdata/shanghaiPE
7
7
  """
8
+
8
9
  from datetime import datetime
9
10
 
10
11
  import pandas as pd
12
+ import py_mini_racer
11
13
  import requests
12
- from py_mini_racer import py_mini_racer
13
14
 
14
15
  from akshare.stock_feature.stock_a_indicator import get_cookie_csrf
15
16
 
@@ -367,7 +368,11 @@ def stock_market_pe_lg(symbol: str = "深证") -> pd.DataFrame:
367
368
  else:
368
369
  url = "https://legulegu.com/api/stockdata/get-ke-chuang-ban-pe"
369
370
  params = {"token": token}
370
- r = requests.get(url, params=params, **get_cookie_csrf(url="https://legulegu.com/stockdata/ke-chuang-ban-pe"))
371
+ r = requests.get(
372
+ url,
373
+ params=params,
374
+ **get_cookie_csrf(url="https://legulegu.com/stockdata/ke-chuang-ban-pe"),
375
+ )
371
376
  data_json = r.json()
372
377
  temp_df = pd.DataFrame(data_json["data"])
373
378
  temp_df["date"] = (
@@ -415,7 +420,11 @@ def stock_index_pe_lg(symbol: str = "沪深300") -> pd.DataFrame:
415
420
  }
416
421
  url = "https://legulegu.com/api/stockdata/index-basic-pe"
417
422
  params = {"token": token, "indexCode": symbol_map[symbol]}
418
- r = requests.get(url, params=params, **get_cookie_csrf(url="https://legulegu.com/stockdata/sz50-ttm-lyr"))
423
+ r = requests.get(
424
+ url,
425
+ params=params,
426
+ **get_cookie_csrf(url="https://legulegu.com/stockdata/sz50-ttm-lyr"),
427
+ )
419
428
  data_json = r.json()
420
429
  temp_df = pd.DataFrame(data_json["data"])
421
430
  temp_df["date"] = (
@@ -518,7 +527,11 @@ def stock_index_pb_lg(symbol: str = "上证50") -> pd.DataFrame:
518
527
  }
519
528
  url = "https://legulegu.com/api/stockdata/index-basic-pb"
520
529
  params = {"token": token, "indexCode": symbol_map[symbol]}
521
- r = requests.get(url, params=params, **get_cookie_csrf(url="https://legulegu.com/stockdata/zz500-ttm-lyr"))
530
+ r = requests.get(
531
+ url,
532
+ params=params,
533
+ **get_cookie_csrf(url="https://legulegu.com/stockdata/zz500-ttm-lyr"),
534
+ )
522
535
  data_json = r.json()
523
536
  temp_df = pd.DataFrame(data_json["data"])
524
537
  temp_df["date"] = (
@@ -546,10 +559,19 @@ def stock_index_pb_lg(symbol: str = "上证50") -> pd.DataFrame:
546
559
 
547
560
 
548
561
  if __name__ == "__main__":
562
+ stock_market_pe_lg_df = stock_market_pe_lg(symbol="上证")
563
+ print(stock_market_pe_lg_df)
564
+
565
+ stock_market_pe_lg_df = stock_market_pe_lg(symbol="科创版")
566
+ print(stock_market_pe_lg_df)
567
+
549
568
  for item in {"上证", "深证", "创业板", "科创版"}:
550
569
  stock_market_pe_lg_df = stock_market_pe_lg(symbol=item)
551
570
  print(stock_market_pe_lg_df)
552
571
 
572
+ stock_index_pe_lg_df = stock_index_pe_lg(symbol="上证50")
573
+ print(stock_index_pe_lg_df)
574
+
553
575
  for item in [
554
576
  "上证50",
555
577
  "沪深300",
@@ -585,6 +607,5 @@ if __name__ == "__main__":
585
607
  "中证100",
586
608
  "中证800",
587
609
  ]:
588
- print(item)
589
610
  stock_index_pe_lg_df = stock_index_pb_lg(symbol=item)
590
611
  print(stock_index_pe_lg_df)
@@ -1,11 +1,12 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2021/12/29 11:02
4
+ Date: 2024/4/21 17:00
5
5
  Desc: 东方财富网-数据中心-特色数据-股票账户统计
6
6
  东方财富网-数据中心-特色数据-股票账户统计: 股票账户统计详细数据
7
- http://data.eastmoney.com/cjsj/gpkhsj.html
7
+ https://data.eastmoney.com/cjsj/gpkhsj.html
8
8
  """
9
+
9
10
  import pandas as pd
10
11
  import requests
11
12
 
@@ -13,28 +14,28 @@ import requests
13
14
  def stock_account_statistics_em() -> pd.DataFrame:
14
15
  """
15
16
  东方财富网-数据中心-特色数据-股票账户统计
16
- http://data.eastmoney.com/cjsj/gpkhsj.html
17
+ https://data.eastmoney.com/cjsj/gpkhsj.html
17
18
  :return: 股票账户统计数据
18
19
  :rtype: pandas.DataFrame
19
20
  """
20
21
  url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
21
22
  params = {
22
- 'reportName': 'RPT_STOCK_OPEN_DATA',
23
- 'columns': 'ALL',
24
- 'pageSize': '500',
25
- 'sortColumns': 'STATISTICS_DATE',
26
- 'sortTypes': '-1',
27
- 'source': 'WEB',
28
- 'client': 'WEB',
29
- 'p': '1',
30
- 'pageNo': '1',
31
- 'pageNum': '1',
32
- 'pageNumber': '1',
33
- '_': '1640749656405',
23
+ "reportName": "RPT_STOCK_OPEN_DATA",
24
+ "columns": "ALL",
25
+ "pageSize": "500",
26
+ "sortColumns": "STATISTICS_DATE",
27
+ "sortTypes": "-1",
28
+ "source": "WEB",
29
+ "client": "WEB",
30
+ "p": "1",
31
+ "pageNo": "1",
32
+ "pageNum": "1",
33
+ "pageNumber": "1",
34
+ "_": "1640749656405",
34
35
  }
35
36
  r = requests.get(url, params=params)
36
37
  data_json = r.json()
37
- temp_df = pd.DataFrame(data_json['result']['data'])
38
+ temp_df = pd.DataFrame(data_json["result"]["data"])
38
39
  temp_df.columns = [
39
40
  "数据日期",
40
41
  "新增投资者-数量",
@@ -47,31 +48,48 @@ def stock_account_statistics_em() -> pd.DataFrame:
47
48
  "上证指数-涨跌幅",
48
49
  "沪深总市值",
49
50
  "沪深户均市值",
50
- "-"
51
+ "-",
51
52
  ]
52
- temp_df = temp_df[[
53
- "数据日期",
54
- "新增投资者-数量",
55
- "新增投资者-环比",
56
- "新增投资者-同比",
57
- "期末投资者-总量",
58
- "期末投资者-A股账户",
59
- "期末投资者-B股账户",
60
- "沪深总市值",
61
- "沪深户均市值",
62
- "上证指数-收盘",
63
- "上证指数-涨跌幅",
64
- ]]
65
- temp_df['新增投资者-数量'] = pd.to_numeric(temp_df['新增投资者-数量'])
66
- temp_df['新增投资者-环比'] = pd.to_numeric(temp_df['新增投资者-环比'])
67
- temp_df['新增投资者-同比'] = pd.to_numeric(temp_df['新增投资者-同比'])
68
- temp_df['期末投资者-总量'] = pd.to_numeric(temp_df['期末投资者-总量'])
69
- temp_df['期末投资者-A股账户'] = pd.to_numeric(temp_df['期末投资者-A股账户'])
70
- temp_df['期末投资者-B股账户'] = pd.to_numeric(temp_df['期末投资者-B股账户'])
71
- temp_df['沪深总市值'] = pd.to_numeric(temp_df['沪深总市值'])
72
- temp_df['沪深户均市值'] = pd.to_numeric(temp_df['沪深户均市值'])
73
- temp_df['上证指数-收盘'] = pd.to_numeric(temp_df['上证指数-收盘'])
74
- temp_df['上证指数-涨跌幅'] = pd.to_numeric(temp_df['上证指数-涨跌幅'])
53
+ temp_df = temp_df[
54
+ [
55
+ "数据日期",
56
+ "新增投资者-数量",
57
+ "新增投资者-环比",
58
+ "新增投资者-同比",
59
+ "期末投资者-总量",
60
+ "期末投资者-A股账户",
61
+ "期末投资者-B股账户",
62
+ "沪深总市值",
63
+ "沪深户均市值",
64
+ "上证指数-收盘",
65
+ "上证指数-涨跌幅",
66
+ ]
67
+ ]
68
+ temp_df["新增投资者-数量"] = pd.to_numeric(
69
+ temp_df["新增投资者-数量"], errors="coerce"
70
+ )
71
+ temp_df["新增投资者-环比"] = pd.to_numeric(
72
+ temp_df["新增投资者-环比"], errors="coerce"
73
+ )
74
+ temp_df["新增投资者-同比"] = pd.to_numeric(
75
+ temp_df["新增投资者-同比"], errors="coerce"
76
+ )
77
+ temp_df["期末投资者-总量"] = pd.to_numeric(
78
+ temp_df["期末投资者-总量"], errors="coerce"
79
+ )
80
+ temp_df["期末投资者-A股账户"] = pd.to_numeric(
81
+ temp_df["期末投资者-A股账户"], errors="coerce"
82
+ )
83
+ temp_df["期末投资者-B股账户"] = pd.to_numeric(
84
+ temp_df["期末投资者-B股账户"], errors="coerce"
85
+ )
86
+ temp_df["沪深总市值"] = pd.to_numeric(temp_df["沪深总市值"], errors="coerce")
87
+ temp_df["沪深户均市值"] = pd.to_numeric(temp_df["沪深户均市值"], errors="coerce")
88
+ temp_df["上证指数-收盘"] = pd.to_numeric(temp_df["上证指数-收盘"], errors="coerce")
89
+ temp_df["上证指数-涨跌幅"] = pd.to_numeric(
90
+ temp_df["上证指数-涨跌幅"], errors="coerce"
91
+ )
92
+ temp_df.sort_values(["数据日期"], ignore_index=True, inplace=True)
75
93
  return temp_df
76
94
 
77
95
 
@@ -5,12 +5,14 @@ Date: 2023/8/20 20:00
5
5
  Desc: 东方财富网-数据中心-研究报告-东方财富分析师指数
6
6
  https://data.eastmoney.com/invest/invest/list.html
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
- from tqdm import tqdm
11
+ from akshare.utils.tqdm import get_tqdm
12
+ from akshare.utils.cons import headers
11
13
 
12
14
 
13
- def stock_analyst_rank_em(year: str = "2023") -> pd.DataFrame:
15
+ def stock_analyst_rank_em(year: str = "2024") -> pd.DataFrame:
14
16
  """
15
17
  东方财富网-数据中心-研究报告-东方财富分析师指数-东方财富分析师指数
16
18
  https://data.eastmoney.com/invest/invest/list.html
@@ -20,9 +22,6 @@ def stock_analyst_rank_em(year: str = "2023") -> pd.DataFrame:
20
22
  :rtype: pandas.DataFrame
21
23
  """
22
24
  url = "https://data.eastmoney.com/dataapi/invest/list"
23
- headers = {
24
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
25
- }
26
25
  params = {
27
26
  "sortColumns": "YEAR_YIELD",
28
27
  "sortTypes": "-1",
@@ -40,12 +39,13 @@ def stock_analyst_rank_em(year: str = "2023") -> pd.DataFrame:
40
39
  data_json = r.json()
41
40
  total_page = data_json["result"]["pages"]
42
41
  big_df = pd.DataFrame()
42
+ tqdm = get_tqdm()
43
43
  for page in tqdm(range(1, total_page + 1), leave=False):
44
44
  params.update({"pageNumber": page})
45
45
  r = requests.get(url, params=params, headers=headers)
46
46
  data_json = r.json()
47
47
  data_df = pd.DataFrame(data_json["result"]["data"])
48
- big_df = pd.concat([big_df, data_df], ignore_index=True)
48
+ big_df = pd.concat(objs=[big_df, data_df], ignore_index=True)
49
49
 
50
50
  big_df.reset_index(inplace=True)
51
51
  big_df["index"] = list(range(1, len(big_df) + 1))
@@ -92,7 +92,9 @@ def stock_analyst_rank_em(year: str = "2023") -> pd.DataFrame:
92
92
  ]
93
93
  big_df["更新日期"] = pd.to_datetime(big_df["更新日期"], errors="coerce").dt.date
94
94
  big_df["年度指数"] = pd.to_numeric(big_df["年度指数"], errors="coerce")
95
- big_df[f"{year}年收益率"] = pd.to_numeric(big_df[f"{year}年收益率"], errors="coerce")
95
+ big_df[f"{year}年收益率"] = pd.to_numeric(
96
+ big_df[f"{year}年收益率"], errors="coerce"
97
+ )
96
98
  big_df["3个月收益率"] = pd.to_numeric(big_df["3个月收益率"], errors="coerce")
97
99
  big_df["6个月收益率"] = pd.to_numeric(big_df["6个月收益率"], errors="coerce")
98
100
  big_df["12个月收益率"] = pd.to_numeric(big_df["12个月收益率"], errors="coerce")
@@ -114,9 +116,6 @@ def stock_analyst_detail_em(
114
116
  :rtype: pandas.DataFrame
115
117
  """
116
118
  url = "https://datacenter.eastmoney.com/special/api/data/v1/get"
117
- headers = {
118
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
119
- }
120
119
  if indicator == "最新跟踪成分股":
121
120
  params = {
122
121
  "reportName": "RPT_RESEARCHER_NTCSTOCK",
@@ -132,7 +131,7 @@ def stock_analyst_detail_em(
132
131
  }
133
132
  r = requests.get(url, params=params, headers=headers)
134
133
  data_json = r.json()
135
- temp_df = pd.DataFrame(data_json["result"]['data'])
134
+ temp_df = pd.DataFrame(data_json["result"]["data"])
136
135
  temp_df.reset_index(inplace=True)
137
136
  temp_df["index"] = list(range(1, len(temp_df) + 1))
138
137
  temp_df.columns = [
@@ -164,9 +163,15 @@ def stock_analyst_detail_em(
164
163
  "阶段涨跌幅",
165
164
  ]
166
165
  ]
167
- temp_df["调入日期"] = pd.to_datetime(temp_df["调入日期"], errors="coerce").dt.date
168
- temp_df["最新评级日期"] = pd.to_datetime(temp_df["最新评级日期"], errors="coerce").dt.date
169
- temp_df["成交价格(前复权)"] = pd.to_numeric(temp_df["成交价格(前复权)"], errors="coerce")
166
+ temp_df["调入日期"] = pd.to_datetime(
167
+ temp_df["调入日期"], errors="coerce"
168
+ ).dt.date
169
+ temp_df["最新评级日期"] = pd.to_datetime(
170
+ temp_df["最新评级日期"], errors="coerce"
171
+ ).dt.date
172
+ temp_df["成交价格(前复权)"] = pd.to_numeric(
173
+ temp_df["成交价格(前复权)"], errors="coerce"
174
+ )
170
175
  temp_df["最新价格"] = pd.to_numeric(temp_df["最新价格"], errors="coerce")
171
176
  temp_df["阶段涨跌幅"] = pd.to_numeric(temp_df["阶段涨跌幅"], errors="coerce")
172
177
  return temp_df
@@ -185,7 +190,7 @@ def stock_analyst_detail_em(
185
190
  }
186
191
  r = requests.get(url, params=params, headers=headers)
187
192
  data_json = r.json()
188
- temp_df = pd.DataFrame(data_json["result"]['data'])
193
+ temp_df = pd.DataFrame(data_json["result"]["data"])
189
194
  temp_df.reset_index(inplace=True)
190
195
  temp_df["index"] = list(range(1, len(temp_df) + 1))
191
196
  temp_df.columns = [
@@ -214,8 +219,12 @@ def stock_analyst_detail_em(
214
219
  "累计涨跌幅",
215
220
  ]
216
221
  ]
217
- temp_df["调入日期"] = pd.to_datetime(temp_df["调入日期"], errors="coerce").dt.date
218
- temp_df["调出日期"] = pd.to_datetime(temp_df["调出日期"], errors="coerce").dt.date
222
+ temp_df["调入日期"] = pd.to_datetime(
223
+ temp_df["调入日期"], errors="coerce"
224
+ ).dt.date
225
+ temp_df["调出日期"] = pd.to_datetime(
226
+ temp_df["调出日期"], errors="coerce"
227
+ ).dt.date
219
228
  temp_df["累计涨跌幅"] = pd.to_numeric(temp_df["累计涨跌幅"], errors="coerce")
220
229
  return temp_df
221
230
  elif indicator == "历史指数":
@@ -231,22 +240,22 @@ def stock_analyst_detail_em(
231
240
  }
232
241
  r = requests.get(url, params=params, headers=headers)
233
242
  data_json = r.json()
234
- temp_df = pd.DataFrame(
235
- data_json['result']['data']
236
- )
237
- temp_df = temp_df[[
238
- "TRADE_DATE",
239
- "INDEX_HVALUE",
240
- ]]
241
- temp_df.columns = ['date', 'value']
243
+ temp_df = pd.DataFrame(data_json["result"]["data"])
244
+ temp_df = temp_df[
245
+ [
246
+ "TRADE_DATE",
247
+ "INDEX_HVALUE",
248
+ ]
249
+ ]
250
+ temp_df.columns = ["date", "value"]
242
251
  temp_df["date"] = pd.to_datetime(temp_df["date"], errors="coerce").dt.date
243
252
  temp_df["value"] = pd.to_numeric(temp_df["value"], errors="coerce")
244
- temp_df.sort_values(['date'], inplace=True, ignore_index=True)
253
+ temp_df.sort_values(["date"], inplace=True, ignore_index=True)
245
254
  return temp_df
246
255
 
247
256
 
248
257
  if __name__ == "__main__":
249
- stock_analyst_rank_em_df = stock_analyst_rank_em(year="2023")
258
+ stock_analyst_rank_em_df = stock_analyst_rank_em(year="2024")
250
259
  print(stock_analyst_rank_em_df)
251
260
 
252
261
  stock_analyst_detail_em_df = stock_analyst_detail_em(