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,15 +1,17 @@
1
1
  # -*- coding:utf-8 -*-
2
2
  # !/usr/bin/env python
3
3
  """
4
- Date: 2023/11/13 23:00
4
+ Date: 2025/5/8 20:00
5
5
  Desc: 东方财富-股票-财务分析
6
6
  """
7
+
7
8
  from functools import lru_cache
8
9
 
9
10
  import pandas as pd
10
11
  import requests
11
12
  from bs4 import BeautifulSoup
12
- from tqdm import tqdm
13
+
14
+ from akshare.utils.tqdm import get_tqdm
13
15
 
14
16
 
15
17
  @lru_cache()
@@ -22,7 +24,7 @@ def _stock_balance_sheet_by_report_ctype_em(symbol: str = "SH600519") -> str:
22
24
  :return: 东方财富-股票-财务分析-资产负债表-按报告期-公司类型判断
23
25
  :rtype: str
24
26
  """
25
- url = f"https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/Index"
27
+ url = "https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/Index"
26
28
  params = {"type": "web", "code": symbol.lower()}
27
29
  r = requests.get(url, params=params)
28
30
  soup = BeautifulSoup(r.text, features="lxml")
@@ -52,8 +54,9 @@ def stock_balance_sheet_by_report_em(symbol: str = "SH600519") -> pd.DataFrame:
52
54
  temp_df["REPORT_DATE"] = pd.to_datetime(temp_df["REPORT_DATE"]).dt.date
53
55
  temp_df["REPORT_DATE"] = temp_df["REPORT_DATE"].astype(str)
54
56
  need_date = temp_df["REPORT_DATE"].tolist()
55
- sep_list = [",".join(need_date[i: i + 5]) for i in range(0, len(need_date), 5)]
57
+ sep_list = [",".join(need_date[i : i + 5]) for i in range(0, len(need_date), 5)]
56
58
  big_df = pd.DataFrame()
59
+ tqdm = get_tqdm()
57
60
  for item in tqdm(sep_list, leave=False):
58
61
  url = "https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/zcfzbAjaxNew"
59
62
  params = {
@@ -65,10 +68,12 @@ def stock_balance_sheet_by_report_em(symbol: str = "SH600519") -> pd.DataFrame:
65
68
  }
66
69
  r = requests.get(url, params=params)
67
70
  data_json = r.json()
71
+ if "data" not in data_json.keys():
72
+ break
68
73
  temp_df = pd.DataFrame(data_json["data"])
69
74
  for col in temp_df.columns:
70
75
  if temp_df[col].isnull().all(): # 检查列是否包含 None 或 NaN
71
- temp_df[col] = pd.to_numeric(temp_df[col], errors='coerce')
76
+ temp_df[col] = pd.to_numeric(temp_df[col], errors="coerce")
72
77
  if big_df.empty:
73
78
  big_df = temp_df
74
79
  else:
@@ -96,17 +101,20 @@ def stock_balance_sheet_by_yearly_em(symbol: str = "SH600036") -> pd.DataFrame:
96
101
  data_json = r.json()
97
102
  try:
98
103
  temp_df = pd.DataFrame(data_json["data"])
99
- except:
100
- company_type = 3
104
+ except: # noqa: E722
105
+ company_type = '3'
101
106
  params.update({"companyType": company_type})
102
107
  r = requests.get(url, params=params)
103
108
  data_json = r.json()
104
109
  temp_df = pd.DataFrame(data_json["data"])
105
- temp_df["REPORT_DATE"] = pd.to_datetime(temp_df["REPORT_DATE"], errors="coerce").dt.date
110
+ temp_df["REPORT_DATE"] = pd.to_datetime(
111
+ temp_df["REPORT_DATE"], errors="coerce"
112
+ ).dt.date
106
113
  temp_df["REPORT_DATE"] = temp_df["REPORT_DATE"].astype(str)
107
114
  need_date = temp_df["REPORT_DATE"].tolist()
108
- sep_list = [",".join(need_date[i: i + 5]) for i in range(0, len(need_date), 5)]
115
+ sep_list = [",".join(need_date[i : i + 5]) for i in range(0, len(need_date), 5)]
109
116
  big_df = pd.DataFrame()
117
+ tqdm = get_tqdm()
110
118
  for item in tqdm(sep_list, leave=False):
111
119
  url = "https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/zcfzbAjaxNew"
112
120
  params = {
@@ -118,10 +126,12 @@ def stock_balance_sheet_by_yearly_em(symbol: str = "SH600036") -> pd.DataFrame:
118
126
  }
119
127
  r = requests.get(url, params=params)
120
128
  data_json = r.json()
129
+ if "data" not in data_json.keys():
130
+ break
121
131
  temp_df = pd.DataFrame(data_json["data"])
122
132
  for col in temp_df.columns:
123
133
  if temp_df[col].isnull().all(): # 检查列是否包含 None 或 NaN
124
- temp_df[col] = pd.to_numeric(temp_df[col], errors='coerce')
134
+ temp_df[col] = pd.to_numeric(temp_df[col], errors="coerce")
125
135
  if big_df.empty:
126
136
  big_df = temp_df
127
137
  else:
@@ -151,8 +161,9 @@ def stock_profit_sheet_by_report_em(symbol: str = "SH600519") -> pd.DataFrame:
151
161
  temp_df["REPORT_DATE"] = pd.to_datetime(temp_df["REPORT_DATE"]).dt.date
152
162
  temp_df["REPORT_DATE"] = temp_df["REPORT_DATE"].astype(str)
153
163
  need_date = temp_df["REPORT_DATE"].tolist()
154
- sep_list = [",".join(need_date[i: i + 5]) for i in range(0, len(need_date), 5)]
164
+ sep_list = [",".join(need_date[i : i + 5]) for i in range(0, len(need_date), 5)]
155
165
  big_df = pd.DataFrame()
166
+ tqdm = get_tqdm()
156
167
  for item in tqdm(sep_list, leave=False):
157
168
  url = "https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/lrbAjaxNew"
158
169
  params = {
@@ -164,10 +175,12 @@ def stock_profit_sheet_by_report_em(symbol: str = "SH600519") -> pd.DataFrame:
164
175
  }
165
176
  r = requests.get(url, params=params)
166
177
  data_json = r.json()
178
+ if "data" not in data_json.keys():
179
+ break
167
180
  temp_df = pd.DataFrame(data_json["data"])
168
181
  for col in temp_df.columns:
169
182
  if temp_df[col].isnull().all(): # 检查列是否包含 None 或 NaN
170
- temp_df[col] = pd.to_numeric(temp_df[col], errors='coerce')
183
+ temp_df[col] = pd.to_numeric(temp_df[col], errors="coerce")
171
184
  if big_df.empty:
172
185
  big_df = temp_df
173
186
  else:
@@ -197,8 +210,9 @@ def stock_profit_sheet_by_yearly_em(symbol: str = "SH600519") -> pd.DataFrame:
197
210
  temp_df["REPORT_DATE"] = pd.to_datetime(temp_df["REPORT_DATE"]).dt.date
198
211
  temp_df["REPORT_DATE"] = temp_df["REPORT_DATE"].astype(str)
199
212
  need_date = temp_df["REPORT_DATE"].tolist()
200
- sep_list = [",".join(need_date[i: i + 5]) for i in range(0, len(need_date), 5)]
213
+ sep_list = [",".join(need_date[i : i + 5]) for i in range(0, len(need_date), 5)]
201
214
  big_df = pd.DataFrame()
215
+ tqdm = get_tqdm()
202
216
  for item in tqdm(sep_list, leave=False):
203
217
  url = "https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/lrbAjaxNew"
204
218
  params = {
@@ -210,10 +224,12 @@ def stock_profit_sheet_by_yearly_em(symbol: str = "SH600519") -> pd.DataFrame:
210
224
  }
211
225
  r = requests.get(url, params=params)
212
226
  data_json = r.json()
227
+ if "data" not in data_json.keys():
228
+ break
213
229
  temp_df = pd.DataFrame(data_json["data"])
214
230
  for col in temp_df.columns:
215
231
  if temp_df[col].isnull().all(): # 检查列是否包含 None 或 NaN
216
- temp_df[col] = pd.to_numeric(temp_df[col], errors='coerce')
232
+ temp_df[col] = pd.to_numeric(temp_df[col], errors="coerce")
217
233
  if big_df.empty:
218
234
  big_df = temp_df
219
235
  else:
@@ -222,7 +238,7 @@ def stock_profit_sheet_by_yearly_em(symbol: str = "SH600519") -> pd.DataFrame:
222
238
 
223
239
 
224
240
  def stock_profit_sheet_by_quarterly_em(
225
- symbol: str = "SH600519",
241
+ symbol: str = "SH600519",
226
242
  ) -> pd.DataFrame:
227
243
  """
