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,7 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/7/24 13:30
4
+ Date: 2025/2/24 18:30
5
5
  Desc: 东方财富网-行情中心-美股市场-知名美股
6
6
  https://quote.eastmoney.com/center/gridlist.html#us_wellknown
7
7
  """
@@ -14,7 +14,7 @@ def stock_us_famous_spot_em(symbol: str = "科技类") -> pd.DataFrame:
14
14
  """
15
15
  东方财富网-行情中心-美股市场-知名美股
16
16
  https://quote.eastmoney.com/center/gridlist.html#us_wellknown
17
- :symbol: choice of {'科技类', '金融类', '医药食品类', '媒体类', '汽车能源类', '制造零售类'}
17
+ :param symbol: choice of {'科技类', '金融类', '医药食品类', '媒体类', '汽车能源类', '制造零售类'}
18
18
  :type: str
19
19
  :return: 知名美股实时行情
20
20
  :rtype: pandas.DataFrame
@@ -30,9 +30,9 @@ def stock_us_famous_spot_em(symbol: str = "科技类") -> pd.DataFrame:
30
30
  url = "https://69.push2.eastmoney.com/api/qt/clist/get"
31
31
  params = {
32
32
  "pn": "1",
33
- "pz": "2000",
33
+ "pz": "50000",
34
34
  "po": "1",
35
- "np": "1",
35
+ "np": "2",
36
36
  "ut": "bd1d9ddb04089700cf9c27f6f7426281",
37
37
  "fltt": "2",
38
38
  "invt": "2",
@@ -40,11 +40,10 @@ def stock_us_famous_spot_em(symbol: str = "科技类") -> pd.DataFrame:
40
40
  "fs": f"b:MK{market_map[symbol]}",
41
41
  "fields": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,"
42
42
  "f25,f26,f22,f33,f11,f62,f128,f136,f115,f152",
43
- "_": "1631271634231",
44
43
  }
45
44
  r = requests.get(url, params=params)
46
45
  data_json = r.json()
