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,12 +1,14 @@
1
1
  # -*- coding:utf-8 -*-
2
2
  # !/usr/bin/env python
3
3
  """
4
- Date: 2022/9/30 15:20
4
+ Date: 2025/2/19 22:00
5
5
  Desc: 参考汇率和结算汇率
6
6
  深港通-港股通业务信息
7
7
  深港通-港股通业务信息: https://www.szse.cn/szhk/hkbussiness/exchangerate/index.html
8
- 沪港通-港股通信息披露: http://www.sse.com.cn/services/hkexsc/disclo/ratios/
8
+ 沪港通-港股通信息披露: https://www.sse.com.cn/services/hkexsc/disclo/ratios/
9
9
  """
10
+
11
+ import warnings
10
12
  from datetime import datetime
11
13
 
12
14
  import pandas as pd
@@ -22,20 +24,23 @@ def stock_sgt_settlement_exchange_rate_szse() -> pd.DataFrame:
22
24
  """
23
25
  url = "https://www.szse.cn/api/report/ShowReport"
24
26
  params = {
25
- 'SHOWTYPE': 'xlsx',
26
- 'CATALOGID': 'SGT_LSHL',
27
- 'TABKEY': 'tab2',
28
- 'random': '0.9184251620553985',
27
+ "SHOWTYPE": "xlsx",
28
+ "CATALOGID": "SGT_LSHL",
29
+ "TABKEY": "tab2",
30
+ "random": "0.9184251620553985",
29
31
  }
30
32
  r = requests.get(url, params=params)
31
- import warnings
32
33
  with warnings.catch_warnings(record=True):
33
34
  warnings.simplefilter("always")
34
35
  temp_df = pd.read_excel(r.content, engine="openpyxl")
35
- temp_df.sort_values('适用日期', inplace=True, ignore_index=True)
36
- temp_df['适用日期'] = pd.to_datetime(temp_df['适用日期']).dt.date
37
- temp_df['买入结算汇兑比率'] = pd.to_numeric(temp_df['买入结算汇兑比率'], errors='coerce')
38
- temp_df['卖出结算汇兑比率'] = pd.to_numeric(temp_df['卖出结算汇兑比率'], errors='coerce')
36
+ temp_df.sort_values(by="适用日期", inplace=True, ignore_index=True)
37
+ temp_df["适用日期"] = pd.to_datetime(temp_df["适用日期"], errors="coerce").dt.date
38
+ temp_df["买入结算汇兑比率"] = pd.to_numeric(
39
+ temp_df["买入结算汇兑比率"], errors="coerce"
40
+ )
41
+ temp_df["卖出结算汇兑比率"] = pd.to_numeric(
42
+ temp_df["卖出结算汇兑比率"], errors="coerce"
43
+ )
39
44
  return temp_df
40
45
 
41
46
 
@@ -48,123 +53,146 @@ def stock_sgt_reference_exchange_rate_szse() -> pd.DataFrame:
48
53
  """
49
54
  url = "https://www.szse.cn/api/report/ShowReport"
50
55
  params = {
51
- 'SHOWTYPE': 'xlsx',
52
- 'CATALOGID': 'SGT_LSHL',
53
- 'TABKEY': 'tab1',
54
- 'random': '0.9184251620553985',
56
+ "SHOWTYPE": "xlsx",
57
+ "CATALOGID": "SGT_LSHL",
58
+ "TABKEY": "tab1",
59
+ "random": "0.9184251620553985",
55
60
  }
56
61
  r = requests.get(url, params=params)
57
- import warnings
58
62
  with warnings.catch_warnings(record=True):
59
63
  warnings.simplefilter("always")
60
64
  temp_df = pd.read_excel(r.content, engine="openpyxl")
