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,7 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/11/20 13:20
4
+ Date: 2025/12/18 16:00
5
5
  Desc: 同花顺-财务指标-主要指标
6
6
  https://basic.10jqka.com.cn/new/000063/finance.html
7
7
  """
@@ -11,9 +11,11 @@ import pandas as pd
11
11
  import requests
12
12
  from bs4 import BeautifulSoup
13
13
 
14
+ from akshare.utils.cons import headers
15
+
14
16
 
15
17
  def stock_financial_abstract_ths(
16
- symbol: str = "000063", indicator: str = "按报告期"
18
+ symbol: str = "000063", indicator: str = "按报告期"
17
19
  ) -> pd.DataFrame:
18
20
  """
19
21
  同花顺-财务指标-主要指标
@@ -26,14 +28,9 @@ def stock_financial_abstract_ths(
26
28
  :rtype: pandas.DataFrame
27
29
  """
28
30
  url = f"https://basic.10jqka.com.cn/new/{symbol}/finance.html"
29
- headers = {
30
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
31
- "AppleWebKit/537.36 (KHTML, like Gecko) "
32
- "Chrome/89.0.4389.90 Safari/537.36",
33
- }
34
31
  r = requests.get(url, headers=headers)
35
- soup = BeautifulSoup(r.text, "lxml")
36
- data_text = soup.find("p", attrs={"id": "main"}).string
32
+ soup = BeautifulSoup(r.text, features="lxml")
33
+ data_text = soup.find(name="p", attrs={"id": "main"}).string
37
34
  data_json = json.loads(data_text)
38
35
  df_index = [
39
36
  item[0] if isinstance(item, list) else item for item in data_json["title"]
@@ -53,11 +50,12 @@ def stock_financial_abstract_ths(
53
50
  temp_df = temp_df.T
54
51
  temp_df.reset_index(inplace=True)
55
52
  temp_df.rename(columns={"index": "报告期"}, inplace=True)
53
+ temp_df.sort_values(by="报告期", ignore_index=True, inplace=True)
56
54
  return temp_df
57
55
 
58
56
 
59
57
  def stock_financial_debt_ths(
60
- symbol: str = "000063", indicator: str = "按报告期"
58
+ symbol: str = "000063", indicator: str = "按报告期"
61
59
  ) -> pd.DataFrame:
62
60
  """
63
61
  同花顺-财务指标-资产负债表
@@ -71,13 +69,8 @@ def stock_financial_debt_ths(
71
69
  :rtype: pandas.DataFrame
72
70
  """
73
71
  url = f"https://basic.10jqka.com.cn/api/stock/finance/{symbol}_debt.json"
74
- headers = {
75
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
76
- "AppleWebKit/537.36 (KHTML, like Gecko) "
77
- "Chrome/89.0.4389.90 Safari/537.36",
78
- }
79
72
  r = requests.get(url, headers=headers)
80
- data_json = json.loads(json.loads(r.text)['flashData'])
73
+ data_json = json.loads(json.loads(r.text)["flashData"])
81
74
  df_index = [
82
75
  item[0] if isinstance(item, list) else item for item in data_json["title"]
83
76
  ]
@@ -96,7 +89,7 @@ def stock_financial_debt_ths(
96
89
 
97
90
 
98
91
  def stock_financial_benefit_ths(
99
- symbol: str = "000063", indicator: str = "按报告期"
92
+ symbol: str = "000063", indicator: str = "按报告期"
100
93
  ) -> pd.DataFrame:
101
94
  """
102
95
  同花顺-财务指标-利润表
@@ -110,13 +103,8 @@ def stock_financial_benefit_ths(
110
103
  :rtype: pandas.DataFrame
111
104
  """
112
105
  url = f"https://basic.10jqka.com.cn/api/stock/finance/{symbol}_benefit.json"
113
- headers = {
114
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
115
- "AppleWebKit/537.36 (KHTML, like Gecko) "
116
- "Chrome/89.0.4389.90 Safari/537.36",
117
- }
118
106
  r = requests.get(url, headers=headers)
119
- data_json = json.loads(json.loads(r.text)['flashData'])
107
+ data_json = json.loads(json.loads(r.text)["flashData"])
120
108
  df_index = [
121
109
  item[0] if isinstance(item, list) else item for item in data_json["title"]
122
110
  ]
@@ -139,7 +127,7 @@ def stock_financial_benefit_ths(
139
127
 
140
128
 
141
129
  def stock_financial_cash_ths(
142
- symbol: str = "000063", indicator: str = "按报告期"
130
+ symbol: str = "000063", indicator: str = "按报告期"
143
131
  ) -> pd.DataFrame:
144
132
  """
145
133
  同花顺-财务指标-现金流量表
@@ -153,13 +141,8 @@ def stock_financial_cash_ths(
153
141
  :rtype: pandas.DataFrame
154
142
  """
155
143
  url = f"https://basic.10jqka.com.cn/api/stock/finance/{symbol}_cash.json"
156
- headers = {
157
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
158
- "AppleWebKit/537.36 (KHTML, like Gecko) "
159
- "Chrome/89.0.4389.90 Safari/537.36",
160
- }
161
144
  r = requests.get(url, headers=headers)
162
- data_json = json.loads(json.loads(r.text)['flashData'])
145
+ data_json = json.loads(json.loads(r.text)["flashData"])
163
146
  df_index = [
164
147
  item[0] if isinstance(item, list) else item for item in data_json["title"]
165
148
  ]
@@ -181,58 +164,542 @@ def stock_financial_cash_ths(
181
164
  return temp_df
182
165
 
183
166
 
167
+ def __get_market_code(stock_code: str = "000063") -> int:
168
+ """
169
+ 同花顺-财务指标-主要指标-股票所属市场判断
170
+ :param stock_code: 股票代码
171
+ :type stock_code: str
172
+ :return: 同花顺-财务指标-主要指标
173
+ :rtype: pandas.DataFrame
174
+ """
175
+ # 确保股票代码是字符串并去掉空格
176
+ stock_code = str(stock_code).strip()
177
+ # 检查代码长度
178
+ if len(stock_code) < 6:
179
+ raise "请输入正确的股票代码"
180
+ # 深交所股票: 000, 001, 002, 003, 300开头 (market代码33)
181
+ if stock_code.startswith(('000', '001', '002', '003', '300')):
182
+ return 33
183
+ # 上交所股票: 600, 601, 603, 605, 688开头 (market代码17)
184
+ if stock_code.startswith(('600', '601', '603', '605', '688')):
185
+ return 17
186
+ # 北交所股票: 920开头 (market代码151)
187
+ if stock_code.startswith('920'):
188
+ return 151
189
+ # 其他情况无法识别
190
+ return 0
191
+
192
+
193
+ def stock_financial_abstract_new_ths(
194
+ symbol: str = "000063", indicator: str = "按报告期"
195
+ ) -> pd.DataFrame:
196
+ """
197
+ 同花顺-财务指标-重要指标
198
+ https://basic.10jqka.com.cn/new/000063/finance.html
199
+ :param symbol: 股票代码
200
+ :type symbol: str
201
+ :param indicator: 指标; choice of {"按报告期", "一季度", "二季度", "三季度", "四季度", "按年度"}
202
+ :type indicator: str
203
+ :return: 同花顺-财务指标-主要指标
204
+ :rtype: pandas.DataFrame
205
+ """
206
+ url = "https://basic.10jqka.com.cn/basicapi/finance/index/v1/app_data/"
207
+ if indicator == "按报告期":
208
+ period = "0"
209
+ elif indicator == "一季度":
210
+ period = "1"
211
+ elif indicator == "二季度":
212
+ period = "2"
213
+ elif indicator == "三季度":
214
+ period = "3"
215
+ elif indicator == "四季度":
216
+ period = "4"
217
+ else:
218
+ period = "4"
219
+ params = {
220
+ 'code': symbol,
221
+ 'id': 'client_stock_importance',
222
+ 'market': __get_market_code(symbol),
223
+ 'type': 'stock',
224
+ 'page': '1',
225
+ 'size': '50',
226
+ 'period': period,
227
+ }
228
+ r = requests.get(url, headers=headers, params=params)
229
+ data_json = r.json()
230
+ # 提取财务数据
231
+ financial_data = data_json['data']['data']
232
+ # 创建空列表用于存储处理后的数据
233
+ records = []
234
+ # 收集所有可能的指标字段
235
+ all_metric_fields = set()
236
+ # 首先遍历一次,找出所有的字段名
237
+ for report in financial_data:
238
+ for metric_name, metric_values in report['index_list'].items():
239
+ if isinstance(metric_values, dict):
240
+ all_metric_fields.update(metric_values.keys())
241
+ # 遍历每个报告期的数据
242
+ for report in financial_data:
243
+ report_date = report['date']
244
+ report_name = report['report_name']
245
+ report_period = report['report']
246
+ quarter_name = report['quarter_name']
247
+ # 遍历该报告期的所有财务指标
248
+ for metric_name, metric_values in report['index_list'].items():
249
+ # 基本信息
250
+ record = {
251
+ 'report_date': report_date,
252
+ 'report_name': report_name,
253
+ 'report_period': report_period,
254
+ 'quarter_name': quarter_name,
255
+ 'metric_name': metric_name,
256
+ }
257
+ # 动态添加所有指标字段
258
+ if isinstance(metric_values, dict):
259
+ for field, value in metric_values.items():
260
+ record[field] = value
261
+ else:
262
+ # 如果不是字典,将其作为'value'字段
263
+ record['value'] = metric_values
264
+ records.append(record)
265
+ # 创建DataFrame
266
+ df = pd.DataFrame(records)
267
+ # 自动识别并转换数值列
268
+ numeric_columns = []
269
+ for col in df.columns:
270
+ if col not in ['report_date', 'report_name', 'report_period', 'quarter_name', 'metric_name']:
271
+ # 尝试将列转换为数值类型
272
+ if df[col].dtype == 'object':
273
+ # 替换空字符串为NaN
274
+ df[col] = df[col].replace(to_replace='', value=pd.NA)
275
+ # 尝试转换为数值
276
+ numeric_series = pd.to_numeric(df[col], errors='coerce')
277
+ # 如果大部分能转换为数值,则保留转换结果
278
+ if numeric_series.notna().sum() > len(numeric_series) * 0.5:
279
+ df[col] = numeric_series
280
+ numeric_columns.append(col)
281
+ return df
282
+
283
+
284
+ def stock_financial_debt_new_ths(
285
+ symbol: str = "000063", indicator: str = "按报告期"
286
+ ) -> pd.DataFrame:
287
+ """
288
+ 同花顺-财务指标-资产负债表
289
+ https://basic.10jqka.com.cn/astockpc/astockmain/index.html#/financen?code=000063
290
+ :param symbol: 股票代码
291
+ :type symbol: str
292
+ :param indicator: 指标; choice of {"按报告期", "按年度"}
293
+ :type indicator: str
294
+ :return: 同花顺-财务指标-资产负债表
295
+ :rtype: pandas.DataFrame
296
+ """
297
+ url = "https://basic.10jqka.com.cn/basicapi/finance/index/v1/app_data/"
298
+ if indicator == "按报告期":
299
+ period = "0"
300
+ else:
301
+ period = "4"
302
+ params = {
303
+ 'code': symbol,
304
+ 'id': 'client_stock_debt',
305
+ 'market': __get_market_code(symbol),
306
+ 'type': 'stock',
307
+ 'page': '1',
308
+ 'size': '50',
309
+ 'period': period,
310
+ }
311
+ r = requests.get(url, headers=headers, params=params)
312
+ data_json = r.json()
313
+ # 提取财务数据
314
+ financial_data = data_json['data']['data']
315
+ # 创建空列表用于存储处理后的数据
316
+ records = []
317
+ # 收集所有可能的指标字段
318
+ all_metric_fields = set()
319
+ # 首先遍历一次,找出所有的字段名
320
+ for report in financial_data:
321
+ for metric_name, metric_values in report['index_list'].items():
322
+ if isinstance(metric_values, dict):
323
+ all_metric_fields.update(metric_values.keys())
324
+ # 遍历每个报告期的数据
325
+ for report in financial_data:
326
+ report_date = report['date']
327
+ report_name = report['report_name']
328
+ report_period = report['report']
329
+ quarter_name = report['quarter_name']
330
+ # 遍历该报告期的所有财务指标
331
+ for metric_name, metric_values in report['index_list'].items():
332
+ # 基本信息
333
+ record = {
334
+ 'report_date': report_date,
335
+ 'report_name': report_name,
336
+ 'report_period': report_period,
337
+ 'quarter_name': quarter_name,
338
+ 'metric_name': metric_name,
339
+ }
340
+ # 动态添加所有指标字段
341
+ if isinstance(metric_values, dict):
342
+ for field, value in metric_values.items():
343
+ record[field] = value
344
+ else:
345
+ # 如果不是字典,将其作为'value'字段
346
+ record['value'] = metric_values
347
+ records.append(record)
348
+ # 创建DataFrame
349
+ df = pd.DataFrame(records)
350
+ # 自动识别并转换数值列
351
+ numeric_columns = []
352
+ for col in df.columns:
353
+ if col not in ['report_date', 'report_name', 'report_period', 'quarter_name', 'metric_name']:
354
+ # 尝试将列转换为数值类型
355
+ if df[col].dtype == 'object':
356
+ # 替换空字符串为NaN
357
+ df[col] = df[col].replace(to_replace='', value=pd.NA)
358
+ # 尝试转换为数值
359
+ numeric_series = pd.to_numeric(df[col], errors='coerce')
360
+ # 如果大部分能转换为数值,则保留转换结果
361
+ if numeric_series.notna().sum() > len(numeric_series) * 0.5:
362
+ df[col] = numeric_series
363
+ numeric_columns.append(col)
364
+ return df
365
+
366
+
367
+ def stock_financial_benefit_new_ths(
368
+ symbol: str = "000063", indicator: str = "按报告期"
369
+ ) -> pd.DataFrame:
370
+ """
371
+ 同花顺-财务指标-利润表
372
+ https://basic.10jqka.com.cn/astockpc/astockmain/index.html#/financen?code=000063
373
+ :param symbol: 股票代码
374
+ :type symbol: str
375
+ :param indicator: 指标; choice of {"按报告期", "一季度", "二季度", "三季度", "四季度", "按年度"}
376
+ :type indicator: str
377
+ :return: 同花顺-财务指标-利润表
378
+ :rtype: pandas.DataFrame
379
+ """
380
+ url = "https://basic.10jqka.com.cn/basicapi/finance/index/v1/app_data/"
381
+ if indicator == "按报告期":
382
+ period = "0"
383
+ elif indicator == "一季度":
384
+ period = "1"
385
+ elif indicator == "二季度":
386
+ period = "2"
387
+ elif indicator == "三季度":
388
+ period = "3"
389
+ elif indicator == "四季度":
390
+ period = "4"
391
+ else:
392
+ period = "4"
393
+ params = {
394
+ 'code': symbol,
395
+ 'id': 'client_stock_benefit',
396
+ 'market': __get_market_code(symbol),
397
+ 'type': 'stock',
398
+ 'page': '1',
399
+ 'size': '50',
400
+ 'period': period,
401
+ }
402
+ r = requests.get(url, headers=headers, params=params)
403
+ data_json = r.json()
404
+ # 提取财务数据
405
+ financial_data = data_json['data']['data']
406
+ # 创建空列表用于存储处理后的数据
407
+ records = []
408
+ # 收集所有可能的指标字段
409
+ all_metric_fields = set()
410
+ # 首先遍历一次,找出所有的字段名
411
+ for report in financial_data:
412
+ for metric_name, metric_values in report['index_list'].items():
413
+ if isinstance(metric_values, dict):
414
+ all_metric_fields.update(metric_values.keys())
415
+ # 遍历每个报告期的数据
416
+ for report in financial_data:
417
+ report_date = report['date']
418
+ report_name = report['report_name']
419
+ report_period = report['report']
420
+ quarter_name = report['quarter_name']
421
+ # 遍历该报告期的所有财务指标
422
+ for metric_name, metric_values in report['index_list'].items():
423
+ # 基本信息
424
+ record = {
425
+ 'report_date': report_date,
426
+ 'report_name': report_name,
427
+ 'report_period': report_period,
428
+ 'quarter_name': quarter_name,
429
+ 'metric_name': metric_name,
430
+ }
431
+ # 动态添加所有指标字段
432
+ if isinstance(metric_values, dict):
433
+ for field, value in metric_values.items():
434
+ record[field] = value
435
+ else:
436
+ # 如果不是字典,将其作为'value'字段
437
+ record['value'] = metric_values
438
+ records.append(record)
439
+ # 创建DataFrame
440
+ df = pd.DataFrame(records)
441
+ # 自动识别并转换数值列
442
+ numeric_columns = []
443
+ for col in df.columns:
444
+ if col not in ['report_date', 'report_name', 'report_period', 'quarter_name', 'metric_name']:
445
+ # 尝试将列转换为数值类型
446
+ if df[col].dtype == 'object':
447
+ # 替换空字符串为NaN
448
+ df[col] = df[col].replace(to_replace='', value=pd.NA)
449
+ # 尝试转换为数值
450
+ numeric_series = pd.to_numeric(df[col], errors='coerce')
451
+ # 如果大部分能转换为数值,则保留转换结果
452
+ if numeric_series.notna().sum() > len(numeric_series) * 0.5:
453
+ df[col] = numeric_series
454
+ numeric_columns.append(col)
455
+ return df
456
+
457
+
458
+ def stock_financial_cash_new_ths(
459
+ symbol: str = "000063", indicator: str = "按报告期"
460
+ ) -> pd.DataFrame:
461
+ """
462
+ 同花顺-财务指标-现金流量表
463
+ https://basic.10jqka.com.cn/astockpc/astockmain/index.html#/financen?code=000063
464
+ :param symbol: 股票代码
465
+ :type symbol: str
466
+ :param indicator: 指标; choice of {"按报告期", "一季度", "二季度", "三季度", "四季度", "按年度"}
467
+ :type indicator: str
468
+ :return: 同花顺-财务指标-现金流量表
469
+ :rtype: pandas.DataFrame
470
+ """
471
+ url = "https://basic.10jqka.com.cn/basicapi/finance/index/v1/app_data/"
472
+ if indicator == "按报告期":
473
+ period = "0"
474
+ elif indicator == "一季度":
475
+ period = "1"
476
+ elif indicator == "二季度":
477
+ period = "2"
478
+ elif indicator == "三季度":
479
+ period = "3"
480
+ elif indicator == "四季度":
481
+ period = "4"
482
+ else:
483
+ period = "4"
484
+ params = {
485
+ 'code': symbol,
486
+ 'id': 'client_stock_cash',
487
+ 'market': __get_market_code(symbol),
488
+ 'type': 'stock',
489
+ 'page': '1',
490
+ 'size': '50',
491
+ 'period': period,
492
+ }
493
+ r = requests.get(url, headers=headers, params=params)
494
+ data_json = r.json()
495
+ # 提取财务数据
496
+ financial_data = data_json['data']['data']
497
+ # 创建空列表用于存储处理后的数据
498
+ records = []
499
+ # 收集所有可能的指标字段
500
+ all_metric_fields = set()
501
+ # 首先遍历一次,找出所有的字段名
502
+ for report in financial_data:
503
+ for metric_name, metric_values in report['index_list'].items():
504
+ if isinstance(metric_values, dict):
505
+ all_metric_fields.update(metric_values.keys())
506
+ # 遍历每个报告期的数据
507
+ for report in financial_data:
508
+ report_date = report['date']
509
+ report_name = report['report_name']
510
+ report_period = report['report']
511
+ quarter_name = report['quarter_name']
512
+ # 遍历该报告期的所有财务指标
513
+ for metric_name, metric_values in report['index_list'].items():
514
+ # 基本信息
515
+ record = {
516
+ 'report_date': report_date,
517
+ 'report_name': report_name,
518
+ 'report_period': report_period,
519
+ 'quarter_name': quarter_name,
520
+ 'metric_name': metric_name,
521
+ }
522
+ # 动态添加所有指标字段
523
+ if isinstance(metric_values, dict):
524
+ for field, value in metric_values.items():
525
+ record[field] = value
526
+ else:
527
+ # 如果不是字典,将其作为'value'字段
528
+ record['value'] = metric_values
529
+ records.append(record)
530
+ # 创建DataFrame
531
+ df = pd.DataFrame(records)
532
+ # 自动识别并转换数值列
533
+ numeric_columns = []
534
+ for col in df.columns:
535
+ if col not in ['report_date', 'report_name', 'report_period', 'quarter_name', 'metric_name']:
536
+ # 尝试将列转换为数值类型
537
+ if df[col].dtype == 'object':
538
+ # 替换空字符串为NaN
539
+ df[col] = df[col].replace(to_replace='', value=pd.NA)
540
+ # 尝试转换为数值
541
+ numeric_series = pd.to_numeric(df[col], errors='coerce')
542
+ # 如果大部分能转换为数值,则保留转换结果
543
+ if numeric_series.notna().sum() > len(numeric_series) * 0.5:
544
+ df[col] = numeric_series
545
+ numeric_columns.append(col)
546
+ return df
547
+
548
+
549
+ def stock_management_change_ths(symbol: str = "688981") -> pd.DataFrame:
550
+ """
551
+ 同花顺-公司大事-高管持股变动
552
+ https://basic.10jqka.com.cn/new/688981/event.html
553
+ :param symbol: 股票代码
554
+ :type symbol: str
555
+ :return: 同花顺-公司大事-高管持股变动
556
+ :rtype: pandas.DataFrame
557
+ """
558
+ url = f"https://basic.10jqka.com.cn/new/{symbol}/event.html"
559
+ r = requests.get(url, headers=headers)
560
+ r.encoding = "gb2312"
561
+ soup = BeautifulSoup(r.text, features="lxml")
562
+ soup_find = soup.find(name="table", attrs={"class": "data_table_1 m_table m_hl"})
563
+ if soup_find is not None:
564
+ content_list = [item.text.strip() for item in soup_find]
565
+ column_names = content_list[1].split("\n")
566
+ row = (
567
+ content_list[3]
568
+ .replace(" ", "")
569
+ .replace("\t", "")
570
+ .replace("\n\n", "")
571
+ .replace(" ", "\n")
572
+ .replace("\n\n", "\n")
573
+ .split("\n")
574
+ )
575
+ row = [item for item in row if item != ""]
576
+ new_rows = []
577
+ step = len(column_names)
578
+ for i in range(0, len(row), step):
579
+ new_rows.append(row[i: i + step])
580
+ temp_df = pd.DataFrame(new_rows, columns=column_names)
581
+ temp_df.sort_values(by="变动日期", ignore_index=True, inplace=True)
582
+ temp_df["变动日期"] = pd.to_datetime(
583
+ temp_df["变动日期"], errors="coerce"
584
+ ).dt.date
585
+ temp_df.rename(
586
+ columns={
587
+ "变动数量(股)": "变动数量",
588
+ "交易均价(元)": "交易均价",
589
+ "剩余股数(股)": "剩余股数",
590
+ },
591
+ inplace=True,
592
+ )
593
+ return temp_df
594
+ return pd.DataFrame()
595
+
596
+
597
+ def stock_shareholder_change_ths(symbol: str = "688981") -> pd.DataFrame:
598
+ """
599
+ 同花顺-公司大事-股东持股变动
600
+ https://basic.10jqka.com.cn/new/688981/event.html
601
+ :param symbol: 股票代码
602
+ :type symbol: str
603
+ :return: 同花顺-公司大事-股东持股变动
604
+ :rtype: pandas.DataFrame
605
+ """
606
+ url = f"https://basic.10jqka.com.cn/new/{symbol}/event.html"
607
+ r = requests.get(url, headers=headers)
608
+ r.encoding = "gb2312"
609
+ soup = BeautifulSoup(r.text, features="lxml")
610
+ soup_find = soup.find(name="table", attrs={"class": "m_table data_table_1 m_hl"})
611
+ if soup_find is not None:
612
+ content_list = [item.text.strip() for item in soup_find]
613
+ column_names = content_list[1].split("\n")
614
+ row = (
615
+ content_list[3]
616
+ .replace("\t", "")
617
+ .replace("\n\n", "")
618
+ .replace(" ", "\n")
619
+ .replace(" ", "")
620
+ .replace("\n\n", "\n")
621
+ .split("\n")
622
+ )
623
+ row = [item for item in row if item != ""]
624
+ new_rows = []
625
+ step = len(column_names)
626
+ for i in range(0, len(row), step):
627
+ new_rows.append(row[i: i + step])
628
+ temp_df = pd.DataFrame(new_rows, columns=column_names)
629
+ temp_df.sort_values(by="公告日期", ignore_index=True, inplace=True)
630
+ temp_df["公告日期"] = pd.to_datetime(
631
+ temp_df["公告日期"], errors="coerce"
632
+ ).dt.date
633
+ temp_df.rename(
634
+ columns={
635
+ "变动数量(股)": "变动数量",
636
+ "交易均价(元)": "交易均价",
637
+ "剩余股份总数(股)": "剩余股份总数",
638
+ },
639
+ inplace=True,
640
+ )
641
+ return temp_df
642
+ return pd.DataFrame()
643
+
644
+
184
645
  if __name__ == "__main__":
185
- stock_financial_abstract_ths_df = stock_financial_abstract_ths(
646
+ stock_financial_abstract_new_ths_df = stock_financial_abstract_new_ths(
186
647
  symbol="000063", indicator="按报告期"
187
648
  )
188
- print(stock_financial_abstract_ths_df)
649
+ print(stock_financial_abstract_new_ths_df)
189
650
 
190
- stock_financial_abstract_ths_df = stock_financial_abstract_ths(
651
+ stock_financial_abstract_new_ths_df = stock_financial_abstract_new_ths(
191
652
  symbol="000063", indicator="按年度"
192
653
  )
193
- print(stock_financial_abstract_ths_df)
654
+ print(stock_financial_abstract_new_ths_df)
194
655
 
195
- stock_financial_abstract_ths_df = stock_financial_abstract_ths(
196
- symbol="000063", indicator="按单季度"
656
+ stock_financial_abstract_new_ths_df = stock_financial_abstract_new_ths(
657
+ symbol="000063", indicator="一季度"
197
658
  )
198
- print(stock_financial_abstract_ths_df)
659
+ print(stock_financial_abstract_new_ths_df)
199
660
 
200
- stock_financial_debt_ths_df = stock_financial_debt_ths(
201
- symbol="000063", indicator="按报告期"
661
+ stock_financial_debt_new_ths_df = stock_financial_debt_new_ths(
662
+ symbol="002004", indicator="按报告期"
202
663
  )
203
- print(stock_financial_debt_ths_df)
664
+ print(stock_financial_debt_new_ths_df)
204
665
 
205
- stock_financial_debt_ths_df = stock_financial_debt_ths(
666
+ stock_financial_debt_new_ths_df = stock_financial_debt_new_ths(
206
667
  symbol="000063", indicator="按年度"
207
668
  )
208
- print(stock_financial_debt_ths_df)
669
+ print(stock_financial_debt_new_ths_df)
209
670
 
210
- stock_financial_benefit_ths_df = stock_financial_benefit_ths(
671
+ stock_financial_benefit_new_ths_df = stock_financial_benefit_new_ths(
211
672
  symbol="000063", indicator="按报告期"
212
673
  )
213
- print(stock_financial_benefit_ths_df)
674
+ print(stock_financial_benefit_new_ths_df)
214
675
 
215
- stock_financial_benefit_ths_df = stock_financial_benefit_ths(
676
+ stock_financial_benefit_new_ths_df = stock_financial_benefit_new_ths(
216
677
  symbol="000063", indicator="按年度"
217
678
  )
218
- print(stock_financial_benefit_ths_df)
679
+ print(stock_financial_benefit_new_ths_df)
219
680
 
220
- stock_financial_benefit_ths_df = stock_financial_benefit_ths(
221
- symbol="000063", indicator="按报告期"
681
+ stock_financial_benefit_new_ths_df = stock_financial_benefit_new_ths(
682
+ symbol="000063", indicator="一季度"
222
683
  )
223
- print(stock_financial_benefit_ths_df)
684
+ print(stock_financial_benefit_new_ths_df)
224
685
 
225
- stock_financial_cash_ths_df = stock_financial_cash_ths(
226
- symbol="000063", indicator="按年度"
686
+ stock_financial_cash_new_ths_df = stock_financial_cash_new_ths(
687
+ symbol="000063", indicator="按报告期"
227
688
  )
228
- print(stock_financial_cash_ths_df)
689
+ print(stock_financial_cash_new_ths_df)
229
690
 
230
- stock_financial_cash_ths_df = stock_financial_cash_ths(
691
+ stock_financial_cash_new_ths_df = stock_financial_cash_new_ths(
231
692
  symbol="000063", indicator="按年度"
232
693
  )
233
- print(stock_financial_cash_ths_df)
694
+ print(stock_financial_cash_new_ths_df)
234
695
 
235
- stock_financial_cash_ths_df = stock_financial_cash_ths(
236
- symbol="000063", indicator="按单季度"
696
+ stock_financial_cash_new_ths_df = stock_financial_cash_new_ths(
697
+ symbol="000063", indicator="一季度"
237
698
  )
238
- print(stock_financial_cash_ths_df)
699
+ print(stock_financial_cash_new_ths_df)
700
+
701
+ stock_management_change_ths_df = stock_management_change_ths(symbol="688981")
702
+ print(stock_management_change_ths_df)
703
+
704
+ stock_shareholder_change_ths_df = stock_shareholder_change_ths(symbol="688981")
705
+ print(stock_shareholder_change_ths_df)