47
- temp_df = pd.DataFrame(data_json["data"]["diff"])
46
+ temp_df = pd.DataFrame(data_json["data"]["diff"]).T
48
47
  temp_df.columns = [
49
48
  "_",
50
49
  "最新价",
@@ -5,6 +5,7 @@ Date: 2022/11/27 13:30
5
5
  Desc: 美股目标价 or 港股目标价
6
6
  https://www.ushknews.com/report.html
7
7
  """
8
+
8
9
  import requests
9
10
  import pandas as pd
10
11
 
@@ -20,8 +21,8 @@ def stock_price_js(symbol: str = "us") -> pd.DataFrame:
20
21
  """
21
22
  url = "https://calendar-api.ushknews.com/getWebTargetPriceList"
22
23
  params = {
23
- 'limit': '20',
24
- 'category': symbol,
24
+ "limit": "20",
25
+ "category": symbol,
25
26
  }
26
27
  headers = {
27
28
  "accept": "application/json, text/plain, */*",
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/4/11 17:00
4
+ Date: 2025/6/17 14:00
5
5
  Desc: 东方财富网-行情中心-美股市场-粉单市场
6
6
  https://quote.eastmoney.com/center/gridlist.html#us_pinksheet
7
7
  """
@@ -9,6 +9,8 @@ https://quote.eastmoney.com/center/gridlist.html#us_pinksheet
9
9
  import pandas as pd
10
10
  import requests
11
11
 
12
+ from akshare.utils.tqdm import get_tqdm
13
+
12
14
 
13
15
  def stock_us_pink_spot_em() -> pd.DataFrame:
14
16
  """
@@ -19,23 +21,32 @@ def stock_us_pink_spot_em() -> pd.DataFrame:
19
21
  """
20
22
  url = "https://23.push2.eastmoney.com/api/qt/clist/get"
21
23
  params = {
22
- "pn": "1",
23
- "pz": "2000",
24
- "po": "1",
25
24
  "np": "1",
26
- "ut": "bd1d9ddb04089700cf9c27f6f7426281",
27
- "fltt": "2",
28
- "invt": "2",
29
- "fid": "f3",
25
+ "fltt": "1",
26
+ "invt": "1",
30
27
  "fs": "m:153",
31
28
  "fields": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,"
32
- "f26,f22,f33,f11,f62,f128,f136,f115,f152",
33
- "_": "1631271634231",
29
+ "f26,f22,f33,f11,f62,f128,f136,f115,f152",
30
+ "fid": "f3",
31
+ "pn": "1",
32
+ "pz": "100",
33
+ "po": "1",
34
+ "dect": "1",
35
+ "ut": "bd1d9ddb04089700cf9c27f6f7426281",
34
36
  }
35
37
  r = requests.get(url, params=params)
36
38
  data_json = r.json()
37
- temp_df = pd.DataFrame(data_json["data"]["diff"])
38
- temp_df.columns = [
39
+ import math
40
+ total_page = math.ceil(data_json['data']["total"] / 100)
41
+ tqdm = get_tqdm()
42
+ big_df = pd.DataFrame()
43
+ for page in tqdm(range(1, total_page + 1), leave=False):
44
+ params.update({"pn": page})
45
+ r = requests.get(url, params=params)
46
+ data_json = r.json()
47
+ temp_df = pd.DataFrame(data_json["data"]["diff"])
48
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
49
+ big_df.columns = [
39
50
  "_",
40
51
  "最新价",
41
52
  "涨跌幅",
@@ -70,11 +81,11 @@ def stock_us_pink_spot_em() -> pd.DataFrame:
70
81
  "_",
71
82
  "_",
72
83
  ]
73
- temp_df.reset_index(inplace=True)
74
- temp_df["index"] = range(1, len(temp_df) + 1)
75
- temp_df.rename(columns={"index": "序号"}, inplace=True)
76
- temp_df["代码"] = temp_df["编码"].astype(str) + "." + temp_df["简称"]
77
- temp_df = temp_df[
84
+ big_df.reset_index(inplace=True)
85
+ big_df["index"] = range(1, len(big_df) + 1)
86
+ big_df.rename(columns={"index": "序号"}, inplace=True)
87
+ big_df["代码"] = big_df["编码"].astype(str) + "." + big_df["简称"]
88
+ big_df = big_df[
78
89
  [
79
90
  "序号",
80
91
  "名称",
@@ -90,16 +101,16 @@ def stock_us_pink_spot_em() -> pd.DataFrame:
90
101
  "代码",
91
102
  ]
92
103
  ]
93
- temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce")
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
- return temp_df
104
+ big_df["最新价"] = pd.to_numeric(big_df["最新价"], errors="coerce")
105
+ big_df["涨跌额"] = pd.to_numeric(big_df["涨跌额"], errors="coerce")
106
+ big_df["涨跌幅"] = pd.to_numeric(big_df["涨跌幅"], errors="coerce")
107
+ big_df["开盘价"] = pd.to_numeric(big_df["开盘价"], errors="coerce")
108
+ big_df["最高价"] = pd.to_numeric(big_df["最高价"], errors="coerce")
109
+ big_df["最低价"] = pd.to_numeric(big_df["最低价"], errors="coerce")
110
+ big_df["昨收价"] = pd.to_numeric(big_df["昨收价"], errors="coerce")
111
+ big_df["总市值"] = pd.to_numeric(big_df["总市值"], errors="coerce")
112
+ big_df["市盈率"] = pd.to_numeric(big_df["市盈率"], errors="coerce")
113
+ return big_df
103
114
 
104
115
 
105
116
  if __name__ == "__main__":
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/12/7 15:30
4
+ Date: 2025/1/14 17:00
5
5
  Desc: 新浪财经-美股实时行情数据和历史行情数据
6
6
  https://finance.sina.com.cn/stock/usstock/sector.shtml
7
7
  """
@@ -77,7 +77,9 @@ def get_us_stock_name() -> pd.DataFrame:
77
77
  params=us_sina_stock_dict_payload,
78
78
  )
79
79
  data_json = json.loads(res.text[res.text.find("({") + 1 : res.text.rfind(");")])
80
- big_df = pd.concat([big_df, pd.DataFrame(data_json["data"])], ignore_index=True)
80
+ big_df = pd.concat(
81
+ objs=[big_df, pd.DataFrame(data_json["data"])], ignore_index=True
82
+ )
81
83
  return big_df[["name", "cname", "symbol"]]
82
84
 
83
85
 
@@ -106,7 +108,9 @@ def stock_us_spot() -> pd.DataFrame:
106
108
  params=us_sina_stock_dict_payload,
107
109
  )