61
- temp_df.sort_values('适用日期', inplace=True, ignore_index=True)
62
- temp_df['适用日期'] = pd.to_datetime(temp_df['适用日期']).dt.date
63
- temp_df['参考汇率买入价'] = pd.to_numeric(temp_df['参考汇率买入价'], errors='coerce')
64
- temp_df['参考汇率卖出价'] = pd.to_numeric(temp_df['参考汇率卖出价'], errors='coerce')
65
+ temp_df.sort_values(by="适用日期", inplace=True, ignore_index=True)
66
+ temp_df["适用日期"] = pd.to_datetime(temp_df["适用日期"], errors="coerce").dt.date
67
+ temp_df["参考汇率买入价"] = pd.to_numeric(
68
+ temp_df["参考汇率买入价"], errors="coerce"
69
+ )
70
+ temp_df["参考汇率卖出价"] = pd.to_numeric(
71
+ temp_df["参考汇率卖出价"], errors="coerce"
72
+ )
65
73
  return temp_df
66
74
 
67
75
 
68
76
  def stock_sgt_reference_exchange_rate_sse() -> pd.DataFrame:
69
77
  """
70
78
  沪港通-港股通信息披露-参考汇率
71
- http://www.sse.com.cn/services/hkexsc/disclo/ratios/
79
+ https://www.sse.com.cn/services/hkexsc/disclo/ratios/
72
80
  :return: 参考汇率
73
81
  :rtype: pandas.DataFrame
74
82
  """
75
83
  current_date = datetime.now().date().isoformat().replace("-", "")
76
- url = "http://query.sse.com.cn/commonSoaQuery.do"
84
+ url = "https://query.sse.com.cn/commonSoaQuery.do"
77
85
  params = {
78
- 'isPagination': 'true',
79
- 'updateDate': '20120601',
80
- 'updateDateEnd': current_date,
81
- 'sqlId': 'FW_HGT_GGTHL',
82
- 'pageHelp.cacheSize': '1',
83
- 'pageHelp.pageSize': '10000',
84
- 'pageHelp.pageNo': '1',
85
- 'pageHelp.beginPage': '1',
86
- 'pageHelp.endPage': '1',
87
- '_': '1664523262778',
86
+ "isPagination": "true",
87
+ "updateDate": "20120601",
88
+ "updateDateEnd": current_date,
89
+ "sqlId": "FW_HGT_GGTHL",
90
+ "pageHelp.cacheSize": "1",
91
+ "pageHelp.pageSize": "10000",
92
+ "pageHelp.pageNo": "1",
93
+ "pageHelp.beginPage": "1",
94
+ "pageHelp.endPage": "1",
88
95
  }
89
96
  headers = {
90
- 'Host': 'query.sse.com.cn',
91
- 'Referer': 'http://www.sse.com.cn/',
92
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36'
97
+ "Host": "query.sse.com.cn",
98
+ "Referer": "https://www.sse.com.cn/",
99
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
100
+ "Chrome/105.0.0.0 Safari/537.36",
93
101
  }
94
102
  r = requests.get(url, params=params, headers=headers)
95
103
  data_json = r.json()
96
- temp_df = pd.DataFrame(data_json['result'])
97
- temp_df.rename(columns={
98
- 'currencyType': "货币种类",
99
- 'buyPrice': "参考汇率买入价",
100
- 'updateDate': "-",
101
- 'validDate': "适用日期",
102
- 'sellPrice': "参考汇率卖出价"
103
- }, inplace=True)
104
- temp_df = temp_df[[
105
- "适用日期",
106
- "参考汇率买入价",
107
- "参考汇率卖出价",
108
- "货币种类",
109
- ]]
110
- temp_df.sort_values('适用日期', inplace=True, ignore_index=True)
111
- temp_df['适用日期'] = pd.to_datetime(temp_df['适用日期']).dt.date
112
- temp_df['参考汇率买入价'] = pd.to_numeric(temp_df['参考汇率买入价'], errors='coerce')
113
- temp_df['参考汇率卖出价'] = pd.to_numeric(temp_df['参考汇率卖出价'], errors='coerce')
104
+ temp_df = pd.DataFrame(data_json["result"])
105
+ temp_df.rename(
106
+ columns={
107
+ "currencyType": "货币种类",
108
+ "buyPrice": "参考汇率买入价",
109
+ "updateDate": "-",
110
+ "validDate": "适用日期",
111
+ "sellPrice": "参考汇率卖出价",
112
+ },
113
+ inplace=True,
114
+ )
115
+ temp_df = temp_df[
116
+ [
117
+ "适用日期",
118
+ "参考汇率买入价",
119
+ "参考汇率卖出价",
120
+ "货币种类",
121
+ ]
122
+ ]
123
+ temp_df.sort_values("适用日期", inplace=True, ignore_index=True)
124
+ temp_df["适用日期"] = pd.to_datetime(temp_df["适用日期"], errors="coerce").dt.date
125
+ temp_df["参考汇率买入价"] = pd.to_numeric(
126
+ temp_df["参考汇率买入价"], errors="coerce"
127
+ )
128
+ temp_df["参考汇率卖出价"] = pd.to_numeric(
129
+ temp_df["参考汇率卖出价"], errors="coerce"
130
+ )
114
131
  return temp_df
