akshare 1.13.46__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 (388) hide show
  1. akshare/__init__.py +757 -161
  2. akshare/air/air_hebei.py +79 -53
  3. akshare/air/air_zhenqi.py +3 -7
  4. akshare/air/cons.py +1 -0
  5. akshare/air/crypto.js +1 -1
  6. akshare/air/outcrypto.js +1 -1
  7. akshare/air/sunrise_tad.py +32 -17
  8. akshare/article/cons.py +1 -0
  9. akshare/article/epu_index.py +4 -3
  10. akshare/article/ff_factor.py +19 -8
  11. akshare/article/fred_md.py +4 -1
  12. akshare/article/risk_rv.py +3 -8
  13. akshare/bank/bank_cbirc_2020.py +11 -11
  14. akshare/bank/cons.py +7 -6
  15. akshare/bond/bond_buy_back_em.py +228 -0
  16. akshare/bond/bond_cb_sina.py +1 -0
  17. akshare/bond/bond_cb_ths.py +17 -9
  18. akshare/bond/bond_cbond.py +19 -14
  19. akshare/bond/bond_china.py +38 -39
  20. akshare/bond/bond_china_money.py +75 -48
  21. akshare/bond/bond_convert.py +10 -9
  22. akshare/bond/bond_em.py +37 -17
  23. akshare/bond/bond_info_cm.py +28 -8
  24. akshare/bond/bond_issue_cninfo.py +73 -30
  25. akshare/bond/bond_summary.py +38 -37
  26. akshare/bond/bond_zh_cov.py +31 -40
  27. akshare/bond/bond_zh_sina.py +61 -51
  28. akshare/bond/cons.py +14 -11
  29. akshare/cal/__init__.py +0 -0
  30. akshare/cal/rv.py +170 -0
  31. akshare/cost/cost_living.py +7 -5
  32. akshare/crypto/__init__.py +1 -1
  33. akshare/crypto/crypto_bitcoin_cme.py +9 -7
  34. akshare/crypto/crypto_hold.py +4 -2
  35. akshare/currency/currency.py +1 -0
  36. akshare/currency/currency_china_bank_sina.py +11 -6
  37. akshare/currency/currency_safe.py +7 -6
  38. akshare/data/__init__.py +1 -1
  39. akshare/data/cninfo.js +1 -1
  40. akshare/datasets.py +10 -21
  41. akshare/economic/cons.py +10 -3
  42. akshare/economic/macro_australia.py +74 -69
  43. akshare/economic/macro_bank.py +95 -653
  44. akshare/economic/macro_canada.py +92 -81
  45. akshare/economic/macro_china.py +163 -117
  46. akshare/economic/macro_china_hk.py +0 -1
  47. akshare/economic/macro_china_nbs.py +24 -7
  48. akshare/economic/macro_euro.py +103 -56
  49. akshare/economic/macro_finance_ths.py +135 -0
  50. akshare/economic/macro_germany.py +1 -1
  51. akshare/economic/macro_info_ws.py +100 -0
  52. akshare/economic/macro_japan.py +0 -1
  53. akshare/economic/macro_other.py +1 -6
  54. akshare/economic/macro_swiss.py +2 -3
  55. akshare/economic/macro_uk.py +1 -1
  56. akshare/economic/macro_usa.py +7 -9
  57. akshare/economic/marco_cnbs.py +11 -6
  58. akshare/energy/energy_carbon.py +94 -126
  59. akshare/energy/energy_oil_em.py +1 -2
  60. akshare/event/cons.py +1 -0
  61. akshare/event/migration.py +3 -2
  62. akshare/exceptions.py +43 -0
  63. akshare/file_fold/calendar.json +245 -2
  64. akshare/forex/__init__.py +0 -0
  65. akshare/forex/cons.py +192 -0
  66. akshare/forex/forex_em.py +149 -0
  67. akshare/fortune/fortune_500.py +15 -48
  68. akshare/fortune/fortune_bloomberg.py +6 -3
  69. akshare/fortune/fortune_forbes_500.py +3 -6
  70. akshare/fortune/fortune_hurun.py +2 -1
  71. akshare/fortune/fortune_xincaifu_500.py +17 -14
  72. akshare/fund/fund_amac.py +38 -15
  73. akshare/fund/fund_announcement_em.py +145 -0
  74. akshare/fund/fund_aum_em.py +49 -35
  75. akshare/fund/fund_em.py +251 -220
  76. akshare/fund/fund_etf_em.py +44 -35
  77. akshare/fund/fund_etf_sina.py +76 -27
  78. akshare/fund/fund_etf_ths.py +95 -0
  79. akshare/fund/fund_fee_em.py +172 -0
  80. akshare/fund/fund_fhsp_em.py +42 -32
  81. akshare/fund/fund_init_em.py +8 -5
  82. akshare/fund/fund_lof_em.py +12 -19
  83. akshare/fund/fund_manager.py +25 -11
  84. akshare/fund/fund_overview_em.py +42 -0
  85. akshare/fund/fund_portfolio_em.py +78 -66
  86. akshare/fund/fund_position_lg.py +19 -8
  87. akshare/fund/fund_rank_em.py +90 -84
  88. akshare/fund/fund_rating.py +33 -12
  89. akshare/fund/fund_report_cninfo.py +63 -48
  90. akshare/fund/fund_scale_em.py +24 -13
  91. akshare/fund/fund_scale_sina.py +20 -10
  92. akshare/fund/fund_xq.py +3 -2
  93. akshare/futures/cons.py +141 -46
  94. akshare/futures/cot.py +89 -88
  95. akshare/futures/futures_basis.py +99 -33
  96. akshare/futures/futures_comex_em.py +1 -0
  97. akshare/futures/futures_comm_ctp.py +13 -2
  98. akshare/futures/futures_contract_detail.py +59 -9
  99. akshare/futures/futures_daily_bar.py +75 -62
  100. akshare/futures/futures_foreign.py +14 -8
  101. akshare/futures/futures_hf_em.py +215 -61
  102. akshare/futures/futures_hist_em.py +191 -0
  103. akshare/futures/futures_hq_sina.py +79 -61
  104. akshare/futures/futures_index_ccidx.py +24 -82
  105. akshare/futures/futures_inventory_99.py +70 -272
  106. akshare/futures/futures_inventory_em.py +14 -11
  107. akshare/futures/futures_news_shmet.py +2 -2
  108. akshare/futures/futures_roll_yield.py +11 -24
  109. akshare/futures/futures_rule.py +7 -3
  110. akshare/futures/futures_rule_em.py +38 -0
  111. akshare/futures/futures_settlement_price_sgx.py +21 -6
  112. akshare/futures/futures_stock_js.py +1 -2
  113. akshare/futures/futures_to_spot.py +43 -39
  114. akshare/futures/futures_warehouse_receipt.py +53 -48
  115. akshare/futures/futures_zh_sina.py +4 -4
  116. akshare/futures/receipt.py +298 -165
  117. akshare/futures/requests_fun.py +16 -3
  118. akshare/futures/symbol_var.py +32 -13
  119. akshare/futures_derivative/cons.py +100 -103
  120. akshare/futures_derivative/futures_contract_info_cffex.py +55 -39
  121. akshare/futures_derivative/futures_contract_info_czce.py +2 -0
  122. akshare/futures_derivative/futures_contract_info_dce.py +43 -17
  123. akshare/futures_derivative/futures_contract_info_gfex.py +43 -31
  124. akshare/futures_derivative/futures_contract_info_ine.py +43 -34
  125. akshare/futures_derivative/futures_contract_info_shfe.py +7 -8
  126. akshare/futures_derivative/futures_cot_sina.py +28 -19
  127. akshare/futures_derivative/futures_index_sina.py +25 -13
  128. akshare/fx/cons.py +12 -7
  129. akshare/fx/currency_investing.py +19 -285
  130. akshare/fx/fx_c_swap_cm.py +62 -0
  131. akshare/fx/fx_quote.py +3 -2
  132. akshare/fx/fx_quote_baidu.py +2 -1
  133. akshare/hf/__init__.py +1 -1
  134. akshare/hf/hf_sp500.py +8 -7
  135. akshare/index/cons.py +132 -28
  136. akshare/index/index_cflp.py +29 -26
  137. akshare/index/index_cni.py +89 -91
  138. akshare/index/index_cons.py +26 -10
  139. akshare/index/index_csindex.py +68 -0
  140. akshare/index/index_cx.py +263 -62
  141. akshare/index/index_drewry.py +17 -16
  142. akshare/index/index_eri.py +1 -0
  143. akshare/index/index_global_em.py +167 -0
  144. akshare/index/index_global_sina.py +82 -0
  145. akshare/index/index_kq_fz.py +17 -14
  146. akshare/index/index_kq_ss.py +1 -0
  147. akshare/index/index_option_qvix.py +351 -16
  148. akshare/index/index_research_sw.py +38 -38
  149. akshare/index/index_spot.py +9 -5
  150. akshare/index/index_stock_hk.py +6 -10
  151. akshare/index/index_stock_us_sina.py +1 -1
  152. akshare/index/index_stock_zh.py +193 -101
  153. akshare/index/index_stock_zh_csindex.py +15 -369
  154. akshare/index/index_sugar.py +18 -4
  155. akshare/index/index_sw.py +62 -34
  156. akshare/index/index_yw.py +53 -75
  157. akshare/index/index_zh_em.py +15 -82
  158. akshare/interest_rate/interbank_rate_em.py +14 -10
  159. akshare/movie/artist_yien.py +32 -5
  160. akshare/movie/jm.js +0 -1
  161. akshare/movie/movie_yien.py +92 -18
  162. akshare/movie/video_yien.py +28 -5
  163. akshare/news/__init__.py +1 -1
  164. akshare/news/news_baidu.py +395 -220
  165. akshare/news/news_cctv.py +38 -38
  166. akshare/news/news_stock.py +49 -13
  167. akshare/nlp/nlp_interface.py +7 -8
  168. akshare/option/cons.py +12 -12
  169. akshare/option/option_comm_qihuo.py +86 -0
  170. akshare/option/option_commodity.py +355 -211
  171. akshare/option/option_commodity_sina.py +22 -26
  172. akshare/option/option_contract_info_ctp.py +63 -0
  173. akshare/option/option_current_sse.py +61 -0
  174. akshare/option/option_current_szse.py +84 -0
  175. akshare/option/option_czce.py +37 -9
  176. akshare/option/option_daily_stats_sse_szse.py +145 -0
  177. akshare/option/option_em.py +4 -8
  178. akshare/option/option_finance.py +60 -12
  179. akshare/option/option_finance_sina.py +28 -26
  180. akshare/option/option_lhb_em.py +62 -57
  181. akshare/option/option_margin.py +62 -0
  182. akshare/option/option_premium_analysis_em.py +58 -53
  183. akshare/option/option_risk_analysis_em.py +11 -8
  184. akshare/option/option_risk_indicator_sse.py +18 -16
  185. akshare/option/option_value_analysis_em.py +62 -55
  186. akshare/other/__init__.py +1 -1
  187. akshare/other/other_car_cpca.py +20 -20
  188. akshare/pro/__init__.py +0 -1
  189. akshare/pro/client.py +6 -4
  190. akshare/pro/cons.py +3 -2
  191. akshare/pro/data_pro.py +6 -5
  192. akshare/qdii/__init__.py +0 -0
  193. akshare/qdii/qdii_jsl.py +233 -0
  194. akshare/qhkc/__init__.py +1 -6
  195. akshare/qhkc/qhkc_api.py +64 -22
  196. akshare/qhkc_web/__init__.py +1 -6
  197. akshare/qhkc_web/qhkc_fund.py +10 -6
  198. akshare/qhkc_web/qhkc_index.py +28 -14
  199. akshare/qhkc_web/qhkc_tool.py +62 -59
  200. akshare/rate/__init__.py +1 -1
  201. akshare/rate/repo_rate.py +36 -32
  202. akshare/reits/__init__.py +1 -1
  203. akshare/reits/reits_basic.py +149 -13
  204. akshare/request.py +117 -0
  205. akshare/spot/__init__.py +1 -1
  206. akshare/spot/spot_hog_soozhu.py +232 -0
  207. akshare/spot/spot_price_qh.py +121 -0
  208. akshare/spot/spot_sge.py +70 -9
  209. akshare/stock/cons.py +60 -23
  210. akshare/stock/stock_allotment_cninfo.py +10 -9
  211. akshare/stock/stock_ask_bid_em.py +3 -78
  212. akshare/stock/stock_board_concept_em.py +160 -35
  213. akshare/stock/stock_board_industry_em.py +163 -70
  214. akshare/stock/stock_cg_equity_mortgage.py +15 -11
  215. akshare/stock/stock_cg_guarantee.py +41 -51
  216. akshare/stock/stock_cg_lawsuit.py +36 -35
  217. akshare/stock/stock_dividend_cninfo.py +36 -16
  218. akshare/stock/stock_dzjy_em.py +347 -260
  219. akshare/stock/stock_fund_em.py +73 -64
  220. akshare/stock/stock_fund_hold.py +1 -2
  221. akshare/stock/stock_gsrl_em.py +1 -0
  222. akshare/stock/stock_hk_comparison_em.py +175 -0
  223. akshare/stock/stock_hk_famous.py +107 -0
  224. akshare/stock/stock_hk_fhpx_ths.py +2 -1
  225. akshare/stock/stock_hk_hot_rank_em.py +1 -0
  226. akshare/stock/stock_hk_sina.py +91 -42
  227. akshare/stock/stock_hold_control_cninfo.py +100 -15
  228. akshare/stock/stock_hold_control_em.py +4 -5
  229. akshare/stock/stock_hold_num_cninfo.py +18 -12
  230. akshare/stock/stock_hot_rank_em.py +4 -1
  231. akshare/stock/stock_hot_search_baidu.py +32 -19
  232. akshare/stock/stock_hot_up_em.py +4 -1
  233. akshare/stock/stock_hsgt_em.py +155 -0
  234. akshare/stock/stock_industry.py +1 -0
  235. akshare/stock/stock_industry_cninfo.py +25 -20
  236. akshare/stock/stock_industry_pe_cninfo.py +45 -31
  237. akshare/stock/stock_industry_sw.py +5 -9
  238. akshare/stock/stock_info.py +31 -19
  239. akshare/stock/stock_info_em.py +17 -11
  240. akshare/stock/stock_intraday_em.py +9 -80
  241. akshare/stock/stock_intraday_sina.py +2 -2
  242. akshare/stock/stock_ipo_summary_cninfo.py +25 -10
  243. akshare/stock/stock_new_cninfo.py +32 -19
  244. akshare/stock/stock_news_cx.py +39 -0
  245. akshare/stock/stock_profile_cninfo.py +9 -8
  246. akshare/stock/stock_profile_em.py +302 -0
  247. akshare/stock/stock_rank_forecast.py +8 -6
  248. akshare/stock/stock_repurchase_em.py +7 -2
  249. akshare/stock/stock_share_changes_cninfo.py +18 -14
  250. akshare/stock/stock_share_hold.py +24 -20
  251. akshare/stock/stock_stop.py +6 -6
  252. akshare/stock/stock_summary.py +153 -417
  253. akshare/stock/stock_us_famous.py +19 -11
  254. akshare/stock/stock_us_js.py +3 -2
  255. akshare/stock/stock_us_pink.py +38 -27
  256. akshare/stock/stock_us_sina.py +15 -12
  257. akshare/stock/stock_weibo_nlp.py +18 -20
  258. akshare/stock/stock_xq.py +36 -9
  259. akshare/stock/stock_zh_a_sina.py +58 -80
  260. akshare/stock/stock_zh_a_special.py +240 -243
  261. akshare/stock/stock_zh_a_tick_tx.py +11 -3
  262. akshare/stock/stock_zh_ah_tx.py +23 -26
  263. akshare/stock/stock_zh_b_sina.py +32 -55
  264. akshare/stock/stock_zh_comparison_em.py +250 -0
  265. akshare/stock/stock_zh_kcb_report.py +11 -9
  266. akshare/stock/stock_zh_kcb_sina.py +67 -64
  267. akshare/stock_a/__init__.py +0 -0
  268. akshare/stock_a/stock_board_concept_name_em.py +170 -0
  269. akshare/stock_a/stock_individual_fund_flow_rank.py +258 -0
  270. akshare/stock_a/stock_zh_a_spot.py +212 -0
  271. akshare/stock_feature/cons.py +1 -0
  272. akshare/stock_feature/stock_a_below_net_asset_statistics.py +5 -2
  273. akshare/stock_feature/stock_a_high_low.py +5 -2
  274. akshare/stock_feature/stock_a_indicator.py +15 -57
  275. akshare/stock_feature/stock_a_pe_and_pb.py +39 -9
  276. akshare/stock_feature/stock_account_em.py +0 -1
  277. akshare/stock_feature/stock_all_pb.py +2 -1
  278. akshare/stock_feature/stock_analyst_em.py +36 -30
  279. akshare/stock_feature/stock_board_concept_ths.py +144 -252
  280. akshare/stock_feature/stock_board_industry_ths.py +137 -401
  281. akshare/stock_feature/stock_buffett_index_lg.py +10 -8
  282. akshare/stock_feature/stock_classify_sina.py +3 -6
  283. akshare/stock_feature/stock_comment_em.py +81 -144
  284. akshare/stock_feature/stock_concept_futu.py +183 -0
  285. akshare/stock_feature/stock_congestion_lg.py +2 -1
  286. akshare/stock_feature/stock_cyq_em.py +5 -11
  287. akshare/stock_feature/stock_disclosure_cninfo.py +20 -10
  288. akshare/stock_feature/stock_dxsyl_em.py +121 -74
  289. akshare/stock_feature/stock_ebs_lg.py +5 -4
  290. akshare/stock_feature/stock_esg_sina.py +33 -15
  291. akshare/stock_feature/stock_fhps_em.py +62 -26
  292. akshare/stock_feature/stock_fhps_ths.py +34 -7
  293. akshare/stock_feature/stock_fund_flow.py +38 -25
  294. akshare/stock_feature/stock_gddh_em.py +19 -11
  295. akshare/stock_feature/stock_gdfx_em.py +226 -113
  296. akshare/stock_feature/stock_gdhs.py +75 -50
  297. akshare/stock_feature/stock_gdzjc_em.py +21 -10
  298. akshare/stock_feature/stock_gpzy_em.py +78 -46
  299. akshare/stock_feature/stock_gxl_lg.py +3 -2
  300. akshare/stock_feature/stock_hist_em.py +158 -237
  301. akshare/stock_feature/stock_hist_tx.py +13 -10
  302. akshare/stock_feature/stock_hk_valuation_baidu.py +20 -8
  303. akshare/stock_feature/stock_hot_xq.py +4 -6
  304. akshare/stock_feature/stock_hsgt_em.py +269 -97
  305. akshare/stock_feature/stock_hsgt_exchange_rate.py +115 -87
  306. akshare/stock_feature/stock_hsgt_min_em.py +13 -16
  307. akshare/stock_feature/stock_info.py +8 -81
  308. akshare/stock_feature/stock_inner_trade_xq.py +38 -31
  309. akshare/stock_feature/stock_irm_cninfo.py +32 -9
  310. akshare/stock_feature/stock_jgdy_em.py +43 -40
  311. akshare/stock_feature/stock_lh_yybpm.py +36 -37
  312. akshare/stock_feature/stock_lhb_em.py +165 -35
  313. akshare/stock_feature/stock_lhb_sina.py +93 -46
  314. akshare/stock_feature/stock_margin_em.py +101 -0
  315. akshare/stock_feature/{stock_sse_margin.py → stock_margin_sse.py} +21 -17
  316. akshare/stock_feature/{stock_szse_margin.py → stock_margin_szse.py} +7 -7
  317. akshare/stock_feature/stock_market_legu.py +4 -2
  318. akshare/stock_feature/stock_pankou_em.py +71 -35
  319. akshare/stock_feature/stock_qsjy_em.py +13 -4
  320. akshare/stock_feature/stock_report_em.py +152 -8
  321. akshare/stock_feature/stock_research_report_em.py +55 -20
  322. akshare/stock_feature/stock_sns_sseinfo.py +15 -12
  323. akshare/stock_feature/stock_sy_em.py +20 -15
  324. akshare/stock_feature/stock_technology_ths.py +152 -120
  325. akshare/stock_feature/stock_tfp_em.py +37 -14
  326. akshare/stock_feature/stock_three_report_em.py +120 -78
  327. akshare/stock_feature/stock_ttm_lyr.py +18 -9
  328. akshare/stock_feature/stock_value_em.py +83 -0
  329. akshare/stock_feature/stock_yjbb_em.py +58 -32
  330. akshare/stock_feature/stock_yjyg_cninfo.py +6 -2
  331. akshare/stock_feature/stock_yjyg_em.py +1 -1
  332. akshare/stock_feature/stock_yzxdr_em.py +24 -22
  333. akshare/stock_feature/stock_zdhtmx_em.py +20 -6
  334. akshare/stock_feature/stock_zh_valuation_baidu.py +3 -2
  335. akshare/stock_feature/stock_zh_vote_baidu.py +4 -1
  336. akshare/stock_feature/stock_ztb_em.py +39 -24
  337. akshare/stock_fundamental/__init__.py +1 -1
  338. akshare/stock_fundamental/stock_basic_info_xq.py +119 -0
  339. akshare/stock_fundamental/{stock_finance_hk.py → stock_finance_hk_em.py} +23 -16
  340. akshare/stock_fundamental/{stock_finance.py → stock_finance_sina.py} +203 -59
  341. akshare/stock_fundamental/stock_finance_ths.py +524 -57
  342. akshare/stock_fundamental/stock_finance_us_em.py +268 -0
  343. akshare/stock_fundamental/stock_gbjg_em.py +80 -0
  344. akshare/stock_fundamental/stock_hold.py +26 -17
  345. akshare/stock_fundamental/stock_ipo_declare.py +1 -0
  346. akshare/stock_fundamental/stock_kcb_detail_sse.py +10 -10
  347. akshare/stock_fundamental/stock_kcb_sse.py +26 -25
  348. akshare/stock_fundamental/stock_notice.py +41 -18
  349. akshare/stock_fundamental/stock_profit_forecast_em.py +31 -13
  350. akshare/stock_fundamental/stock_profit_forecast_hk_etnet.py +64 -41
  351. akshare/stock_fundamental/stock_profit_forecast_ths.py +86 -35
  352. akshare/stock_fundamental/stock_recommend.py +20 -4
  353. akshare/stock_fundamental/stock_register_em.py +448 -0
  354. akshare/stock_fundamental/stock_zygc.py +5 -62
  355. akshare/tool/trade_date_hist.py +1 -1
  356. akshare/utils/context.py +43 -0
  357. akshare/utils/demjson.py +2009 -1338
  358. akshare/utils/func.py +49 -2
  359. akshare/utils/multi_decrypt.py +53 -0
  360. akshare/utils/token_process.py +6 -5
  361. akshare/utils/tqdm.py +13 -3
  362. {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info}/METADATA +56 -86
  363. akshare-1.17.99.dist-info/RECORD +409 -0
  364. {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info}/WHEEL +1 -1
  365. {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info/licenses}/LICENSE +1 -1
  366. tests/test_func.py +3 -5
  367. akshare/bond/bond_futures.py +0 -50
  368. akshare/bond/bond_investing.py +0 -139
  369. akshare/crypto/crypto_hist_investing.py +0 -249
  370. akshare/fortune/fortune_it_juzi.py +0 -123
  371. akshare/fund/fund_announcement.py +0 -56
  372. akshare/futures/futures_international.py +0 -170
  373. akshare/futures/futures_news_baidu.py +0 -54
  374. akshare/futures/inventory_data.py +0 -100
  375. akshare/futures_derivative/futures_index_price_nh.py +0 -61
  376. akshare/futures_derivative/futures_index_return_nh.py +0 -47
  377. akshare/futures_derivative/futures_index_volatility_nh.py +0 -51
  378. akshare/futures_derivative/futures_other_index_nh.py +0 -145
  379. akshare/index/index_fear_greed_funddb.py +0 -78
  380. akshare/index/index_investing.py +0 -232
  381. akshare/sport/__init__.py +0 -6
  382. akshare/sport/sport_olympic.py +0 -27
  383. akshare/sport/sport_olympic_winter.py +0 -39
  384. akshare/stock_feature/stock_wencai.py +0 -104
  385. akshare/stock_fundamental/stock_mda_ym.py +0 -40
  386. akshare/stock_fundamental/stock_register.py +0 -292
  387. akshare-1.13.46.dist-info/RECORD +0 -380
  388. {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info}/top_level.txt +0 -0