108
110
  data_json = json.loads(res.text[res.text.find("({") + 1 : res.text.rfind(");")])
109
- big_df = pd.concat([big_df, pd.DataFrame(data_json["data"])], ignore_index=True)
111
+ big_df = pd.concat(
112
+ objs=[big_df, pd.DataFrame(data_json["data"])], ignore_index=True
113
+ )
110
114
  return big_df
111
115
 
112
116
 
@@ -9,6 +9,7 @@ https://datacenter.jin10.com/market
9
9
  红色颜色越深,表明该股票讨论热度越高,其当前的涨幅更大。
10
10
  绿色颜色越深,表明该股票讨论的热度越低,其当前的跌幅更大。
11
11
  """
12
+
12
13
  import time
13
14
  from typing import Dict
14
15
 
@@ -55,34 +56,31 @@ def stock_js_weibo_report(time_period: str = "CNHOUR12") -> pd.DataFrame:
55
56
  :rtype: pandas.DataFrame
56
57
  """
57
58
  url = "https://datacenter-api.jin10.com/weibo/list"
58
- payload = {
59
- "timescale": time_period,
60
- "_": int(time.time() * 1000)
61
- }
59
+ payload = {"timescale": time_period, "_": int(time.time() * 1000)}
62
60
  headers = {
63
- 'authority': 'datacenter-api.jin10.com',
64
- 'pragma': 'no-cache',
65
- 'cache-control': 'no-cache',
66
- 'accept': '*/*',
67
- 'x-app-id': 'rU6QIu7JHe2gOUeR',
68
- 'sec-fetch-dest': 'empty',
69
- 'x-csrf-token': '',
70
- 'x-version': '1.0.0',
71
- 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36',
72
- 'origin': 'https://datacenter.jin10.com',
73
- 'sec-fetch-site': 'same-site',
74
- 'sec-fetch-mode': 'cors',
75
- 'referer': 'https://datacenter.jin10.com/market',
76
- 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'
61
+ "authority": "datacenter-api.jin10.com",
62
+ "pragma": "no-cache",
63
+ "cache-control": "no-cache",
64
+ "accept": "*/*",
65
+ "x-app-id": "rU6QIu7JHe2gOUeR",
66
+ "sec-fetch-dest": "empty",
67
+ "x-csrf-token": "",
68
+ "x-version": "1.0.0",
69
+ "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36",
70
+ "origin": "https://datacenter.jin10.com",
71
+ "sec-fetch-site": "same-site",
72
+ "sec-fetch-mode": "cors",
73
+ "referer": "https://datacenter.jin10.com/market",
74
+ "accept-language": "zh-CN,zh;q=0.9,en;q=0.8",
77
75
  }
78
76
 
79
77
  r = requests.get(url, params=payload, headers=headers)
80
78
  temp_df = pd.DataFrame(r.json()["data"])
81
- temp_df['rate'] = pd.to_numeric(temp_df['rate'])
79
+ temp_df["rate"] = pd.to_numeric(temp_df["rate"])
82
80
  return temp_df
83
81
 
84
82
 
85
- if __name__ == '__main__':
83
+ if __name__ == "__main__":
86
84
  stock_js_weibo_nlp_time_map = stock_js_weibo_nlp_time()
87
85
  print(stock_js_weibo_nlp_time_map)
88
86
 
akshare/stock/stock_xq.py CHANGED
@@ -1,39 +1,34 @@
1
1
  # !/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/4/9 16:30
4
+ Date: 2025/8/30 15:00
5
5
  Desc: 雪球-行情中心-个股