115
132
 
116
133
 
117
134
  def stock_sgt_settlement_exchange_rate_sse() -> pd.DataFrame:
118
135
  """
119
136
  沪港通-港股通信息披露-结算汇兑
120
- http://www.sse.com.cn/services/hkexsc/disclo/ratios/
137
+ https://www.sse.com.cn/services/hkexsc/disclo/ratios/
121
138
  :return: 结算汇兑比率
122
139
  :rtype: pandas.DataFrame
123
140
  """
124
141
  current_date = datetime.now().date().isoformat().replace("-", "")
125
- url = "http://query.sse.com.cn/commonSoaQuery.do"
142
+ url = "https://query.sse.com.cn/commonSoaQuery.do"
126
143
  params = {
127
- 'isPagination': 'true',
128
- 'updateDate': '20120601',
129
- 'updateDateEnd': current_date,
130
- 'sqlId': 'FW_HGT_JSHDBL',
131
- 'pageHelp.cacheSize': '1',
132
- 'pageHelp.pageSize': '10000',
133
- 'pageHelp.pageNo': '1',
134
- 'pageHelp.beginPage': '1',
135
- 'pageHelp.endPage': '1',
136
- '_': '1664523262778',
144
+ "isPagination": "true",
145
+ "updateDate": "20120601",
146
+ "updateDateEnd": current_date,
147
+ "sqlId": "FW_HGT_JSHDBL",
148
+ "pageHelp.cacheSize": "1",
149
+ "pageHelp.pageSize": "10000",
150
+ "pageHelp.pageNo": "1",
151
+ "pageHelp.beginPage": "1",
152
+ "pageHelp.endPage": "1",
137
153
  }
138
154
  headers = {
139
- 'Host': 'query.sse.com.cn',
140
- 'Referer': 'http://www.sse.com.cn/',
141
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36'
155
+ "Host": "query.sse.com.cn",
156
+ "Referer": "https://www.sse.com.cn/",
157
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
158
+ "Chrome/105.0.0.0 Safari/537.36",
142
159
  }
143
160
  r = requests.get(url, params=params, headers=headers)
144
161
  data_json = r.json()