@@ -1,68 +1,115 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/9/2 19:00
4
+ Date: 2025/2/18 16:00
5
5
  Desc: 新浪财经-港股-实时行情数据和历史行情数据(包含前复权和后复权因子)
6
- http://stock.finance.sina.com.cn/hkstock/quotes/00700.html
6
+ https://stock.finance.sina.com.cn/hkstock/quotes/00700.html
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.stock.cons import (
13
14
  hk_js_decode,
14
- hk_sina_stock_dict_payload,
15
- hk_sina_stock_list_url,
16
15
  hk_sina_stock_hist_url,
17
16
  hk_sina_stock_hist_hfq_url,
18
17
  hk_sina_stock_hist_qfq_url,
19
18
  )
20
- from akshare.utils import demjson
21
19
 
22
20
 
23
21
  def stock_hk_spot() -> pd.DataFrame:
24
22
  """
25
23
  新浪财经-港股的所有港股的实时行情数据
26
- http://vip.stock.finance.sina.com.cn/mkt/#qbgg_hk
24
+ https://vip.stock.finance.sina.com.cn/mkt/#qbgg_hk
27
25
  :return: 实时行情数据
28
26
  :rtype: pandas.DataFrame
29
27
  """
30
- res = requests.get(hk_sina_stock_list_url, params=hk_sina_stock_dict_payload)
31
- data_json = [
32
- demjson.decode(tt)
33
- for tt in [
34
- item + "}" for item in res.text[1:-1].split("},") if not item.endswith("}")
35
- ]
36
- ]
37
- data_df = pd.DataFrame(data_json)
38
- data_df = data_df[
39
- [
40
- "symbol",
41
- "name",
42
- "engname",
43
- "tradetype",
44
- "lasttrade",
45
- "prevclose",
46
- "open",
47
- "high",
48
- "low",
49
- "volume",
50
- "amount",
51
- "ticktime",
52
- "buy",
53
- "sell",
54
- "pricechange",
55
- "changepercent",
56
- ]
28
+ url = "https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHKStockData"
29
+ params = {
30
+ "page": "1",
31
+ "num": "60",
32
+ "sort": "symbol",
33
+ "asc": "1",
34
+ "node": "qbgg_hk",
35
+ "_s_r_a": "init",
36
+ }
37
+ big_df = pd.DataFrame()
38
+ from akshare.utils.tqdm import get_tqdm
39
+ tqdm = get_tqdm()
40
+ for page in tqdm(range(1, 100), leave=False):
41
+ params["page"] = str(page)
42
+ r = requests.get(url, params=params)
43
+ data_json = r.json()
44
+ if not data_json:
45
+ break
46
+ temp_df = pd.DataFrame(data_json)
47
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
48
+
49
+
50
+ big_df.columns = [
51
+ "代码",
52
+ "中文名称",
53
+ "英文名称",
54
+ "交易类型",
55
+ "最新价",
56
+ "昨收",
57
+ "今开",
58
+ "最高",
59
+ "最低",
60
+ "成交量",
61
+ "-",
62
+ "成交额",
63
+ "日期时间",
64
+ "买一",
65
+ "卖一",
66
+ "-",
67
+ "-",
68
+ "-",
69
+ "-",
70
+ "-",
71
+ "涨跌额",
72
+ "涨跌幅",
73
+ "-",
74
+ "-",
57
75
  ]
58
- return data_df
76
+ big_df = big_df[[
77
+ "日期时间",
78
+ "代码",
79
+ "中文名称",
80
+ "英文名称",
81
+ "交易类型",
82
+ "最新价",
83
+ "涨跌额",
84
+ "涨跌幅",
85
+ "昨收",
86
+ "今开",
87
+ "最高",
88
+ "最低",
89
+ "成交量",
90
+ "成交额",
91
+ "买一",
92
+ "卖一",
93
+ ]]
94
+ big_df["最新价"] = pd.to_numeric(big_df["最新价"], errors="coerce")
95
+ big_df["涨跌额"] = pd.to_numeric(big_df["涨跌额"], errors="coerce")
96
+ big_df["涨跌幅"] = pd.to_numeric(big_df["涨跌幅"], errors="coerce")
97
+ big_df["昨收"] = pd.to_numeric(big_df["昨收"], errors="coerce")
98
+ big_df["今开"] = pd.to_numeric(big_df["今开"], errors="coerce")
99
+ big_df["最高"] = pd.to_numeric(big_df["最高"], errors="coerce")
100
+ big_df["最低"] = pd.to_numeric(big_df["最低"], errors="coerce")
101
+ big_df["成交量"] = pd.to_numeric(big_df["成交量"], errors="coerce")
102
+ big_df["成交额"] = pd.to_numeric(big_df["成交额"], errors="coerce")
103
+ big_df["买一"] = pd.to_numeric(big_df["买一"], errors="coerce")
104
+ big_df["卖一"] = pd.to_numeric(big_df["卖一"], errors="coerce")
105
+ return big_df
59
106
 
60
107
 
61
108
  def stock_hk_daily(symbol: str = "00981", adjust: str = "") -> pd.DataFrame:
62
109
  """
63
110
  新浪财经-港股-个股的历史行情数据
64
111
  https://stock.finance.sina.com.cn/hkstock/quotes/02912.html
65
- :param symbol: 可以使用 stock_hk_spot 获取
112
+ :param symbol: 可以使用 ak.stock_hk_spot() 获取
66
113
  :type symbol: str
67
114
  :param adjust: "": 返回未复权的数据 ; qfq: 返回前复权后的数据; qfq-factor: 返回前复权因子和调整;
68
115
  :type adjust: str
@@ -95,7 +142,7 @@ def stock_hk_daily(symbol: str = "00981", adjust: str = "") -> pd.DataFrame:
95
142
  data_df.reset_index(inplace=True)
96
143
  data_df["date"] = pd.to_datetime(data_df["date"]).dt.date
97
144
  return data_df
98
- except SyntaxError as e:
145
+ except SyntaxError:
99
146
  data_df.reset_index(inplace=True)
100
147
  data_df["date"] = pd.to_datetime(data_df["date"]).dt.date
101
148
  return data_df
@@ -114,7 +161,7 @@ def stock_hk_daily(symbol: str = "00981", adjust: str = "") -> pd.DataFrame:
114
161
  try:
115
162
  # try for pandas >= 2.1.0
116
163
  new_range.ffill(inplace=True)
117
- except Exception as e:
164
+ except Exception:
118
165
  try:
119
166
  new_range.fillna(method="ffill", inplace=True)
120
167
  except Exception as e:
@@ -127,7 +174,7 @@ def stock_hk_daily(symbol: str = "00981", adjust: str = "") -> pd.DataFrame:
127
174
  try:
128
175
  # try for pandas >= 2.1.0
129
176
  temp_df.ffill(inplace=True)
130
- except Exception as e:
177
+ except Exception:
131
178
  try:
132
179
  # try for pandas < 2.1.0
133
180
  temp_df.fillna(method="ffill", inplace=True)
@@ -160,7 +207,7 @@ def stock_hk_daily(symbol: str = "00981", adjust: str = "") -> pd.DataFrame:
160
207
  data_df["date"] = pd.to_datetime(data_df["date"]).dt.date
161
208
  return data_df
162
209
 
163
- except SyntaxError as e:
210
+ except SyntaxError:
164
211
  data_df.reset_index(inplace=True)
165
212
  data_df["date"] = pd.to_datetime(data_df["date"]).dt.date
166
213
  return data_df
@@ -178,7 +225,7 @@ def stock_hk_daily(symbol: str = "00981", adjust: str = "") -> pd.DataFrame:
178
225
  try:
179
226
  # try for pandas >= 2.1.0
180
227
  new_range.ffill(inplace=True)
181
- except Exception as e:
228
+ except Exception:
182
229
  try:
183
230
  # try for pandas < 2.1.0
184
231
  new_range.fillna(method="ffill", inplace=True)
@@ -192,7 +239,7 @@ def stock_hk_daily(symbol: str = "00981", adjust: str = "") -> pd.DataFrame:
192
239
  try:
193
240
  # try for pandas >= 2.1.0
194
241
  temp_df.ffill(inplace=True)
195
- except Exception as e:
242
+ except Exception:
196
243
  try:
197
244
  # try for pandas < 2.1.0
198
245
  temp_df.fillna(method="ffill", inplace=True)
@@ -233,6 +280,8 @@ def stock_hk_daily(symbol: str = "00981", adjust: str = "") -> pd.DataFrame:
233
280
  qfq_factor_df.reset_index(inplace=True)
234
281
  qfq_factor_df["date"] = pd.to_datetime(qfq_factor_df["date"]).dt.date
235
282
  return qfq_factor_df
283
+ else:
284
+ return pd.DataFrame()
236
285
 
237
286
 
238
287
  if __name__ == "__main__":
@@ -1,18 +1,19 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/8/23 8:30
4
+ Date: 2024/7/24 23:30
5
5
  Desc: 巨潮资讯-数据中心-专题统计-股东股本-实际控制人持股变动
6
- http://webapi.cninfo.com.cn/#/thematicStatistics
6
+ https://webapi.cninfo.com.cn/#/thematicStatistics
7
7
 
8
8
  巨潮资讯-数据中心-专题统计-股东股本-高管持股变动明细
9
- http://webapi.cninfo.com.cn/#/thematicStatistics
9
+ https://webapi.cninfo.com.cn/#/thematicStatistics
10
10
  """
11
+
11
12
  import datetime
12
13
 
13
14
  import pandas as pd
15
+ import py_mini_racer
14
16
  import requests
15
- from py_mini_racer import py_mini_racer
16
17
 
17
18
  from akshare.datasets import get_ths_js
18
19
 
@@ -26,7 +27,7 @@ def _get_file_content_cninfo(file: str = "cninfo.js") -> str:
26
27
  :rtype: str
27
28
  """
28
29
  setting_file_path = get_ths_js(file)
29
- with open(setting_file_path) as f:
30
+ with open(setting_file_path, encoding="utf-8") as f:
30
31
  file_data = f.read()
31
32
  return file_data
32
33
 
@@ -34,7 +35,7 @@ def _get_file_content_cninfo(file: str = "cninfo.js") -> str:
34
35
  def stock_hold_control_cninfo(symbol: str = "全部") -> pd.DataFrame:
35
36
  """
36
37
  巨潮资讯-数据中心-专题统计-股东股本-实际控制人持股变动
37
- http://webapi.cninfo.com.cn/#/thematicStatistics
38
+ https://webapi.cninfo.com.cn/#/thematicStatistics
38
39
  :param symbol: choice of {"单独控制", "实际控制人", "一致行动人", "家族控制", "全部"}; 从 2010 开始
39
40
  :type symbol: str
40
41
  :return: 实际控制人持股变动
@@ -47,7 +48,7 @@ def stock_hold_control_cninfo(symbol: str = "全部") -> pd.DataFrame:
47
48
  "家族控制": "069004",
48
49
  "全部": "",
49
50
  }