6
6
  https://xueqiu.com/S/SH513520
7
7
  """
8
8
 
9
- from datetime import datetime
10
9
  import re
10
+ from datetime import datetime
11
11
 
12
12
  import pandas as pd
13
13
  import requests
14
14
 
15
15
 
16
- def _convert_timestamp(timestamp_ms):
16
+ def _convert_timestamp(timestamp_ms: int) -> str:
17
17
  """
18
- 将以毫秒为单位的时间戳转换为日期和时间,并保留到秒。
19
-
20
- 参数:
21
- timestamp_ms (int): 以毫秒为单位的时间戳
22
-
23
- 返回:
24
- datetime: 对应的日期和时间,保留到秒
18
+ 时间戳转换为字符串时间
19
+ :param timestamp_ms: 时间戳
20
+ :type timestamp_ms: int
21
+ :return: 字符串
22
+ :rtype: str
25
23
  """
26
- # 将毫秒转换为秒
27
24
  timestamp_s = timestamp_ms / 1000
28
-
29
- # 使用 fromtimestamp 方法将时间戳转换为 datetime 对象
30
25
  datetime_obj = datetime.fromtimestamp(timestamp_s)
31
-
32
26
  return datetime_obj.strftime("%Y-%m-%d %H:%M:%S")
33
27
 
34
28
 
35
29
  def stock_individual_spot_xq(
36
30
  symbol: str = "SH600000",
31
+ token: str = None,
37
32
  timeout: float = None,
38
33
  ) -> pd.DataFrame:
39
34
  """