228
244
  东方财富-股票-财务分析-利润表-按单季度
@@ -245,8 +261,9 @@ def stock_profit_sheet_by_quarterly_em(
245
261
  temp_df["REPORT_DATE"] = pd.to_datetime(temp_df["REPORT_DATE"]).dt.date
246
262
  temp_df["REPORT_DATE"] = temp_df["REPORT_DATE"].astype(str)
247
263
  need_date = temp_df["REPORT_DATE"].tolist()
248
- sep_list = [",".join(need_date[i: i + 5]) for i in range(0, len(need_date), 5)]
264
+ sep_list = [",".join(need_date[i : i + 5]) for i in range(0, len(need_date), 5)]
249
265
  big_df = pd.DataFrame()
266
+ tqdm = get_tqdm()
250
267
  for item in tqdm(sep_list, leave=False):
251
268
  url = "https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/lrbAjaxNew"
252
269
  params = {
@@ -258,10 +275,12 @@ def stock_profit_sheet_by_quarterly_em(
258
275
  }
259
276
  r = requests.get(url, params=params)
260
277
  data_json = r.json()
278
+ if "data" not in data_json.keys():
279
+ break
261
280
  temp_df = pd.DataFrame(data_json["data"])
262
281
  for col in temp_df.columns:
263
282
  if temp_df[col].isnull().all(): # 检查列是否包含 None 或 NaN
264
- temp_df[col] = pd.to_numeric(temp_df[col], errors='coerce')
283
+ temp_df[col] = pd.to_numeric(temp_df[col], errors="coerce")
265
284
  if big_df.empty:
266
285
  big_df = temp_df
267
286
  else:
@@ -270,7 +289,7 @@ def stock_profit_sheet_by_quarterly_em(
270
289
 
271
290
 
272
291
  def stock_cash_flow_sheet_by_report_em(
273
- symbol: str = "SH600519",
292
+ symbol: str = "SH600519",
274
293
  ) -> pd.DataFrame:
275
294
  """
276
295
  东方财富-股票-财务分析-现金流量表-按报告期
@@ -293,8 +312,9 @@ def stock_cash_flow_sheet_by_report_em(
293
312
  temp_df["REPORT_DATE"] = pd.to_datetime(temp_df["REPORT_DATE"]).dt.date
294
313
  temp_df["REPORT_DATE"] = temp_df["REPORT_DATE"].astype(str)
295
314
  need_date = temp_df["REPORT_DATE"].tolist()
296
- sep_list = [",".join(need_date[i: i + 5]) for i in range(0, len(need_date), 5)]
315
+ sep_list = [",".join(need_date[i : i + 5]) for i in range(0, len(need_date), 5)]
297
316
  big_df = pd.DataFrame()
317
+ tqdm = get_tqdm()
298
318
  for item in tqdm(sep_list, leave=False):
299
319
  url = "https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/xjllbAjaxNew"
300
320
  params = {
@@ -306,10 +326,12 @@ def stock_cash_flow_sheet_by_report_em(
306
326
  }
307
327
  r = requests.get(url, params=params)
308
328
  data_json = r.json()
329
+ if "data" not in data_json.keys():
330
+ break
309
331
  temp_df = pd.DataFrame(data_json["data"])
310
332
  for col in temp_df.columns:
311
333
  if temp_df[col].isnull().all(): # 检查列是否包含 None 或 NaN
312
- temp_df[col] = pd.to_numeric(temp_df[col], errors='coerce')
334
+ temp_df[col] = pd.to_numeric(temp_df[col], errors="coerce")
313
335
  if big_df.empty:
314
336
  big_df = temp_df
315
337
  else:
@@ -318,7 +340,7 @@ def stock_cash_flow_sheet_by_report_em(
318
340
 
319
341
 
320
342
  def stock_cash_flow_sheet_by_yearly_em(
321
- symbol: str = "SH600519",
343
+ symbol: str = "SH600519",
322
344
  ) -> pd.DataFrame:
323
345
  """
324
346
  东方财富-股票-财务分析-现金流量表-按年度
@@ -341,8 +363,9 @@ def stock_cash_flow_sheet_by_yearly_em(
341
363
  temp_df["REPORT_DATE"] = pd.to_datetime(temp_df["REPORT_DATE"]).dt.date
342
364
  temp_df["REPORT_DATE"] = temp_df["REPORT_DATE"].astype(str)
343
365
  need_date = temp_df["REPORT_DATE"].tolist()
344
- sep_list = [",".join(need_date[i: i + 5]) for i in range(0, len(need_date), 5)]
366
+ sep_list = [",".join(need_date[i : i + 5]) for i in range(0, len(need_date), 5)]
345
367
  big_df = pd.DataFrame()
368
+ tqdm = get_tqdm()
346
369
  for item in tqdm(sep_list, leave=False):
347
370
  url = "https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/xjllbAjaxNew"
348
371
  params = {
@@ -354,10 +377,12 @@ def stock_cash_flow_sheet_by_yearly_em(
354
377
  }
355
378
  r = requests.get(url, params=params)
356
379
  data_json = r.json()
380
+ if "data" not in data_json.keys():
381
+ break
357
382
  temp_df = pd.DataFrame(data_json["data"])
358
383
  for col in temp_df.columns:
359
384
  if temp_df[col].isnull().all(): # 检查列是否包含 None 或 NaN
360
- temp_df[col] = pd.to_numeric(temp_df[col], errors='coerce')
385
+ temp_df[col] = pd.to_numeric(temp_df[col], errors="coerce")
361
386
  if big_df.empty:
362
387
  big_df = temp_df
363
388
  else:
@@ -366,7 +391,7 @@ def stock_cash_flow_sheet_by_yearly_em(
366
391
 
367
392
 
368
393
  def stock_cash_flow_sheet_by_quarterly_em(
369
- symbol: str = "SH600519",
394
+ symbol: str = "SH600519",
370
395
  ) -> pd.DataFrame:
371
396
  """
372
397
  东方财富-股票-财务分析-现金流量表-按单季度
@@ -389,8 +414,9 @@ def stock_cash_flow_sheet_by_quarterly_em(
389
414
  temp_df["REPORT_DATE"] = pd.to_datetime(temp_df["REPORT_DATE"]).dt.date
390
415
  temp_df["REPORT_DATE"] = temp_df["REPORT_DATE"].astype(str)
391
416
  need_date = temp_df["REPORT_DATE"].tolist()
392
- sep_list = [",".join(need_date[i: i + 5]) for i in range(0, len(need_date), 5)]
417
+ sep_list = [",".join(need_date[i : i + 5]) for i in range(0, len(need_date), 5)]
393
418
  big_df = pd.DataFrame()
419
+ tqdm = get_tqdm()
394
420
  for item in tqdm(sep_list, leave=False):
395
421
  url = "https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/xjllbAjaxNew"
396
422
  params = {
@@ -402,10 +428,12 @@ def stock_cash_flow_sheet_by_quarterly_em(
402
428
  }
403
429
  r = requests.get(url, params=params)
404
430
  data_json = r.json()
431
+ if "data" not in data_json.keys():
432
+ break
405
433
  temp_df = pd.DataFrame(data_json["data"])
406
434
  for col in temp_df.columns:
407
435
  if temp_df[col].isnull().all(): # 检查列是否包含 None 或 NaN
408
- temp_df[col] = pd.to_numeric(temp_df[col], errors='coerce')
436
+ temp_df[col] = pd.to_numeric(temp_df[col], errors="coerce")
409
437
  if big_df.empty:
410
438
  big_df = temp_df
411
439
  else:
@@ -424,21 +452,21 @@ def __get_report_date_list_delisted_em(symbol: str = "SZ000013") -> list:
424
452
  """
425
453
  url = "https://datacenter.eastmoney.com/securities/api/data/get"
426
454
  params = {
427
- 'type': 'RPT_F10_FINANCE_GINCOME',
428
- 'sty': 'SECURITY_CODE,REPORT_DATE,REPORT_TYPE,REPORT_DATE_NAME',
429
- 'filter': f'(SECURITY_CODE="{symbol[2:]}")',
430
- 'p': '1',
431
- 'ps': '200',
432
- 'sr': '-1',
433
- 'st': 'REPORT_DATE',
434
- 'source': 'HSF10',
435
- 'client': 'PC',
436
- 'v': '05767841728614413'
455
+ "type": "RPT_F10_FINANCE_GINCOME",
456
+ "sty": "SECUCODE,SECURITY_CODE,REPORT_DATE,REPORT_TYPE,REPORT_DATE_NAME",
457
+ "filter": f'(SECUCODE="{symbol[2:]}.{symbol[:2]}")',
458
+ "p": "1",
459
+ "ps": "200",
460
+ "sr": "-1",
461
+ "st": "REPORT_DATE",
462
+ "source": "HSF10",
463
+ "client": "PC",
464
+ "v": "07306678536291241",
437
465
  }
438
466
  r = requests.get(url, params=params)
439
467
  data_json = r.json()
440
- temp_df = pd.DataFrame(data_json['result']["data"])
441
- report_date_list = [item[0] for item in temp_df['REPORT_DATE'].str.split(" ")]
468
+ temp_df = pd.DataFrame(data_json["result"]["data"])
469
+ report_date_list = [item[0] for item in temp_df["REPORT_DATE"].str.split(" ")]
442
470
  report_date_list = ["'" + item + "'" for item in report_date_list]
443
471
  return report_date_list
444
472
 
@@ -455,22 +483,24 @@ def stock_balance_sheet_by_report_delisted_em(symbol: str = "SZ000013") -> pd.Da
455
483
  report_date_list = __get_report_date_list_delisted_em(symbol)
456
484
  url = "https://datacenter.eastmoney.com/securities/api/data/get"
457
485
  params = {
458
- 'type': 'RPT_F10_FINANCE_GBALANCE',
459
- 'sty': 'F10_FINANCE_GBALANCE',
460
- 'filter': f"""(SECUCODE="{symbol[2:]}.{symbol[:2]}")(REPORT_DATE in ({','.join(report_date_list)}))""",
461
- 'p': '1',
462
- 'ps': '200',
463
- 'sr': '-1',
464
- 'st': 'REPORT_DATE',
465
- 'source': 'HSF10',
466
- 'client': 'PC',
467
- 'v': '05767841728614413'
486
+ "type": "RPT_F10_FINANCE_GBALANCE",
487
+ "sty": "F10_FINANCE_GBALANCE",
488
+ "filter": f"""(SECUCODE="{symbol[2:]}.{symbol[:2]}")(REPORT_DATE in ({','.join(report_date_list)}))""",
489
+ "p": "1",
490
+ "ps": "200",
491
+ "sr": "-1",
492
+ "st": "REPORT_DATE",
493
+ "source": "HSF10",
494
+ "client": "PC",
495
+ "v": "05767841728614413",
468
496
  }
469
497
  r = requests.get(url, params=params)
470
498
  data_json = r.json()
471
- temp_df = pd.DataFrame(data_json['result']["data"])
499
+ temp_df = pd.DataFrame(data_json["result"]["data"])
472
500
  temp_df["REPORT_DATE"] = pd.to_datetime(temp_df["REPORT_DATE"]).dt.date
473
- temp_df.sort_values(by=['REPORT_DATE'], ascending=False, inplace=True, ignore_index=True)
501
+ temp_df.sort_values(
502
+ by=["REPORT_DATE"], ascending=False, inplace=True, ignore_index=True
503
+ )
474
504
  return temp_df
475
505
 
476
506
 
@@ -486,26 +516,30 @@ def stock_profit_sheet_by_report_delisted_em(symbol: str = "SZ000013") -> pd.Dat
486
516
  report_date_list = __get_report_date_list_delisted_em(symbol)
487
517
  url = "https://datacenter.eastmoney.com/securities/api/data/get"
488
518
  params = {
489
- 'type': 'RPT_F10_FINANCE_GINCOME',
490
- 'sty': 'APP_F10_GINCOME',
491
- 'filter': f"""(SECUCODE="{symbol[2:]}.{symbol[:2]}")(REPORT_DATE in ({','.join(report_date_list)}))""",
492
- 'p': '1',
493
- 'ps': '200',
494
- 'sr': '-1',
495
- 'st': 'REPORT_DATE',
496
- 'source': 'HSF10',
497
- 'client': 'PC',
498
- 'v': '05767841728614413'
519
+ "type": "RPT_F10_FINANCE_GINCOME",
520
+ "sty": "APP_F10_GINCOME",
521
+ "filter": f"""(SECUCODE="{symbol[2:]}.{symbol[:2]}")(REPORT_DATE in ({','.join(report_date_list)}))""",
522
+ "p": "1",
523
+ "ps": "200",
524
+ "sr": "-1",
525
+ "st": "REPORT_DATE",
526
+ "source": "HSF10",
527
+ "client": "PC",
528
+ "v": "05767841728614413",
499
529
  }
500
530
  r = requests.get(url, params=params)
501
531
  data_json = r.json()
502
- temp_df = pd.DataFrame(data_json['result']["data"])
532
+ temp_df = pd.DataFrame(data_json["result"]["data"])
503
533
  temp_df["REPORT_DATE"] = pd.to_datetime(temp_df["REPORT_DATE"]).dt.date
504
- temp_df.sort_values(by=['REPORT_DATE'], ascending=False, inplace=True, ignore_index=True)
534
+ temp_df.sort_values(
535
+ by=["REPORT_DATE"], ascending=False, inplace=True, ignore_index=True
536
+ )
505
537
  return temp_df
506
538
 
507
539
 
508
- def stock_cash_flow_sheet_by_report_delisted_em(symbol: str = "SZ000013") -> pd.DataFrame:
540
+ def stock_cash_flow_sheet_by_report_delisted_em(
541
+ symbol: str = "SZ000013",
542
+ ) -> pd.DataFrame:
509
543
  """
510
544
  东方财富-股票-财务分析-现金流量表-已退市股票-按报告期
511
545
  https://emweb.securities.eastmoney.com/pc_hsf10/pages/index.html?type=web&code=SZ000013#/cwfx/xjllb
@@ -517,22 +551,24 @@ def stock_cash_flow_sheet_by_report_delisted_em(symbol: str = "SZ000013") -> pd.
517
551
  report_date_list = __get_report_date_list_delisted_em(symbol)
518
552
  url = "https://datacenter.eastmoney.com/securities/api/data/get"
519
553
  params = {
520
- 'type': 'RPT_F10_FINANCE_GCASHFLOW',
521
- 'sty': 'APP_F10_GCASHFLOW',
522
- 'filter': f"""(SECUCODE="{symbol[2:]}.{symbol[:2]}")(REPORT_DATE in ({','.join(report_date_list)}))""",
523
- 'p': '1',
524
- 'ps': '200',
525
- 'sr': '-1',
526
- 'st': 'REPORT_DATE',
527
- 'source': 'HSF10',
528
- 'client': 'PC',
529
- 'v': '05767841728614413'
554
+ "type": "RPT_F10_FINANCE_GCASHFLOW",
555
+ "sty": "APP_F10_GCASHFLOW",
556
+ "filter": f"""(SECUCODE="{symbol[2:]}.{symbol[:2]}")(REPORT_DATE in ({','.join(report_date_list)}))""",
557
+ "p": "1",
558
+ "ps": "200",
559
+ "sr": "-1",
560
+ "st": "REPORT_DATE",
561
+ "source": "HSF10",
562
+ "client": "PC",
563
+ "v": "05767841728614413",
530
564
  }
531
565
  r = requests.get(url, params=params)
532
566
  data_json = r.json()
533
- temp_df = pd.DataFrame(data_json['result']["data"])
567
+ temp_df = pd.DataFrame(data_json["result"]["data"])
534
568
  temp_df["REPORT_DATE"] = pd.to_datetime(temp_df["REPORT_DATE"]).dt.date
535
- temp_df.sort_values(by=['REPORT_DATE'], ascending=False, inplace=True, ignore_index=True)
569
+ temp_df.sort_values(
570
+ by=["REPORT_DATE"], ascending=False, inplace=True, ignore_index=True
571
+ )
536
572
  return temp_df
537
573
 
538
574
 
@@ -577,11 +613,17 @@ if __name__ == "__main__":
577
613
  )
578
614
  print(stock_cash_flow_sheet_by_quarterly_em_df)
579
615
 
580
- stock_balance_sheet_by_report_delisted_em_df = stock_balance_sheet_by_report_delisted_em(symbol="SZ000013")
616
+ stock_balance_sheet_by_report_delisted_em_df = (
617
+ stock_balance_sheet_by_report_delisted_em(symbol="SZ000013")
618
+ )
581
619
  print(stock_balance_sheet_by_report_delisted_em_df)
582
620
 
583
- stock_profit_sheet_by_report_delisted_em_df = stock_profit_sheet_by_report_delisted_em(symbol="SZ000013")
621
+ stock_profit_sheet_by_report_delisted_em_df = (
622
+ stock_profit_sheet_by_report_delisted_em(symbol="SZ000013")
623
+ )
584
624
  print(stock_profit_sheet_by_report_delisted_em_df)
585
625
 
586
- stock_cash_flow_sheet_by_report_delisted_em_df = stock_cash_flow_sheet_by_report_delisted_em(symbol="SZ000013")
626
+ stock_cash_flow_sheet_by_report_delisted_em_df = (
627
+ stock_cash_flow_sheet_by_report_delisted_em(symbol="SZ000013")
628
+ )
587
629
  print(stock_cash_flow_sheet_by_report_delisted_em_df)
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/4/11 20:40
4
+ Date: 2025/10/30 15:00
5
5
  Desc: 全部A股-等权重市盈率、中位数市盈率
6
6
  https://www.legulegu.com/stockdata/a-ttm-lyr
7
7
  """
@@ -14,27 +14,36 @@ from akshare.stock_feature.stock_a_indicator import get_token_lg, get_cookie_csr
14
14
  def stock_a_ttm_lyr() -> pd.DataFrame:
15
15
  """
16
16
  全部 A 股-等权重市盈率、中位数市盈率
17
- https://www.legulegu.com/stockdata/a-ttm-lyr
18
17
  :return: 全部A股-等权重市盈率、中位数市盈率
19
18
  :rtype: pandas.DataFrame
20
19
  """
20
+
21
21
  url = "https://legulegu.com/api/stock-data/market-ttm-lyr"
22
22
  params = {
23
23
  "marketId": "5",
24
24
  "token": get_token_lg(),
25
25
  }
26
- r = requests.get(
26
+ # 获取 cookie 和 headers
27
+ csrf_data = get_cookie_csrf(url="https://www.legulegu.com/stockdata/a-ttm-lyr")
28
+ # 使用返回的 headers(已经是副本)
29
+ request_headers = csrf_data['headers'].copy()
30
+ request_headers.update({
31
+ "host": "www.legulegu.com",
32
+ "referer": "https://www.legulegu.com/stockdata/a-ttm-lyr",
33
+ })
34
+ # 使用独立的 session
35
+ session = requests.Session()
36
+ r = session.get(
27
37
  url,
28
38
  params=params,
29
- **get_cookie_csrf(url="https://www.legulegu.com/stockdata/a-ttm-lyr")
39
+ cookies=csrf_data['cookies'],
40
+ headers=request_headers,
30
41
  )
31
42
  data_json = r.json()
32
43
  temp_df = pd.DataFrame(data_json["data"])
33
- temp_df["date"] = (
34
- pd.to_datetime(temp_df["date"], unit="ms", utc=True)
35
- .dt.tz_convert("Asia/Shanghai")
36
- .dt.date
37
- )
44
+ temp_df["date"] = pd.to_datetime(temp_df["date"], errors="coerce").dt.date
45
+ # 关闭 session
46
+ session.close()
38
47
  return temp_df
39
48
 
40
49
 
@@ -0,0 +1,83 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ Date: 2024/11/26 18:00
5
+ Desc: 东方财富网-数据中心-估值分析-每日互动-每日互动-估值分析
6
+ https://data.eastmoney.com/gzfx/detail/300766.html
7
+ """
8
+
9
+ import pandas as pd
10
+
11
+ from akshare.request import make_request_with_retry_json
12
+
13
+
14
+ def stock_value_em(symbol: str = "300766") -> pd.DataFrame:
15
+ """
16
+ 东方财富网-数据中心-估值分析-每日互动-每日互动-估值分析
17
+ https://data.eastmoney.com/gzfx/detail/300766.html
18
+ :param symbol: 股票代码
19
+ :type symbol: str
20
+ :return: 估值分析
21
+ :rtype: pandas.DataFrame
22
+ """
23
+ url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
24
+ params = {
25
+ "sortColumns": "TRADE_DATE",
26
+ "sortTypes": "-1",
27
+ "pageSize": "5000",
28
+ "pageNumber": "1",
29
+ "reportName": "RPT_VALUEANALYSIS_DET",
30
+ "columns": "ALL",
31
+ "quoteColumns": "",
32
+ "source": "WEB",
33
+ "client": "WEB",
34
+ "filter": f'(SECURITY_CODE="{symbol}")',
35
+ }
36
+ data_json = make_request_with_retry_json(url, params=params)
37
+ temp_json = data_json["result"]["data"]
38
+ temp_df = pd.DataFrame(temp_json)
39
+ temp_df.rename(
40
+ columns={
41
+ "TRADE_DATE": "数据日期",
42
+ "CLOSE_PRICE": "当日收盘价",
43
+ "CHANGE_RATE": "当日涨跌幅",
44
+ "TOTAL_MARKET_CAP": "总市值",
45
+ "NOTLIMITED_MARKETCAP_A": "流通市值",
46
+ "TOTAL_SHARES": "总股本",
47
+ "FREE_SHARES_A": "流通股本",
48
+ "PE_TTM": "PE(TTM)",
49
+ "PE_LAR": "PE(静)",
50
+ "PB_MRQ": "市净率",
51
+ "PEG_CAR": "PEG值",
52
+ "PCF_OCF_TTM": "市现率",
53
+ "PS_TTM": "市销率",
54
+ },
55
+ inplace=True,
56
+ )
57
+ temp_df = temp_df[
58
+ [
59
+ "数据日期",
60
+ "当日收盘价",
61
+ "当日涨跌幅",
62
+ "总市值",
63
+ "流通市值",
64
+ "总股本",
65
+ "流通股本",
66
+ "PE(TTM)",
67
+ "PE(静)",
68
+ "市净率",
69
+ "PEG值",
70
+ "市现率",
71
+ "市销率",
72
+ ]
73
+ ]
74
+ temp_df["数据日期"] = pd.to_datetime(temp_df["数据日期"], errors="coerce").dt.date
75
+ for item in temp_df.columns[1:]:
76
+ temp_df[item] = pd.to_numeric(temp_df[item], errors="coerce")
77
+ temp_df.sort_values(by="数据日期", ignore_index=True, inplace=True)
78
+ return temp_df
79
+
80
+
81
+ if __name__ == "__main__":
82
+ stock_value_em_df = stock_value_em(symbol="300766")
83
+ print(stock_value_em_df)