145
- temp_df = pd.DataFrame(data_json['result'])
146
- temp_df.rename(columns={
147
- 'currencyType': "货币种类",
148
- 'buyPrice': "买入结算汇兑比率",
149
- 'updateDate': "-",
150
- 'validDate': "适用日期",
151
- 'sellPrice': "卖出结算汇兑比率"
152
- }, inplace=True)
153
- temp_df = temp_df[[
154
- "适用日期",
155
- "买入结算汇兑比率",
156
- "卖出结算汇兑比率",
157
- "货币种类",
158
- ]]
159
- temp_df.sort_values('适用日期', inplace=True, ignore_index=True)
160
- temp_df['适用日期'] = pd.to_datetime(temp_df['适用日期']).dt.date
161
- temp_df['买入结算汇兑比率'] = pd.to_numeric(temp_df['买入结算汇兑比率'], errors='coerce')
162
- temp_df['卖出结算汇兑比率'] = pd.to_numeric(temp_df['卖出结算汇兑比率'], errors='coerce')
162
+ temp_df = pd.DataFrame(data_json["result"])
163
+ temp_df.rename(
164
+ columns={
165
+ "currencyType": "货币种类",
166
+ "buyPrice": "买入结算汇兑比率",
167
+ "updateDate": "-",
168
+ "validDate": "适用日期",
169
+ "sellPrice": "卖出结算汇兑比率",
170
+ },
171
+ inplace=True,
172
+ )
173
+ temp_df = temp_df[
174
+ [
175
+ "适用日期",
176
+ "买入结算汇兑比率",
177
+ "卖出结算汇兑比率",
178
+ "货币种类",
179
+ ]
180
+ ]
181
+ temp_df.sort_values("适用日期", inplace=True, ignore_index=True)
182
+ temp_df["适用日期"] = pd.to_datetime(temp_df["适用日期"], errors="coerce").dt.date
183
+ temp_df["买入结算汇兑比率"] = pd.to_numeric(
184
+ temp_df["买入结算汇兑比率"], errors="coerce"
185
+ )
186
+ temp_df["卖出结算汇兑比率"] = pd.to_numeric(
187
+ temp_df["卖出结算汇兑比率"], errors="coerce"
188
+ )
163
189
  return temp_df
164
190
 
165
191
 
166
192
  if __name__ == "__main__":
167
- stock_sgt_settlement_exchange_rate_szse_df = stock_sgt_settlement_exchange_rate_szse()
193
+ stock_sgt_settlement_exchange_rate_szse_df = (
194
+ stock_sgt_settlement_exchange_rate_szse()
195
+ )
168
196
  print(stock_sgt_settlement_exchange_rate_szse_df)
169
197
 
170
198
  stock_sgt_reference_exchange_rate_szse_df = stock_sgt_reference_exchange_rate_szse()
@@ -5,6 +5,7 @@ Date: 2024/2/5 18:00
5
5
  Desc: 东方财富网-数据中心-沪深港通-市场概括
6
6
  https://data.eastmoney.com/hsgt/hsgtDetail/scgk.html
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
 
@@ -20,37 +21,33 @@ def stock_hsgt_fund_min_em(symbol: str = "北向资金") -> pd.DataFrame:
20
21
  """
21
22
  url = "https://push2.eastmoney.com/api/qt/kamtbs.rtmin/get"
22
23
  params = {
23
- 'fields1': 'f1,f2,f3,f4',
24
- 'fields2': 'f51,f54,f52,f58,f53,f62,f56,f57,f60,f61',
25
- 'ut': 'b2884a393a59ad64002292a3e90d46a5',
26
- '_': '1707125786160'
24
+ "fields1": "f1,f2,f3,f4",
25
+ "fields2": "f51,f54,f52,f58,f53,f62,f56,f57,f60,f61",
26
+ "ut": "b2884a393a59ad64002292a3e90d46a5",
27
+ "_": "1707125786160",
27
28
  }
28
29
  r = requests.get(url, params=params)
29
30
  data_json = r.json()
30
31
 
31
32
  if symbol == "南向资金":
32
- n2s_str_list = data_json['data']['n2s']
33
+ n2s_str_list = data_json["data"]["n2s"]
33
34
  temp_df = pd.DataFrame([item.split(",") for item in n2s_str_list])
34
- temp_df['date'] = data_json['data']['n2sDate']
35
+ temp_df["date"] = data_json["data"]["n2sDate"]
35
36
  temp_df = temp_df.iloc[:, [0, 1, 3, 5, -1]]
36
- temp_df.columns = ['时间', "港股通(沪)", "港股通(深)", "南向资金", "日期"]
37
- temp_df = temp_df[[
38
- "日期", '时间', "港股通(沪)", "港股通(深)", "南向资金"
39
- ]]
37
+ temp_df.columns = ["时间", "港股通(沪)", "港股通(深)", "南向资金", "日期"]
38
+ temp_df = temp_df[["日期", "时间", "港股通(沪)", "港股通(深)", "南向资金"]]
40
39
  temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
41
40
  temp_df["港股通(沪)"] = pd.to_numeric(temp_df["港股通(沪)"], errors="coerce")
42
41
  temp_df["港股通(深)"] = pd.to_numeric(temp_df["港股通(深)"], errors="coerce")
43
42
  temp_df["南向资金"] = pd.to_numeric(temp_df["南向资金"], errors="coerce")
44
43
  return temp_df
45
44
  else:
46
- s2n_str_list = data_json['data']['s2n']
45
+ s2n_str_list = data_json["data"]["s2n"]
47
46
  temp_df = pd.DataFrame([item.split(",") for item in s2n_str_list])
48
- temp_df['date'] = data_json['data']['s2nDate']
47
+ temp_df["date"] = data_json["data"]["s2nDate"]
49
48
  temp_df = temp_df.iloc[:, [0, 1, 3, 5, -1]]
50
- temp_df.columns = ['时间', "沪股通", "深股通", "北向资金", "日期"]
51
- temp_df = temp_df[[
52
- "日期", '时间', "沪股通", "深股通", "北向资金"
53
- ]]
49
+ temp_df.columns = ["时间", "沪股通", "深股通", "北向资金", "日期"]
50
+ temp_df = temp_df[["日期", "时间", "沪股通", "深股通", "北向资金"]]
54
51
  temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
55
52
  temp_df["沪股通"] = pd.to_numeric(temp_df["沪股通"], errors="coerce")
56
53
  temp_df["深股通"] = pd.to_numeric(temp_df["深股通"], errors="coerce")
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/3/13 15:00
4
+ Date: 2025/8/25 15:00
5
5
  Desc: 东方财富-财经早餐
6
6
  https://stock.eastmoney.com/a/czpnc.html
7
7
  """