@@ -41,15 +36,20 @@ def stock_individual_spot_xq(
41
36
  https://xueqiu.com/S/SH600000
42
37
  :param symbol: 证券代码,可以是 A 股代码,A 股场内基金代码,A 股指数,美股代码, 美股指数
43
38
  :type symbol: str
39
+ :param token: set xueqiu token
40
+ :type token: str
44
41
  :param timeout: choice of None or a positive float number
45
42
  :type timeout: float
46
43
  :return: 证券最新行情
47
44
  :rtype: pandas.DataFrame
48
45
  """
46
+ from akshare.stock.cons import xq_a_token
49
47
  session = requests.Session()
48
+ xq_a_token = token or xq_a_token
50
49
  headers = {
51
- "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) "
52
- "Chrome/78.0.3904.108 Safari/537.36"
50
+ "cookie": f"xq_a_token={xq_a_token};",
51
+ "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 "
52
+ "(KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1",
53
53
  }
54
54
  session.get(url="https://xueqiu.com", headers=headers)
55
55
  url = f"https://stock.xueqiu.com/v5/stock/quote.json?symbol={symbol}&extend=detail"
@@ -106,30 +106,32 @@ def stock_individual_spot_xq(
106
106
  *map(
107
107
  lambda x: column_name_map[x] if x in column_name_map.keys() else x,
108
108
  temp_df.columns,
109
- ) # 由于传入的symbol可能是个股,可能是指数,也可能是基金,所以这里取列的最大公约数,没有数据的列内容为None
109
+ ) # 由于传入的 symbol 可能是个股,可能是指数,也可能是基金,所以这里取列的最大公约数,没有数据的列内容为 None
110
110
  ]
111
111
  temp_df = temp_df[
112
112
  list(
113
113
  filter(
114
114
  lambda x: re.search(pattern="[\u4e00-\u9fa5]", string=x),
115
115
  temp_df.columns,
116
- ) # 过滤temp_df,留下包含汉字的列
116
+ ) # 过滤 temp_df,留下包含汉字的列
117
117
  )
118
118
  ]
119
119
  temp_df = temp_df.T.reset_index()
120
120
  temp_df.columns = ["item", "value"]
121
121
  temp_df.loc[temp_df["item"] == "时间", "value"] = temp_df.loc[
122
122
  temp_df["item"] == "时间", "value"
123
- ].apply(lambda x: _convert_timestamp(int(x)))
124
-
123
+ ].apply(lambda x: _convert_timestamp(int(x)) if x and not pd.isna(x) else None)
124
+ temp_df.loc[temp_df["item"] == "发行日期", "value"] = temp_df.loc[
125
+ temp_df["item"] == "发行日期", "value"
126
+ ].apply(lambda x: _convert_timestamp(int(x)) if x and not pd.isna(x) else None)
125
127
  return temp_df
126
128
 
127
129
 
128
130
  if __name__ == "__main__":
129
- stock_individual_spot_xq_df = stock_individual_spot_xq(symbol="SH600000")
131
+ stock_individual_spot_xq_df = stock_individual_spot_xq(symbol="BJ430139")
130
132
  print(stock_individual_spot_xq_df)
131
133
 
132
- stock_individual_spot_xq_df = stock_individual_spot_xq(symbol="SH000001")
134
+ stock_individual_spot_xq_df = stock_individual_spot_xq(symbol="SH600000")
133
135
  print(stock_individual_spot_xq_df)
134
136
 
135
137
  stock_individual_spot_xq_df = stock_individual_spot_xq(symbol="SPY")
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/12/5 19:20
4
+ Date: 2025/3/20 19:00
5
5
  Desc: 新浪财经-A股-实时行情数据和历史行情数据(包含前复权和后复权因子)
6
6
  https://finance.sina.com.cn/realstock/company/sh689009/nc.shtml
7
7
  """
@@ -10,9 +10,8 @@ import json
10
10
  import re
11
11
 
12
12
  import pandas as pd
13
- import requests
14
13
  import py_mini_racer
15
- from tqdm import tqdm
14
+ import requests
16
15
 
17
16
  from akshare.stock.cons import (
18
17
  zh_sina_a_stock_payload,
@@ -25,6 +24,7 @@ from akshare.stock.cons import (
25
24
  zh_sina_a_stock_amount_url,
26
25
  )
27
26
  from akshare.utils import demjson
27
+ from akshare.utils.tqdm import get_tqdm
28
28
 
29
29
 
30
30
  def _get_zh_a_page_count() -> int:
@@ -52,13 +52,14 @@ def stock_zh_a_spot() -> pd.DataFrame:
52
52
  big_df = pd.DataFrame()
53
53
  page_count = _get_zh_a_page_count()
54
54
  zh_sina_stock_payload_copy = zh_sina_a_stock_payload.copy()
55
+ tqdm = get_tqdm()
55
56
  for page in tqdm(
56
57
  range(1, page_count + 1), leave=False, desc="Please wait for a moment"
57
58
  ):
58
59
  zh_sina_stock_payload_copy.update({"page": page})
59
60
  r = requests.get(zh_sina_a_stock_url, params=zh_sina_stock_payload_copy)
60
61
  data_json = demjson.decode(r.text)
61
- big_df = pd.concat([big_df, pd.DataFrame(data_json)], ignore_index=True)
62
+ big_df = pd.concat(objs=[big_df, pd.DataFrame(data_json)], ignore_index=True)
62
63
 
63
64
  big_df = big_df.astype(
64
65
  {
@@ -138,7 +139,7 @@ def stock_zh_a_daily(
138
139
  :type start_date: str
139
140
  :param end_date: 20201103; 结束日期
140
141
  :type end_date: str
141
- :param adjust: 默认为空: 返回不复权的数据; qfq: 返回前复权后的数据; hfq: 返回后复权后的数据; hfq-factor: 返回后复权因子; hfq-factor: 返回前复权因子
142
+ :param adjust: 默认为空: 返回不复权的数据; qfq: 返回前复权后的数据; hfq: 返回后复权后的数据; hfq-factor: 返回后复权因子; qfq-factor: 返回前复权因子
142
143
  :type adjust: str
143
144
  :return: 行情数据
144
145
  :rtype: pandas.DataFrame
@@ -465,6 +466,8 @@ def stock_zh_a_minute(
465
466
  temp_df = merged_df[["day", "open", "high", "low", "close", "volume"]]
466
467
  temp_df.reset_index(drop=True, inplace=True)
467
468
  return temp_df
469
+ else:
470
+ return pd.DataFrame()
468
471
 
469
472
 
470
473
  if __name__ == "__main__":