50
- url = "http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1033"
51
+ url = "https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1033"
51
52
  js_code = py_mini_racer.MiniRacer()
52
53
  js_content = _get_file_content_cninfo("cninfo.js")
53
54
  js_code.eval(js_content)
@@ -60,11 +61,12 @@ def stock_hold_control_cninfo(symbol: str = "全部") -> pd.DataFrame:
60
61
  "Cache-Control": "no-cache",
61
62
  "Content-Length": "0",
62
63
  "Host": "webapi.cninfo.com.cn",
63
- "Origin": "http://webapi.cninfo.com.cn",
64
+ "Origin": "https://webapi.cninfo.com.cn",
64
65
  "Pragma": "no-cache",
65
66
  "Proxy-Connection": "keep-alive",
66
- "Referer": "http://webapi.cninfo.com.cn/",
67
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36",
67
+ "Referer": "https://webapi.cninfo.com.cn/",
68
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
69
+ "Chrome/93.0.4577.63 Safari/537.36",
68
70
  "X-Requested-With": "XMLHttpRequest",
69
71
  }
70
72
  params = {
@@ -104,7 +106,7 @@ def stock_hold_control_cninfo(symbol: str = "全部") -> pd.DataFrame:
104
106
  def stock_hold_management_detail_cninfo(symbol: str = "增持") -> pd.DataFrame:
105
107
  """
106
108
  巨潮资讯-数据中心-专题统计-股东股本-高管持股变动明细
107
- http://webapi.cninfo.com.cn/#/thematicStatistics
109
+ https://webapi.cninfo.com.cn/#/thematicStatistics
108
110
  :param symbol: choice of {"增持", "减持"}
109
111
  :type symbol: str
110
112
  :return: 高管持股变动明细
@@ -115,7 +117,7 @@ def stock_hold_management_detail_cninfo(symbol: str = "增持") -> pd.DataFrame:
115
117
  "减持": "S",
116
118
  }
117
119
  current_date = datetime.datetime.now().date().isoformat()
118
- url = "http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1030"
120
+ url = "https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1030"
119
121
  js_code = py_mini_racer.MiniRacer()
120
122
  js_content = _get_file_content_cninfo("cninfo.js")
121
123
  js_code.eval(js_content)
@@ -128,11 +130,12 @@ def stock_hold_management_detail_cninfo(symbol: str = "增持") -> pd.DataFrame:
128
130
  "Content-Length": "0",
129
131
  "Host": "webapi.cninfo.com.cn",
130
132
  "Accept-Enckey": mcode,
131
- "Origin": "http://webapi.cninfo.com.cn",
133
+ "Origin": "https://webapi.cninfo.com.cn",
132
134
  "Pragma": "no-cache",
133
135
  "Proxy-Connection": "keep-alive",
134
- "Referer": "http://webapi.cninfo.com.cn/",
135
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36",
136
+ "Referer": "https://webapi.cninfo.com.cn/",
137
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
138
+ "Chrome/93.0.4577.63 Safari/537.36",
136
139
  "X-Requested-With": "XMLHttpRequest",
137
140
  }
138
141
  params = {
@@ -192,6 +195,85 @@ def stock_hold_management_detail_cninfo(symbol: str = "增持") -> pd.DataFrame:
192
195
  return temp_df
193
196
 
194
197
 
198
+ def stock_hold_change_cninfo(symbol: str = "全部") -> pd.DataFrame:
199
+ """
200
+ 巨潮资讯-数据中心-专题统计-股东股本-股本变动
201
+ https://webapi.cninfo.com.cn/#/thematicStatistics
202
+ :param symbol: choice of {"深市主板", "沪市", "创业板", "科创板", "北交所", "全部"}
203
+ :type symbol: str
204
+ :return: 股本变动
205
+ :rtype: pandas.DataFrame
206
+ """
207
+ symbol_map = {
208
+ "深市主板": "012002",
209
+ "沪市": "012001",
210
+ "创业板": "012015",
211
+ "科创板": "012029",
212
+ "北交所": "012046",
213
+ "全部": "",
214
+ }
215
+ url = "https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1029"
216
+ js_code = py_mini_racer.MiniRacer()
217
+ js_content = _get_file_content_cninfo("cninfo.js")
218
+ js_code.eval(js_content)
219
+ mcode = js_code.call("getResCode1")
220
+ headers = {
221
+ "Accept": "/",
222
+ "Accept-Enckey": mcode,
223
+ "Accept-Encoding": "gzip, deflate",
224
+ "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
225
+ "Cache-Control": "no-cache",
226
+ "Content-Length": "0",
227
+ "Host": "webapi.cninfo.com.cn",
228
+ "Origin": "https://webapi.cninfo.com.cn",
229
+ "Pragma": "no-cache",
230
+ "Proxy-Connection": "keep-alive",
231
+ "Referer": "https://webapi.cninfo.com.cn/",
232
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
233
+ "Chrome/93.0.4577.63 Safari/537.36",
234
+ "X-Requested-With": "XMLHttpRequest",
235
+ }
236
+ params = {
237
+ "market": symbol_map[symbol],
238
+ }
239
+ r = requests.get(url, headers=headers, params=params)
240
+ data_json = r.json()
241
+ temp_df = pd.DataFrame(data_json["records"])
242
+ temp_df.columns = [
243
+ "已流通股份",
244
+ "总股本",
245
+ "交易市场",
246
+ "证券简称",
247
+ "公告日期",
248
+ "变动原因",
249
+ "证券代码",
250
+ "变动日期",
251
+ "流通受限股份",
252
+ "已流通比例",
253
+ ]
254
+ temp_df = temp_df[
255
+ [
256
+ "证券代码",
257
+ "证券简称",
258
+ "交易市场",
259
+ "公告日期",
260
+ "变动日期",
261
+ "变动原因",
262
+ "总股本",
263
+ "已流通股份",
264
+ "已流通比例",
265
+ "流通受限股份",
266
+ ]
267
+ ]
268
+ temp_df["变动日期"] = pd.to_datetime(temp_df["变动日期"], errors="coerce").dt.date
269
+ temp_df["公告日期"] = pd.to_datetime(temp_df["公告日期"], errors="coerce").dt.date
270
+ temp_df["总股本"] = pd.to_numeric(temp_df["总股本"], errors="coerce")
271
+ temp_df["已流通股份"] = pd.to_numeric(temp_df["已流通股份"], errors="coerce")
272
+ temp_df["已流通比例"] = pd.to_numeric(temp_df["已流通比例"], errors="coerce")
273
+ temp_df["流通受限股份"] = pd.to_numeric(temp_df["流通受限股份"], errors="coerce")
274
+ return temp_df
275
+
276
+
195
277
  if __name__ == "__main__":
196
278
  stock_hold_control_cninfo_df = stock_hold_control_cninfo(symbol="全部")
197
279
  print(stock_hold_control_cninfo_df)
@@ -200,3 +282,6 @@ if __name__ == "__main__":
200
282
  symbol="增持"
201
283
  )
202
284
  print(stock_hold_management_detail_cninfo_df)
285
+
286
+ stock_hold_change_cninfo_df = stock_hold_change_cninfo(symbol="全部")
287
+ print(stock_hold_change_cninfo_df)
@@ -1,10 +1,11 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/8/8 21:30
4
+ Date: 2024/5/19 18:30
5
5
  Desc: 东方财富网-数据中心-特色数据-高管持股
6
6
  https://data.eastmoney.com/executive/list.html
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
  from tqdm import tqdm
@@ -32,7 +33,6 @@ def stock_hold_management_detail_em() -> pd.DataFrame:
32
33
  "p": "1",
33
34
  "pageNo": "1",
34
35
  "pageNum": "1",
35
- "_": "1691501763413",
36
36
  }
37
37
  r = requests.get(url, params=params)
38
38
  data_json = r.json()
@@ -47,10 +47,10 @@ def stock_hold_management_detail_em() -> pd.DataFrame:
47
47
  "pageNum": page,
48
48
  }
49
49
  )
50
- r = requests.post(url, params=params)
50
+ r = requests.get(url, params=params)
51
51
  data_json = r.json()
52
52
  temp_df = pd.DataFrame(data_json["result"]["data"])
53
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
53
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
54
54
 
55
55
  big_df.rename(
56
56
  columns={
@@ -133,7 +133,6 @@ def stock_hold_management_person_em(
133
133
  "sortColumns": "CHANGE_DATE,SECURITY_CODE,PERSON_NAME",
134
134
  "source": "WEB",
135
135
  "client": "WEB",
136
- "_": "1691503078611",
137
136
  }
138
137
  r = requests.get(url, params=params)
139
138
  data_json = r.json()
@@ -1,13 +1,14 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/5/30 00:19
4
+ Date: 2024/7/24 23:30
5
5
  Desc: 巨潮资讯-数据中心-专题统计-股东股本-股东人数及持股集中度
6
- http://webapi.cninfo.com.cn/#/thematicStatistics
6
+ https://webapi.cninfo.com.cn/#/thematicStatistics
7
7
  """
8
+
8
9
  import pandas as pd
10
+ import py_mini_racer
9
11
  import requests
10
- from py_mini_racer import py_mini_racer
11
12
 
12
13
  from akshare.datasets import get_ths_js
13
14
 
@@ -21,7 +22,7 @@ def _get_file_content_ths(file: str = "cninfo.js") -> str:
21
22
  :rtype: str
22
23
  """
23
24
  setting_file_path = get_ths_js(file)
24
- with open(setting_file_path) as f:
25
+ with open(setting_file_path, encoding="utf-8") as f:
25
26
  file_data = f.read()
26
27
  return file_data
27
28
 
@@ -29,13 +30,13 @@ def _get_file_content_ths(file: str = "cninfo.js") -> str:
29
30
  def stock_hold_num_cninfo(date: str = "20210630") -> pd.DataFrame:
30
31
  """
31
32
  巨潮资讯-数据中心-专题统计-股东股本-股东人数及持股集中度
32
- http://webapi.cninfo.com.cn/#/thematicStatistics
33
+ https://webapi.cninfo.com.cn/#/thematicStatistics
33
34
  :param date: choice of {"XXXX0331", "XXXX0630", "XXXX0930", "XXXX1231"}; 从 20170331 开始
34
35
  :type date: str
35
36
  :return: 股东人数及持股集中度
36
37
  :rtype: pandas.DataFrame
37
38
  """
38
- url = "http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1034"
39
+ url = "https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1034"
39
40
  js_code = py_mini_racer.MiniRacer()
40
41
  js_content = _get_file_content_ths("cninfo.js")
41
42
  js_code.eval(js_content)
@@ -48,11 +49,12 @@ def stock_hold_num_cninfo(date: str = "20210630") -> pd.DataFrame:
48
49
  "Cache-Control": "no-cache",
49
50
  "Content-Length": "0",
50
51
  "Host": "webapi.cninfo.com.cn",
51
- "Origin": "http://webapi.cninfo.com.cn",
52
+ "Origin": "https://webapi.cninfo.com.cn",
52
53
  "Pragma": "no-cache",
53
54
  "Proxy-Connection": "keep-alive",
54
- "Referer": "http://webapi.cninfo.com.cn/",
55
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36",
55
+ "Referer": "https://webapi.cninfo.com.cn/",
56
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
57
+ "Chrome/93.0.4577.63 Safari/537.36",
56
58
  "X-Requested-With": "XMLHttpRequest",
57
59
  }
58
60
  params = {
@@ -85,15 +87,19 @@ def stock_hold_num_cninfo(date: str = "20210630") -> pd.DataFrame:
85
87
  "人均持股数量增幅",
86
88
  ]
87
89
  ]
88
- temp_df["变动日期"] = pd.to_datetime(temp_df["变动日期"]).dt.date
90
+ temp_df["变动日期"] = pd.to_datetime(temp_df["变动日期"], errors="coerce").dt.date
89
91
  temp_df["本期人均持股数量"] = pd.to_numeric(
90
92
  temp_df["本期人均持股数量"], errors="coerce"
91
93
  )
92
94
  temp_df["股东人数增幅"] = pd.to_numeric(temp_df["股东人数增幅"], errors="coerce")
93
95
  temp_df["上期股东人数"] = pd.to_numeric(temp_df["上期股东人数"], errors="coerce")
94
96
  temp_df["本期股东人数"] = pd.to_numeric(temp_df["本期股东人数"], errors="coerce")
95
- temp_df["人均持股数量增幅"] = pd.to_numeric(temp_df["人均持股数量增幅"], errors="coerce")
96
- temp_df["上期人均持股数量"] = pd.to_numeric(temp_df["上期人均持股数量"], errors="coerce")
97
+ temp_df["人均持股数量增幅"] = pd.to_numeric(
98
+ temp_df["人均持股数量增幅"], errors="coerce"
99
+ )
100
+ temp_df["上期人均持股数量"] = pd.to_numeric(
101
+ temp_df["上期人均持股数量"], errors="coerce"
102
+ )
97
103
  return temp_df
98
104
 
99
105
 
@@ -5,6 +5,7 @@ Date: 2023/7/8 17:15
5
5
  Desc: 东方财富个股人气榜
6
6
  https://guba.eastmoney.com/rank/
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
 
@@ -79,6 +80,7 @@ def stock_hot_rank_detail_em(symbol: str = "SZ000665") -> pd.DataFrame:
79
80
  "globalId": "786e4c21-70dc-435a-93bb-38",
80
81
  "marketType": "",
81
82
  "srcSecurityCode": symbol,
83
+ "yearType": "5",
82
84
  }
83
85
  r = requests.post(url_rank, json=payload)
84
86
  data_json = r.json()
@@ -96,6 +98,7 @@ def stock_hot_rank_detail_em(symbol: str = "SZ000665") -> pd.DataFrame:
96
98
  temp_df["铁杆粉丝"] = (
97
99
  pd.DataFrame(data_json["data"])["oldUidRate"].str.strip("%").astype(float) / 100
98
100
  )
101
+ temp_df.sort_values(['时间'], inplace=True)
99
102
  return temp_df
100
103
 
101
104
 
@@ -190,7 +193,7 @@ def stock_hot_rank_relate_em(symbol: str = "SZ000665") -> pd.DataFrame:
190
193
  temp_df.columns = ["时间", "-", "股票代码", "-", "相关股票代码", "涨跌幅", "-"]
191
194
  temp_df = temp_df[["时间", "股票代码", "相关股票代码", "涨跌幅"]]
192
195
  temp_df["涨跌幅"] = temp_df["涨跌幅"].str.strip("%")
193
- temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"])
196
+ temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"], errors="coerce")
194
197
  return temp_df
195
198
 
196
199
 
@@ -1,60 +1,73 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/4/21 14:19
4
+ Date: 2025/6/16 18:19
5
5
  Desc: 百度股市通-热搜股票
6
- https://gushitong.baidu.com/expressnews
6
+ https://gushitong.baidu.com/hotlist?mainTab=hotSearch&market=all
7
7
  """
8
+
9
+ from datetime import datetime
10
+
8
11
  import pandas as pd
9
12
  import requests
10
- from datetime import datetime
11
13
 
12
14
 
13
- def stock_hot_search_baidu(symbol: str = "A股", date: str = "20230428", time: str = "今日"):
15
+ def stock_hot_search_baidu(
16
+ symbol: str = "A股", date: str = "20250616", time: str = "今日"
17
+ ):
14
18
  """
15
19
  百度股市通-热搜股票
16
- https://gushitong.baidu.com/expressnews
20
+ https://gushitong.baidu.com/hotlist?mainTab=hotSearch&market=all
17
21
  :param symbol: choice of {"全部", "A股", "港股", "美股"}
18
22
  :type symbol: str
19
23
  :param date: 日期
20
24
  :type date: str
21
25
  :param time: time="今日";choice of {"今日", "1小时"}
22
26
  :type time: str
23
- :return: 股东人数及持股集中度
27
+ :return: 热搜股票
24
28
  :rtype: pandas.DataFrame
25
29
  """
26
30
  hour_str = datetime.now().hour
27
31
  symbol_map = {
28
- "全部": "all",
32
+ "全市场": "all",
29
33
  "A股": "ab",
30
34
  "港股": "hk",
31
35
  "美股": "us",
32
36
  }
33
- url = "https://finance.pae.baidu.com/vapi/v1/hotrank"
37
+ url = "https://finance.pae.baidu.com/selfselect/listsugrecomm"
34
38
  params = {
35
- "tn": "wisexmlnew",
39
+ "bizType": "wisexmlnew",
36
40
  "dsp": "iphone",
37
- "product": "stock",
41
+ "product": "search",
42
+ "style": "tablelist",
43
+ "market": symbol_map[symbol],
44
+ "type": time,
38
45
  "day": date,
39
46
  "hour": hour_str,
40
47
  "pn": "0",
41
- "rn": "1000",
42
- "market": symbol_map[symbol],
43
- "type": "day" if time == "今日" else "hour",
48
+ "rn": "12",
44
49
  "finClientType": "pc",
45
50
  }
46
51
  r = requests.get(url, params=params)
47
52
  data_json = r.json()
48
- temp_df = pd.DataFrame(
49
- data_json["Result"]["body"], columns=data_json["Result"]["header"]
50
- )
51
- temp_df["现价"] = pd.to_numeric(temp_df["现价"], errors="coerce")
52
- temp_df["排名变化"] = pd.to_numeric(temp_df["排名变化"], errors="coerce")
53
+ temp_df = pd.DataFrame(data_json["Result"]['list']["body"])
54
+ temp_df.rename(columns={
55
+ 'name': "名称/代码",
56
+ 'pxChangeRate': "涨跌幅",
57
+ 'heat': "综合热度",
58
+
59
+ }, inplace=True)
60
+ temp_df = temp_df[[
61
+ "名称/代码",
62
+ "涨跌幅",
63
+ "综合热度",
64
+ ]]
65
+ temp_df['综合热度'] = pd.to_numeric(temp_df['综合热度'], errors='coerce')
53
66
  return temp_df
54
67
 
55
68
 
56
69
  if __name__ == "__main__":
57
70
  stock_hot_search_baidu_df = stock_hot_search_baidu(
58
- symbol="A股", date="20230428", time="今日"
71
+ symbol="A股", date="20250616", time="今日"
59
72
  )
60
73
  print(stock_hot_search_baidu_df)