@@ -10,7 +10,9 @@ from datetime import datetime
10
10
 
11
11
  import pandas as pd
12
12
  import requests
13
- from bs4 import BeautifulSoup
13
+
14
+ from akshare.request import make_request_with_retry_json
15
+ from akshare.utils.cons import headers
14
16
 
15
17
 
16
18
  def stock_info_cjzc_em() -> pd.DataFrame:
@@ -132,11 +134,10 @@ def stock_info_global_futu() -> pd.DataFrame:
132
134
  }
133
135
  headers = {
134
136
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)"
135
- " Chrome/111.0.0.0 Safari/537.36"
137
+ " Chrome/111.0.0.0 Safari/537.36"
136
138
  }
137
139
  r = requests.get(url, params=params, headers=headers)
138
140
  data_json = r.json()
139
-
140
141
  temp_df = pd.DataFrame(data_json["data"]["data"]["news"])
141
142
  temp_df = temp_df[["title", "content", "time", "detailUrl"]]
142
143
  temp_df["time"] = [
@@ -168,10 +169,6 @@ def stock_info_global_ths() -> pd.DataFrame:
168
169
  "tag": "",
169
170
  "track": "website",
170
171
  }
171
- headers = {
172
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)"
173
- " Chrome/111.0.0.0 Safari/537.36"
174
- }
175
172
  r = requests.get(url, params=params, headers=headers)
176
173
  data_json = r.json()
177
174
  temp_df = pd.DataFrame(data_json["data"]["list"])
@@ -201,34 +198,10 @@ def stock_info_global_cls(symbol: str = "全部") -> pd.DataFrame:
201
198
  :return: 财联社-电报
202
199
  :rtype: pandas.DataFrame
