akshare 1.14.49__py3-none-any.whl → 1.17.99__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.
Files changed (343) hide show
  1. akshare/__init__.py +595 -129
  2. akshare/air/air_hebei.py +77 -54
  3. akshare/air/air_zhenqi.py +0 -4
  4. akshare/air/cons.py +1 -0
  5. akshare/air/crypto.js +1 -1
  6. akshare/air/outcrypto.js +1 -1
  7. akshare/article/cons.py +1 -0
  8. akshare/article/epu_index.py +4 -3
  9. akshare/article/ff_factor.py +19 -8
  10. akshare/article/fred_md.py +4 -1
  11. akshare/article/risk_rv.py +3 -8
  12. akshare/bank/bank_cbirc_2020.py +11 -11
  13. akshare/bank/cons.py +7 -6
  14. akshare/bond/bond_buy_back_em.py +228 -0
  15. akshare/bond/bond_cb_sina.py +1 -0
  16. akshare/bond/bond_cb_ths.py +17 -9
  17. akshare/bond/bond_cbond.py +19 -14
  18. akshare/bond/bond_china.py +38 -39
  19. akshare/bond/bond_china_money.py +1 -1
  20. akshare/bond/bond_convert.py +10 -9
  21. akshare/bond/bond_em.py +37 -17
  22. akshare/bond/bond_summary.py +38 -37
  23. akshare/bond/bond_zh_cov.py +31 -40
  24. akshare/bond/bond_zh_sina.py +4 -0
  25. akshare/bond/cons.py +14 -11
  26. akshare/cal/__init__.py +0 -0
  27. akshare/cal/rv.py +170 -0
  28. akshare/cost/cost_living.py +7 -5
  29. akshare/crypto/__init__.py +1 -1
  30. akshare/crypto/crypto_bitcoin_cme.py +9 -7
  31. akshare/crypto/crypto_hold.py +4 -2
  32. akshare/currency/currency.py +1 -0
  33. akshare/currency/currency_china_bank_sina.py +11 -6
  34. akshare/data/__init__.py +1 -1
  35. akshare/data/cninfo.js +1 -1
  36. akshare/datasets.py +10 -21
  37. akshare/economic/cons.py +10 -3
  38. akshare/economic/macro_australia.py +74 -69
  39. akshare/economic/macro_bank.py +95 -653
  40. akshare/economic/macro_canada.py +92 -81
  41. akshare/economic/macro_china.py +97 -105
  42. akshare/economic/macro_china_hk.py +0 -1
  43. akshare/economic/macro_euro.py +103 -56
  44. akshare/economic/macro_finance_ths.py +7 -5
  45. akshare/economic/macro_germany.py +1 -1
  46. akshare/economic/macro_japan.py +0 -1
  47. akshare/economic/macro_other.py +1 -6
  48. akshare/economic/macro_swiss.py +2 -3
  49. akshare/economic/macro_uk.py +1 -1
  50. akshare/economic/macro_usa.py +7 -9
  51. akshare/economic/marco_cnbs.py +11 -6
  52. akshare/energy/energy_carbon.py +0 -1
  53. akshare/energy/energy_oil_em.py +1 -2
  54. akshare/event/cons.py +1 -0
  55. akshare/exceptions.py +43 -0
  56. akshare/file_fold/calendar.json +245 -2
  57. akshare/forex/__init__.py +0 -0
  58. akshare/forex/cons.py +192 -0
  59. akshare/forex/forex_em.py +149 -0
  60. akshare/fortune/fortune_500.py +1 -37
  61. akshare/fortune/fortune_bloomberg.py +6 -3
  62. akshare/fortune/fortune_forbes_500.py +3 -6
  63. akshare/fortune/fortune_hurun.py +2 -1
  64. akshare/fortune/fortune_xincaifu_500.py +17 -14
  65. akshare/fund/fund_announcement_em.py +145 -0
  66. akshare/fund/fund_aum_em.py +49 -35
  67. akshare/fund/fund_em.py +251 -220
  68. akshare/fund/fund_etf_em.py +44 -35
  69. akshare/fund/fund_etf_sina.py +75 -27
  70. akshare/fund/fund_etf_ths.py +2 -0
  71. akshare/fund/fund_fee_em.py +172 -0
  72. akshare/fund/fund_fhsp_em.py +42 -32
  73. akshare/fund/fund_init_em.py +8 -5
  74. akshare/fund/fund_lof_em.py +12 -19
  75. akshare/fund/fund_manager.py +25 -11
  76. akshare/fund/fund_overview_em.py +42 -0
  77. akshare/fund/fund_portfolio_em.py +23 -21
  78. akshare/fund/fund_position_lg.py +19 -8
  79. akshare/fund/fund_rank_em.py +2 -5
  80. akshare/fund/fund_rating.py +33 -12
  81. akshare/fund/fund_scale_em.py +24 -13
  82. akshare/fund/fund_scale_sina.py +20 -10
  83. akshare/fund/fund_xq.py +3 -2
  84. akshare/futures/cons.py +135 -39
  85. akshare/futures/cot.py +55 -56
  86. akshare/futures/futures_basis.py +49 -11
  87. akshare/futures/futures_comex_em.py +1 -0
  88. akshare/futures/futures_comm_ctp.py +1 -1
  89. akshare/futures/futures_contract_detail.py +59 -9
  90. akshare/futures/futures_daily_bar.py +66 -59
  91. akshare/futures/futures_foreign.py +14 -8
  92. akshare/futures/futures_hf_em.py +215 -61
  93. akshare/futures/futures_hist_em.py +191 -0
  94. akshare/futures/futures_hq_sina.py +5 -3
  95. akshare/futures/futures_index_ccidx.py +24 -82
  96. akshare/futures/futures_inventory_99.py +70 -272
  97. akshare/futures/futures_inventory_em.py +14 -11
  98. akshare/futures/futures_news_shmet.py +2 -2
  99. akshare/futures/futures_roll_yield.py +11 -24
  100. akshare/futures/futures_rule.py +7 -3
  101. akshare/futures/futures_rule_em.py +38 -0
  102. akshare/futures/futures_settlement_price_sgx.py +21 -6
  103. akshare/futures/futures_stock_js.py +0 -1
  104. akshare/futures/futures_to_spot.py +5 -6
  105. akshare/futures/futures_warehouse_receipt.py +48 -47
  106. akshare/futures/futures_zh_sina.py +3 -3
  107. akshare/futures/receipt.py +298 -165
  108. akshare/futures/requests_fun.py +16 -3
  109. akshare/futures/symbol_var.py +32 -13
  110. akshare/futures_derivative/cons.py +100 -103
  111. akshare/futures_derivative/futures_contract_info_cffex.py +55 -39
  112. akshare/futures_derivative/futures_contract_info_czce.py +2 -0
  113. akshare/futures_derivative/futures_contract_info_dce.py +43 -17
  114. akshare/futures_derivative/futures_contract_info_gfex.py +43 -31
  115. akshare/futures_derivative/futures_contract_info_ine.py +43 -34
  116. akshare/futures_derivative/futures_contract_info_shfe.py +3 -4
  117. akshare/futures_derivative/futures_cot_sina.py +8 -6
  118. akshare/futures_derivative/futures_index_sina.py +25 -13
  119. akshare/fx/cons.py +12 -7
  120. akshare/fx/fx_c_swap_cm.py +62 -0
  121. akshare/fx/fx_quote.py +3 -2
  122. akshare/fx/fx_quote_baidu.py +2 -1
  123. akshare/hf/__init__.py +1 -1
  124. akshare/hf/hf_sp500.py +8 -7
  125. akshare/index/cons.py +132 -28
  126. akshare/index/index_cni.py +7 -7
  127. akshare/index/index_cons.py +2 -2
  128. akshare/index/index_csindex.py +68 -0
  129. akshare/index/index_cx.py +20 -20
  130. akshare/index/index_drewry.py +17 -16
  131. akshare/index/index_eri.py +1 -0
  132. akshare/index/index_global_em.py +167 -0
  133. akshare/index/index_global_sina.py +82 -0
  134. akshare/index/index_kq_fz.py +17 -14
  135. akshare/index/index_kq_ss.py +1 -0
  136. akshare/index/index_option_qvix.py +351 -16
  137. akshare/index/index_research_sw.py +21 -21
  138. akshare/index/index_spot.py +9 -5
  139. akshare/index/index_stock_hk.py +5 -9
  140. akshare/index/index_stock_zh.py +111 -24
  141. akshare/index/index_stock_zh_csindex.py +3 -367
  142. akshare/index/index_sugar.py +18 -4
  143. akshare/index/index_sw.py +10 -2
  144. akshare/index/index_yw.py +53 -75
  145. akshare/index/index_zh_em.py +15 -82
  146. akshare/interest_rate/interbank_rate_em.py +0 -1
  147. akshare/movie/jm.js +0 -1
  148. akshare/news/__init__.py +1 -1
  149. akshare/news/news_baidu.py +395 -222
  150. akshare/news/news_stock.py +49 -16
  151. akshare/option/cons.py +2 -2
  152. akshare/option/option_commodity.py +341 -220
  153. akshare/option/option_commodity_sina.py +22 -26
  154. akshare/option/option_contract_info_ctp.py +63 -0
  155. akshare/option/option_current_sse.py +61 -0
  156. akshare/option/option_current_szse.py +84 -0
  157. akshare/option/option_czce.py +37 -9
  158. akshare/option/option_daily_stats_sse_szse.py +0 -1
  159. akshare/option/option_em.py +4 -8
  160. akshare/option/option_finance.py +60 -12
  161. akshare/option/option_finance_sina.py +7 -7
  162. akshare/option/option_lhb_em.py +0 -1
  163. akshare/option/option_margin.py +62 -0
  164. akshare/option/option_premium_analysis_em.py +58 -53
  165. akshare/option/option_risk_analysis_em.py +11 -8
  166. akshare/option/option_risk_indicator_sse.py +3 -4
  167. akshare/option/option_value_analysis_em.py +62 -55
  168. akshare/other/__init__.py +1 -1
  169. akshare/pro/__init__.py +0 -1
  170. akshare/pro/client.py +6 -4
  171. akshare/pro/cons.py +3 -2
  172. akshare/pro/data_pro.py +6 -5
  173. akshare/qdii/__init__.py +0 -0
  174. akshare/qdii/qdii_jsl.py +233 -0
  175. akshare/qhkc/__init__.py +1 -6
  176. akshare/qhkc/qhkc_api.py +64 -22
  177. akshare/qhkc_web/__init__.py +1 -6
  178. akshare/qhkc_web/qhkc_fund.py +10 -6
  179. akshare/qhkc_web/qhkc_index.py +28 -14
  180. akshare/qhkc_web/qhkc_tool.py +62 -59
  181. akshare/rate/__init__.py +1 -1
  182. akshare/rate/repo_rate.py +36 -32
  183. akshare/reits/__init__.py +1 -1
  184. akshare/reits/reits_basic.py +149 -13
  185. akshare/request.py +117 -0
  186. akshare/spot/__init__.py +1 -1
  187. akshare/spot/spot_hog_soozhu.py +165 -3
  188. akshare/spot/spot_sge.py +70 -9
  189. akshare/stock/cons.py +60 -23
  190. akshare/stock/stock_allotment_cninfo.py +8 -8
  191. akshare/stock/stock_ask_bid_em.py +3 -78
  192. akshare/stock/stock_board_concept_em.py +160 -35
  193. akshare/stock/stock_board_industry_em.py +163 -70
  194. akshare/stock/stock_dividend_cninfo.py +31 -17
  195. akshare/stock/stock_dzjy_em.py +347 -260
  196. akshare/stock/stock_fund_em.py +72 -64
  197. akshare/stock/stock_fund_hold.py +1 -2
  198. akshare/stock/stock_gsrl_em.py +1 -0
  199. akshare/stock/stock_hk_comparison_em.py +175 -0
  200. akshare/stock/stock_hk_famous.py +4 -5
  201. akshare/stock/stock_hk_fhpx_ths.py +2 -1
  202. akshare/stock/stock_hk_hot_rank_em.py +1 -0
  203. akshare/stock/stock_hk_sina.py +84 -36
  204. akshare/stock/stock_hold_control_cninfo.py +82 -0
  205. akshare/stock/stock_hold_control_em.py +0 -2
  206. akshare/stock/stock_hot_rank_em.py +4 -1
  207. akshare/stock/stock_hot_search_baidu.py +32 -19
  208. akshare/stock/stock_hot_up_em.py +4 -1
  209. akshare/stock/stock_hsgt_em.py +155 -0
  210. akshare/stock/stock_industry.py +1 -0
  211. akshare/stock/stock_industry_cninfo.py +1 -2
  212. akshare/stock/stock_info.py +6 -4
  213. akshare/stock/stock_info_em.py +17 -11
  214. akshare/stock/stock_intraday_em.py +4 -78
  215. akshare/stock/stock_intraday_sina.py +2 -2
  216. akshare/stock/stock_news_cx.py +39 -0
  217. akshare/stock/stock_profile_cninfo.py +7 -7
  218. akshare/stock/stock_profile_em.py +302 -0
  219. akshare/stock/stock_rank_forecast.py +6 -5
  220. akshare/stock/stock_repurchase_em.py +7 -2
  221. akshare/stock/stock_share_changes_cninfo.py +7 -5
  222. akshare/stock/stock_share_hold.py +24 -20
  223. akshare/stock/stock_stop.py +6 -6
  224. akshare/stock/stock_summary.py +153 -417
  225. akshare/stock/stock_us_famous.py +5 -6
  226. akshare/stock/stock_us_js.py +3 -2
  227. akshare/stock/stock_us_pink.py +38 -27
  228. akshare/stock/stock_us_sina.py +7 -3
  229. akshare/stock/stock_weibo_nlp.py +18 -20
  230. akshare/stock/stock_xq.py +24 -22
  231. akshare/stock/stock_zh_a_sina.py +8 -5
  232. akshare/stock/stock_zh_a_special.py +240 -243
  233. akshare/stock/stock_zh_a_tick_tx.py +11 -3
  234. akshare/stock/stock_zh_ah_tx.py +23 -26
  235. akshare/stock/stock_zh_b_sina.py +2 -2
  236. akshare/stock/stock_zh_comparison_em.py +250 -0
  237. akshare/stock/stock_zh_kcb_sina.py +67 -64
  238. akshare/stock_a/__init__.py +0 -0
  239. akshare/stock_a/stock_board_concept_name_em.py +170 -0
  240. akshare/stock_a/stock_individual_fund_flow_rank.py +258 -0
  241. akshare/stock_a/stock_zh_a_spot.py +212 -0
  242. akshare/stock_feature/cons.py +1 -0
  243. akshare/stock_feature/stock_a_indicator.py +9 -54
  244. akshare/stock_feature/stock_a_pe_and_pb.py +23 -5
  245. akshare/stock_feature/stock_account_em.py +0 -1
  246. akshare/stock_feature/stock_all_pb.py +2 -1
  247. akshare/stock_feature/stock_analyst_em.py +36 -30
  248. akshare/stock_feature/stock_board_concept_ths.py +328 -0
  249. akshare/stock_feature/stock_board_industry_ths.py +57 -2
  250. akshare/stock_feature/stock_buffett_index_lg.py +10 -8
  251. akshare/stock_feature/stock_classify_sina.py +3 -6
  252. akshare/stock_feature/stock_comment_em.py +81 -144
  253. akshare/stock_feature/stock_congestion_lg.py +2 -1
  254. akshare/stock_feature/stock_cyq_em.py +5 -11
  255. akshare/stock_feature/stock_disclosure_cninfo.py +6 -6
  256. akshare/stock_feature/stock_dxsyl_em.py +121 -74
  257. akshare/stock_feature/stock_ebs_lg.py +5 -4
  258. akshare/stock_feature/stock_esg_sina.py +29 -7
  259. akshare/stock_feature/stock_fhps_em.py +2 -1
  260. akshare/stock_feature/stock_fhps_ths.py +15 -7
  261. akshare/stock_feature/stock_fund_flow.py +30 -22
  262. akshare/stock_feature/stock_gddh_em.py +19 -11
  263. akshare/stock_feature/stock_gdfx_em.py +226 -113
  264. akshare/stock_feature/stock_gdhs.py +75 -50
  265. akshare/stock_feature/stock_gdzjc_em.py +21 -10
  266. akshare/stock_feature/stock_gpzy_em.py +78 -46
  267. akshare/stock_feature/stock_gxl_lg.py +3 -2
  268. akshare/stock_feature/stock_hist_em.py +137 -234
  269. akshare/stock_feature/stock_hist_tx.py +13 -10
  270. akshare/stock_feature/stock_hk_valuation_baidu.py +20 -8
  271. akshare/stock_feature/stock_hot_xq.py +4 -6
  272. akshare/stock_feature/stock_hsgt_em.py +269 -97
  273. akshare/stock_feature/stock_hsgt_exchange_rate.py +115 -87
  274. akshare/stock_feature/stock_hsgt_min_em.py +13 -16
  275. akshare/stock_feature/stock_info.py +7 -80
  276. akshare/stock_feature/stock_inner_trade_xq.py +38 -31
  277. akshare/stock_feature/stock_jgdy_em.py +43 -40
  278. akshare/stock_feature/stock_lhb_em.py +119 -3
  279. akshare/stock_feature/stock_margin_em.py +0 -1
  280. akshare/stock_feature/stock_margin_sse.py +0 -2
  281. akshare/stock_feature/stock_pankou_em.py +71 -35
  282. akshare/stock_feature/stock_qsjy_em.py +13 -4
  283. akshare/stock_feature/stock_report_em.py +151 -7
  284. akshare/stock_feature/stock_research_report_em.py +55 -20
  285. akshare/stock_feature/stock_sy_em.py +20 -15
  286. akshare/stock_feature/stock_technology_ths.py +122 -77
  287. akshare/stock_feature/stock_tfp_em.py +2 -1
  288. akshare/stock_feature/stock_three_report_em.py +21 -5
  289. akshare/stock_feature/stock_ttm_lyr.py +18 -9
  290. akshare/stock_feature/stock_value_em.py +83 -0
  291. akshare/stock_feature/stock_yjbb_em.py +58 -32
  292. akshare/stock_feature/stock_yjyg_cninfo.py +6 -2
  293. akshare/stock_feature/stock_yjyg_em.py +1 -1
  294. akshare/stock_feature/stock_yzxdr_em.py +24 -22
  295. akshare/stock_feature/stock_zdhtmx_em.py +20 -6
  296. akshare/stock_feature/stock_zh_vote_baidu.py +4 -1
  297. akshare/stock_feature/stock_ztb_em.py +39 -24
  298. akshare/stock_fundamental/__init__.py +1 -1
  299. akshare/stock_fundamental/stock_basic_info_xq.py +119 -0
  300. akshare/stock_fundamental/{stock_finance_hk.py → stock_finance_hk_em.py} +23 -16
  301. akshare/stock_fundamental/{stock_finance.py → stock_finance_sina.py} +60 -7
  302. akshare/stock_fundamental/stock_finance_ths.py +524 -57
  303. akshare/stock_fundamental/stock_finance_us_em.py +268 -0
  304. akshare/stock_fundamental/stock_gbjg_em.py +80 -0
  305. akshare/stock_fundamental/stock_hold.py +26 -17
  306. akshare/stock_fundamental/stock_ipo_declare.py +1 -0
  307. akshare/stock_fundamental/stock_kcb_detail_sse.py +10 -10
  308. akshare/stock_fundamental/stock_kcb_sse.py +26 -25
  309. akshare/stock_fundamental/stock_notice.py +12 -3
  310. akshare/stock_fundamental/stock_profit_forecast_em.py +31 -13
  311. akshare/stock_fundamental/stock_profit_forecast_hk_etnet.py +64 -41
  312. akshare/stock_fundamental/stock_profit_forecast_ths.py +86 -35
  313. akshare/stock_fundamental/stock_recommend.py +20 -4
  314. akshare/stock_fundamental/stock_zygc.py +5 -62
  315. akshare/utils/context.py +43 -0
  316. akshare/utils/demjson.py +2009 -1338
  317. akshare/utils/func.py +49 -2
  318. akshare/utils/multi_decrypt.py +53 -0
  319. akshare/utils/token_process.py +6 -5
  320. {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info}/METADATA +54 -80
  321. akshare-1.17.99.dist-info/RECORD +409 -0
  322. {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info}/WHEEL +1 -1
  323. {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info/licenses}/LICENSE +1 -1
  324. tests/test_func.py +3 -5
  325. akshare/bond/bond_futures.py +0 -50
  326. akshare/bond/bond_investing.py +0 -139
  327. akshare/crypto/crypto_hist_investing.py +0 -249
  328. akshare/fund/fund_announcement.py +0 -56
  329. akshare/futures/futures_international.py +0 -170
  330. akshare/futures/futures_news_baidu.py +0 -54
  331. akshare/futures/inventory_data.py +0 -100
  332. akshare/futures_derivative/futures_index_price_nh.py +0 -61
  333. akshare/futures_derivative/futures_index_return_nh.py +0 -47
  334. akshare/futures_derivative/futures_index_volatility_nh.py +0 -53
  335. akshare/futures_derivative/futures_other_index_nh.py +0 -145
  336. akshare/index/index_fear_greed_funddb.py +0 -78
  337. akshare/index/index_investing.py +0 -232
  338. akshare/sport/__init__.py +0 -6
  339. akshare/sport/sport_olympic.py +0 -27
  340. akshare/stock_feature/stock_wencai.py +0 -104
  341. akshare/stock_fundamental/stock_mda_ym.py +0 -40
  342. akshare-1.14.49.dist-info/RECORD +0 -387
  343. {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info}/top_level.txt +0 -0