203
200
  """
204
- session = requests.session()
205
- url = "https://m.cls.cn/telegraph"
206
- session.get(url) # 获取 cookies
207
- params = {
208
- "refresh_type": "1",
209
- "rn": "10",
210
- "last_time": "",
211
- "app": "CailianpressWap",
212
- "sv": "1",
213
- }
214
- ts = pd.Timestamp(pd.Timestamp.now())
215
- current_time = int(ts.timestamp())
216
- params.update({"last_time": current_time})
217
- url = "https://m.cls.cn/nodeapi/telegraphs"
218
- r = session.get(url, params=params)
219
- data_json = r.json()
201
+ url = "https://www.cls.cn/nodeapi/telegraphList"
202
+ data_json = make_request_with_retry_json(url, max_retries=10, headers=headers)
220
203
  temp_df = pd.DataFrame(data_json["data"]["roll_data"])
221
- next_time = temp_df["ctime"].values[-1]
222
- n = 1
223
204
  big_df = temp_df.copy()
224
- while n < 15:
225
- params.update({"last_time": next_time})
226
- r = session.get(url, params=params)
227
- data_json = r.json()
228
- temp_df = pd.DataFrame(data_json["data"]["roll_data"])
229
- big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
230
- next_time = temp_df["modified_time"].values[-1]
231
- n += 1
232
205
  big_df = big_df[["title", "content", "ctime", "level"]]
233
206
  big_df["ctime"] = pd.to_datetime(big_df["ctime"], unit="s", utc=True).dt.tz_convert(
234
207
  "Asia/Shanghai"
@@ -238,7 +211,6 @@ def stock_info_global_cls(symbol: str = "全部") -> pd.DataFrame:
238
211
  big_df.reset_index(inplace=True, drop=True)
239
212
  big_df["发布日期"] = big_df["发布时间"].dt.date
240
213
  big_df["发布时间"] = big_df["发布时间"].dt.time
241
-
242
214
  if symbol == "重点":
243
215
  big_df = big_df[(big_df["等级"] == "B") | (big_df["等级"] == "A")]
244
216
  big_df.reset_index(inplace=True, drop=True)
@@ -249,48 +221,6 @@ def stock_info_global_cls(symbol: str = "全部") -> pd.DataFrame:
249
221
  return big_df
250
222
 
251
223
 
252
- def stock_info_broker_sina(page: str = "1") -> pd.DataFrame:
253
- """
254
- 新浪财经-证券-证券原创
255
- https://finance.sina.com.cn/roll/index.d.html?cid=221431
256
- :param page: 页面号
257
- :type page: str
258
- :return: 证券原创文章
259
- :rtype: pandas.DataFrame
260
- """
261
- url = "https://finance.sina.com.cn/roll/index.d.html?cid=221431"
262
- params = {"page": page}
263
- r = requests.get(url, params=params)
264
- r.encoding = "utf-8"
265
- data_text = r.text
266
- soup = BeautifulSoup(data_text, features="lxml")
267
- data = []
268
- from datetime import datetime
269
-
270
- current_year = datetime.now().year
271
- for ul_index in range(0, 11):
272
- for li_index in range(0, 6):
273
- a_selector = f"#Main > div:nth-of-type(3) > ul:nth-of-type({ul_index}) > li:nth-of-type({li_index}) > a"
274
- span_selector = f"#Main > div:nth-of-type(3) > ul:nth-of-type({ul_index}) > li:nth-of-type({li_index}) > span"
275
- # 获取<a>标签和<span>标签内的文本内容
276
- a_element = soup.select_one(a_selector)
277
- span_element = soup.select_one(span_selector)
278
- if a_element and span_element:
279
- href = a_element.get("href")
280
- target = a_element.get("target")
281
- date = str(current_year) + "年" + span_element.text[1:-1]
282
- text = a_element.text
283
- data.append(
284
- {"href": href, "target": target, "date": date, "text": text}
285
- )
286
-
287
- temp_df = pd.DataFrame(data)
288
- temp_df = temp_df[["date", "text", "href"]]
289
- temp_df.columns = ["时间", "内容", "链接"]
290
- temp_df.sort_values(["时间"], ignore_index=True, inplace=True)
291
- return temp_df
292
-
293
-
294
224
  if __name__ == "__main__":
295
225
  stock_info_cjzc_em_df = stock_info_cjzc_em()
296
226
  print(stock_info_cjzc_em_df)
@@ -309,6 +239,3 @@ if __name__ == "__main__":
309
239
 
310
240
  stock_info_global_cls_df = stock_info_global_cls(symbol="全部")
311
241
  print(stock_info_global_cls_df)
312
-
313
- stock_info_broker_sina_df = stock_info_broker_sina(page="1")
314
- print(stock_info_broker_sina_df)
@@ -1,10 +1,11 @@
1
1
  # -*- coding:utf-8 -*-
2
2
  # !/usr/bin/env python
3
3
  """