@@ -1,13 +1,98 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/6/29 17:13
4
+ Date: 2025/3/12 17:00
5
5
  Desc: 东方财富-沪深板块-概念板块
6
6
  https://quote.eastmoney.com/center/boardlist.html#concept_board
7
7
  """
8
8
 
9
- import requests
9
+ import re
10
+ from functools import lru_cache
11
+
10
12
  import pandas as pd
13
+ import requests
14
+
15
+ from akshare.utils.func import fetch_paginated_data
16
+
17
+
18
+ @lru_cache()
19
+ def __stock_board_concept_name_em() -> pd.DataFrame:
20
+ """
21
+ 东方财富网-行情中心-沪深京板块-概念板块-名称
22
+ https://quote.eastmoney.com/center/boardlist.html#concept_board
23
+ :return: 概念板块-名称
24
+ :rtype: pandas.DataFrame
25
+ """
26
+ url = "https://79.push2.eastmoney.com/api/qt/clist/get"
27
+ params = {
28
+ "pn": "1",
29
+ "pz": "100",
30
+ "po": "1",
31
+ "np": "1",
32
+ "ut": "bd1d9ddb04089700cf9c27f6f7426281",
33
+ "fltt": "2",
34
+ "invt": "2",
35
+ "fid": "f12",
36
+ "fs": "m:90 t:3 f:!50",
37
+ "fields": "f2,f3,f4,f8,f12,f14,f15,f16,f17,f18,f20,f21,f24,f25,f22,f33,f11,f62,f128,f124,f107,f104,f105,f136",
38
+ }
39
+ temp_df = fetch_paginated_data(url, params)
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
+ temp_df = temp_df[
70
+ [
71
+ "排名",
72
+ "板块名称",
73
+ "板块代码",
74
+ "最新价",
75
+ "涨跌额",
76
+ "涨跌幅",
77
+ "总市值",
78
+ "换手率",
79
+ "上涨家数",
80
+ "下跌家数",
81
+ "领涨股票",
82
+ "领涨股票-涨跌幅",
83
+ ]
84
+ ]
85
+ 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")
88
+ temp_df["总市值"] = pd.to_numeric(temp_df["总市值"], errors="coerce")
89
+ temp_df["换手率"] = pd.to_numeric(temp_df["换手率"], errors="coerce")
90
+ 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(
93
+ temp_df["领涨股票-涨跌幅"], errors="coerce"
94
+ )
95
+ return temp_df
11
96
 
12
97
 
13
98
  def stock_board_concept_name_em() -> pd.DataFrame:
@@ -20,22 +105,17 @@ def stock_board_concept_name_em() -> pd.DataFrame:
20
105
  url = "https://79.push2.eastmoney.com/api/qt/clist/get"
21
106
  params = {
22
107
  "pn": "1",
23
- "pz": "2000",
108
+ "pz": "100",
24
109
  "po": "1",
25
110
  "np": "1",
26
111
  "ut": "bd1d9ddb04089700cf9c27f6f7426281",
27
112
  "fltt": "2",
28
113
  "invt": "2",
29
- "fid": "f3",
114
+ "fid": "f12",
30
115
  "fs": "m:90 t:3 f:!50",
31
116
  "fields": "f2,f3,f4,f8,f12,f14,f15,f16,f17,f18,f20,f21,f24,f25,f22,f33,f11,f62,f128,f124,f107,f104,f105,f136",
32
- "_": "1626075887768",
33
117
  }
34
- r = requests.get(url, params=params)
35
- data_json = r.json()
36
- temp_df = pd.DataFrame(data_json["data"]["diff"])
37
- temp_df.reset_index(inplace=True)
38
- temp_df["index"] = range(1, len(temp_df) + 1)
118
+ temp_df = fetch_paginated_data(url, params)
39
119
  temp_df.columns = [
40
120
  "排名",
41
121
  "最新价",
@@ -94,8 +174,58 @@ def stock_board_concept_name_em() -> pd.DataFrame:
94
174
  return temp_df
95
175
 
96
176
 
177
+ def stock_board_concept_spot_em(symbol: str = "可燃冰") -> pd.DataFrame:
178
+ """
179
+ 东方财富网-行情中心-沪深京板块-概念板块-实时行情
180
+ https://quote.eastmoney.com/bk/90.BK0818.html
181
+ :param symbol: 概念板块代码
182
+ :type symbol: str
183
+ :return: 概念板块-实时行情
184
+ :rtype: pandas.DataFrame
185
+ """
186
+ url = "https://91.push2.eastmoney.com/api/qt/stock/get"
187
+ field_map = {
188
+ "f43": "最新",
189
+ "f44": "最高",
190
+ "f45": "最低",
191
+ "f46": "开盘",
192
+ "f47": "成交量",
193
+ "f48": "成交额",
194
+ "f170": "涨跌幅",
195
+ "f171": "振幅",
196
+ "f168": "换手率",
197
+ "f169": "涨跌额",
198
+ }
199
+
200
+ if re.match(pattern=r"^BK\d+", string=symbol):
201
+ em_code = symbol
202
+ else:
203
+ industry_listing = __stock_board_concept_name_em()
204
+ em_code = industry_listing.query("板块名称 == @symbol")["板块代码"].values[0]
205
+ params = dict(
206
+ fields=",".join(field_map.keys()),
207
+ mpi="1000",
208
+ invt="2",
209
+ fltt="1",
210
+ secid=f"90.{em_code}",
211
+ )
212
+ r = requests.get(url, params=params)
213
+ data_dict = r.json()
214
+ result = pd.DataFrame.from_dict(data_dict["data"], orient="index")
215
+ result.rename(field_map, inplace=True)
216
+ result.reset_index(inplace=True)
217
+ result.columns = ["item", "value"]
218
+ result["value"] = pd.to_numeric(result["value"], errors="coerce")
219
+
220
+ # 各项转换成正常单位. 除了成交量与成交额, 原始数据中已是正常单位(元)
221
+ result["value"] = result["value"] * 1e-2
222
+ result.iloc[4, 1] = result.iloc[4, 1] * 1e2
223
+ result.iloc[5, 1] = result.iloc[5, 1] * 1e2
224
+ return result
225
+
226
+
97
227
  def stock_board_concept_hist_em(
98
- symbol: str = "数字货币",
228
+ symbol: str = "绿色电力",
99
229
  period: str = "daily",
100
230
  start_date: str = "20220101",
101
231
  end_date: str = "20221128",
@@ -122,7 +252,7 @@ def stock_board_concept_hist_em(
122
252
  "weekly": "102",
123
253
  "monthly": "103",
124
254
  }
125
- stock_board_concept_em_map = stock_board_concept_name_em()
255
+ stock_board_concept_em_map = __stock_board_concept_name_em()
126
256
  stock_board_code = stock_board_concept_em_map[
127
257
  stock_board_concept_em_map["板块名称"] == symbol
128
258
  ]["板块代码"].values[0]
@@ -130,7 +260,6 @@ def stock_board_concept_hist_em(
130
260
  url = "https://91.push2his.eastmoney.com/api/qt/stock/kline/get"
131
261
  params = {
132
262
  "secid": f"90.{stock_board_code}",
133
- "ut": "fa5fd1943c7b386f172d6893dbfba10b",
134
263
  "fields1": "f1,f2,f3,f4,f5,f6",
135
264
  "fields2": "f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",
136
265
  "klt": period_map[period],
@@ -139,7 +268,6 @@ def stock_board_concept_hist_em(
139
268
  "end": end_date,
140
269
  "smplmt": "10000",
141
270
  "lmt": "1000000",
142
- "_": "1626079488673",
143
271
  }
144
272
  r = requests.get(url, params=params)
145
273
  data_json = r.json()
@@ -198,7 +326,7 @@ def stock_board_concept_hist_min_em(
198
326
  :return: 分时历史行情
199
327
  :rtype: pandas.DataFrame
200
328
  """
201
- stock_board_concept_em_map = stock_board_concept_name_em()
329
+ stock_board_concept_em_map = __stock_board_concept_name_em()
202
330
  stock_board_code = stock_board_concept_em_map[
203
331
  stock_board_concept_em_map["板块名称"] == symbol
204
332
  ]["板块代码"].values[0]
@@ -207,11 +335,9 @@ def stock_board_concept_hist_min_em(
207
335
  params = {
208
336
  "fields1": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13",
209
337
  "fields2": "f51,f52,f53,f54,f55,f56,f57,f58",
210
- "ut": "fa5fd1943c7b386f172d6893dbfba10b",
211
338
  "iscr": "0",
212
339
  "ndays": "1",
213
340
  "secid": f"90.{stock_board_code}",
214
- "_": "1687852931312",
215
341
  }
216
342
  r = requests.get(url, params=params)
217
343
  data_json = r.json()
@@ -240,14 +366,12 @@ def stock_board_concept_hist_min_em(
240
366
  url = "https://91.push2his.eastmoney.com/api/qt/stock/kline/get"
241
367
  params = {
242
368
  "secid": f"90.{stock_board_code}",
243
- "ut": "fa5fd1943c7b386f172d6893dbfba10b",
244
369
  "fields1": "f1,f2,f3,f4,f5,f6",
245
370
  "fields2": "f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",
246
371
  "klt": period,
247
372
  "fqt": "1",
248
373
  "end": "20500101",
249
374
  "lmt": "1000000",
250
- "_": "1647760607065",
251
375
  }
252
376
  r = requests.get(url, params=params)
253
377
  data_json = r.json()
@@ -295,39 +419,37 @@ def stock_board_concept_hist_min_em(
295
419
  return temp_df
296
420
 
297
421
 
298
- def stock_board_concept_cons_em(symbol: str = "车联网") -> pd.DataFrame:
422
+ def stock_board_concept_cons_em(symbol: str = "融资融券") -> pd.DataFrame:
299
423
  """
300
424
  东方财富-沪深板块-概念板块-板块成份
301
425
  https://quote.eastmoney.com/center/boardlist.html#boards-BK06551
302
- :param symbol: 板块名称
426
+ :param symbol: 板块名称或者板块代码
303
427
  :type symbol: str
304
428
  :return: 板块成份
305
429
  :rtype: pandas.DataFrame
306
430
  """
307
- stock_board_concept_em_map = stock_board_concept_name_em()
308
- stock_board_code = stock_board_concept_em_map[
309
- stock_board_concept_em_map["板块名称"] == symbol
310
- ]["板块代码"].values[0]
431
+ if re.match(pattern=r"^BK\d+", string=symbol):
432
+ stock_board_code = symbol
433
+ else:
434
+ stock_board_concept_em_map = __stock_board_concept_name_em()
435
+ stock_board_code = stock_board_concept_em_map[
436
+ stock_board_concept_em_map["板块名称"] == symbol
437
+ ]["板块代码"].values[0]
311
438
  url = "https://29.push2.eastmoney.com/api/qt/clist/get"
312
439
  params = {
313
440
  "pn": "1",
314
- "pz": "5000",
441
+ "pz": "100",
315
442
  "po": "1",
316
443
  "np": "1",
317
444
  "ut": "bd1d9ddb04089700cf9c27f6f7426281",
318
445
  "fltt": "2",
319
446
  "invt": "2",
320
- "fid": "f3",
447
+ "fid": "f12",
321
448
  "fs": f"b:{stock_board_code} f:!50",
322
449
  "fields": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,"
323
450
  "f24,f25,f22,f11,f62,f128,f136,f115,f152,f45",
324
- "_": "1626081702127",
325
451
  }
326
- r = requests.get(url, params=params)
327
- data_json = r.json()
328
- temp_df = pd.DataFrame(data_json["data"]["diff"])
329
- temp_df.reset_index(inplace=True)
330
- temp_df["index"] = range(1, len(temp_df) + 1)
452
+ temp_df = fetch_paginated_data(url, params)
331
453
  temp_df.columns = [
332
454
  "序号",
333
455
  "_",
@@ -403,11 +525,14 @@ if __name__ == "__main__":
403
525
  stock_board_concept_em_df = stock_board_concept_name_em()
404
526
  print(stock_board_concept_em_df)
405
527
 
528
+ stock_board_concept_spot_em_df = stock_board_concept_spot_em(symbol="可燃冰")
529
+ print(stock_board_concept_spot_em_df)
530
+
406
531
  stock_board_concept_hist_em_df = stock_board_concept_hist_em(
407
532
  symbol="绿色电力",
408
533
  period="daily",
409
534
  start_date="20220101",
410
- end_date="20230806",
535
+ end_date="20250227",
411
536
  adjust="",
412
537
  )
413
538
  print(stock_board_concept_hist_em_df)
@@ -417,5 +542,5 @@ if __name__ == "__main__":
417
542
  )
418
543
  print(stock_board_concept_hist_min_em_df)
419
544
 
420
- stock_board_concept_cons_em_df = stock_board_concept_cons_em(symbol="融资融券")
545
+ stock_board_concept_cons_em_df = stock_board_concept_cons_em(symbol="BK0655")
421
546
  print(stock_board_concept_cons_em_df)