4
- Date: 2022/4/29 17:01
4
+ Date: 2024/11/5 16:00
5
5
  Desc: 雪球-行情中心-沪深股市-内部交易
6
6
  https://xueqiu.com/hq/insider
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
 
@@ -18,10 +19,9 @@ def stock_inner_trade_xq() -> pd.DataFrame:
18
19
  """
19
20
  url = "https://xueqiu.com/service/v5/stock/f10/cn/skholderchg"
20
21
  params = {
21
- 'size': '100000',
22
- 'page': '1',
23
- 'extend': 'true',
24
- '_': '1651223013040',
22
+ "size": "100000",
23
+ "page": "1",
24
+ "extend": "true",
25
25
  }
26
26
  headers = {
27
27
  "Accept": "*/*",
@@ -38,39 +38,46 @@ def stock_inner_trade_xq() -> pd.DataFrame:
38
38
  "Sec-Fetch-Dest": "empty",
39
39
  "Sec-Fetch-Mode": "cors",
40
40
  "Sec-Fetch-Site": "same-origin",
41
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36",
41
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
42
+ "Chrome/100.0.4896.127 Safari/537.36",
42
43
  "X-Requested-With": "XMLHttpRequest",
43
44
  }
44
45
  r = requests.get(url, params=params, headers=headers)
45
46
  data_json = r.json()
46
47
  temp_df = pd.DataFrame(data_json["data"]["items"])
47
48
  temp_df.columns = [
48
- '股票代码',
49
- '股票名称',
50
- '变动人',
51
- '-',
52
- '变动日期',
53
- '变动股数',
54
- '成交均价',
55
- '变动后持股数',
56
- '与董监高关系',
57
- '董监高职务',
49
+ "股票代码",
50
+ "股票名称",
51
+ "变动人",
52
+ "-",
53
+ "变动日期",
54
+ "变动股数",
55
+ "成交均价",
56
+ "变动后持股数",
57
+ "与董监高关系",
58
+ "董监高职务",
59
+ ]
60
+ temp_df = temp_df[
61
+ [
62
+ "股票代码",
63
+ "股票名称",
64
+ "变动日期",
65
+ "变动人",
66
+ "变动股数",
67
+ "成交均价",
68
+ "变动后持股数",
69
+ "与董监高关系",
70
+ "董监高职务",
71
+ ]
58
72
  ]
59
- temp_df = temp_df[[
60
- '股票代码',
61
- '股票名称',
62
- '变动日期',
63
- '变动人',
64
- '变动股数',
65
- '成交均价',
66
- '变动后持股数',
67
- '与董监高关系',
68
- '董监高职务',
69
- ]]
70
- temp_df['变动日期'] = pd.to_datetime(temp_df['变动日期'], unit="ms").dt.date
71
- temp_df['变动股数'] = pd.to_numeric(temp_df['变动股数'], errors="coerce")
72
- temp_df['成交均价'] = pd.to_numeric(temp_df['成交均价'], errors="coerce")
73
- temp_df['变动后持股数'] = pd.to_numeric(temp_df['变动后持股数'], errors="coerce")
73
+ temp_df["变动日期"] = (
74
+ pd.to_datetime(temp_df["变动日期"], unit="ms", utc=True)
75
+ .dt.tz_convert("Asia/Shanghai")
76
+ .dt.date
77
+ )
78
+ temp_df["变动股数"] = pd.to_numeric(temp_df["变动股数"], errors="coerce")
79
+ temp_df["成交均价"] = pd.to_numeric(temp_df["成交均价"], errors="coerce")
80
+ temp_df["变动后持股数"] = pd.to_numeric(temp_df["变动后持股数"], errors="coerce")
74
81
  return temp_df
75
82
 
76
83