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
@@ -5,6 +5,7 @@ Date: 2024/2/26 15:10
5
5
  Desc: 腾讯财经-A+H股数据, 实时行情数据和历史行情数据(后复权)
6
6
  https://stockapp.finance.qq.com/mstats/#mod=list&id=hk_ah&module=HK&type=AH&sort=3&page=3&max=20
7
7
  """
8
+
8
9
  import random
9
10
 
10
11
  import pandas as pd
@@ -31,9 +32,7 @@ def _get_zh_stock_ah_page_count() -> int:
31
32
  hk_payload_copy = hk_payload.copy()
32
33
  hk_payload_copy.update({"reqPage": 1})
33
34
  r = requests.get(hk_url, params=hk_payload_copy, headers=hk_headers)
34
- data_json = demjson.decode(
35
- r.text[r.text.find("{"): r.text.rfind("}") + 1]
36
- )
35
+ data_json = demjson.decode(r.text[r.text.find("{") : r.text.rfind("}") + 1])
37
36
  page_count = data_json["data"]["page_count"]
38
37
  return page_count
39
38
 
@@ -45,15 +44,13 @@ def stock_zh_ah_spot() -> pd.DataFrame:
45
44
  :return: 腾讯财经-港股-AH-实时行情
46
45
  :rtype: pandas.DataFrame
47
46
  """
48
- big_df = pd.DataFrame()
49
47
  page_count = _get_zh_stock_ah_page_count()
48
+ big_df = pd.DataFrame()
50
49
  tqdm = get_tqdm()
51
50
  for i in tqdm(range(0, page_count), leave=False):
52
51
  hk_payload.update({"reqPage": i})
53
52
  r = requests.get(hk_url, params=hk_payload, headers=hk_headers)
54
- data_json = demjson.decode(
55
- r.text[r.text.find("{"): r.text.rfind("}") + 1]
56
- )
53
+ data_json = demjson.decode(r.text[r.text.find("{") : r.text.rfind("}") + 1])
57
54
  big_df = pd.concat(
58
55
  objs=[
59
56
  big_df,
@@ -123,9 +120,7 @@ def stock_zh_ah_name() -> pd.DataFrame:
123
120
  for i in tqdm(range(0, page_count), leave=False):
124
121
  hk_payload.update({"reqPage": i})
125
122
  r = requests.get(hk_url, params=hk_payload, headers=hk_headers)
126
- data_json = demjson.decode(
127
- r.text[r.text.find("{"): r.text.rfind("}") + 1]
128
- )
123
+ data_json = demjson.decode(r.text[r.text.find("{") : r.text.rfind("}") + 1])
129
124
  big_df = pd.concat(
130
125
  objs=[
131
126
  big_df,
@@ -160,10 +155,10 @@ def stock_zh_ah_name() -> pd.DataFrame:
160
155
 
161
156
 
162
157
  def stock_zh_ah_daily(
163
- symbol: str = "02318",
164
- start_year: str = "2000",
165
- end_year: str = "2019",
166
- adjust: str = "",
158
+ symbol: str = "02318",
159
+ start_year: str = "2000",
160
+ end_year: str = "2019",
161
+ adjust: str = "",
167
162
  ) -> pd.DataFrame:
168
163
  """
169
164
  腾讯财经-港股-AH-股票历史行情
@@ -187,9 +182,7 @@ def stock_zh_ah_daily(
187
182
  hk_stock_payload_copy.update({"_var": f"kline_day{adjust}{year}"})
188
183
  if adjust == "":
189
184
  hk_stock_payload_copy.update(
190
- {
191
- "param": f"hk{symbol},day,{year}-01-01,{int(year) + 1}-12-31,640,"
192
- }
185
+ {"param": f"hk{symbol},day,{year}-01-01,{int(year) + 1}-12-31,640,"}
193
186
  )
194
187
  else:
195
188
  hk_stock_payload_copy.update(
@@ -221,17 +214,13 @@ def stock_zh_ah_daily(
221
214
  params=hk_stock_payload_copy,
222
215
  headers=hk_stock_headers,
223
216
  )
224
- data_json = demjson.decode(
225
- r.text[r.text.find("{"): r.text.rfind("}") + 1]
226
- )
217
+ data_json = demjson.decode(r.text[r.text.find("{") : r.text.rfind("}") + 1])
227
218
  try:
228
219
  if adjust == "":
229
220
  temp_df = pd.DataFrame(data_json["data"][f"hk{symbol}"]["day"])
230
221
  else:
231
- temp_df = pd.DataFrame(
232
- data_json["data"][f"hk{symbol}"][f"{adjust}day"]
233
- )
234
- except:
222
+ temp_df = pd.DataFrame(data_json["data"][f"hk{symbol}"][f"{adjust}day"])
223
+ except: # noqa
235
224
  continue
236
225
  if adjust != "" and not temp_df.empty:
237
226
  temp_df.columns = [
@@ -248,8 +237,16 @@ def stock_zh_ah_daily(
248
237
  temp_df = temp_df[["日期", "开盘", "收盘", "最高", "最低", "成交量"]]
249
238
  elif not temp_df.empty:
250
239
  try:
251
- temp_df.columns = ["日期", "开盘", "收盘", "最高", "最低", "成交量", "_"]
252
- except:
240
+ temp_df.columns = [
241
+ "日期",
242
+ "开盘",
243
+ "收盘",
244
+ "最高",
245
+ "最低",
246
+ "成交量",
247
+ "_",
248
+ ]
249
+ except: # noqa
253
250
  temp_df.columns = ["日期", "开盘", "收盘", "最高", "最低", "成交量"]
254
251
  temp_df = temp_df[["日期", "开盘", "收盘", "最高", "最低", "成交量"]]
255
252
  big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
@@ -1,17 +1,18 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/7/20 13:28
4
+ Date: 2024/7/22 18:30
5
5
  Desc: 新浪财经-B股-实时行情数据和历史行情数据(包含前复权和后复权因子)
6
6
  https://finance.sina.com.cn/realstock/company/sh689009/nc.shtml
7
7
  """
8
+
8
9
  import json
9
10
  import re
10
11
  from functools import lru_cache
11
12
 
12
13
  import pandas as pd
13
14
  import requests
14
- from py_mini_racer import py_mini_racer
15
+ import py_mini_racer
15
16
 
16
17
  from akshare.stock.cons import (
17
18
  zh_sina_a_stock_url,
@@ -32,7 +33,10 @@ def _get_zh_b_page_count() -> int:
32
33
  :return: 需要采集的股票总页数
33
34
  :rtype: int
34
35
  """
35
- url = "https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeStockCount?node=hs_b"
36
+ url = (
37
+ "https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/"
38
+ "Market_Center.getHQNodeStockCount?node=hs_b"
39
+ )
36
40
  r = requests.get(url)
37
41
  page_count = int(re.findall(re.compile(r"\d+"), r.text)[0]) / 80
38
42
  if isinstance(page_count, int):
@@ -44,7 +48,7 @@ def _get_zh_b_page_count() -> int:
44
48
  def stock_zh_b_spot() -> pd.DataFrame:
45
49
  """
46
50
  新浪财经-所有 B 股的实时行情数据; 重复运行本函数会被新浪暂时封 IP
47
- https://vip.stock.finance.sina.com.cn/mkt/#qbgg_hk
51
+ https://vip.stock.finance.sina.com.cn/mkt/#hs_b
48
52
  :return: 所有股票的实时行情数据
49
53
  :rtype: pandas.DataFrame
50
54
  """
@@ -63,7 +67,7 @@ def stock_zh_b_spot() -> pd.DataFrame:
63
67
  zh_sina_stock_payload_copy.update({"page": page})
64
68
  r = requests.get(zh_sina_a_stock_url, params=zh_sina_stock_payload_copy)
65
69
  data_json = demjson.decode(r.text)
66
- big_df = pd.concat([big_df, pd.DataFrame(data_json)], ignore_index=True)
70
+ big_df = pd.concat(objs=[big_df, pd.DataFrame(data_json)], ignore_index=True)
67
71
  big_df.columns = [
68
72
  "代码",
69
73
  "_",
@@ -125,14 +129,14 @@ def stock_zh_b_daily(
125
129
  ) -> pd.DataFrame:
126
130
  """
127
131
  新浪财经-B 股-个股的历史行情数据, 大量抓取容易封 IP
128
- https://finance.sina.com.cn/realstock/company/sh689009/nc.shtml
132
+ https://finance.sina.com.cn/realstock/company/sh900901/nc.shtml
129
133
  :param start_date: 20201103; 开始日期
130
134
  :type start_date: str
131
135
  :param end_date: 20201103; 结束日期
132
136
  :type end_date: str
133
137
  :param symbol: sh600000
134
138
  :type symbol: str
135
- :param adjust: 默认为空: 返回不复权的数据; qfq: 返回前复权后的数据; hfq: 返回后复权后的数据; hfq-factor: 返回后复权因子; hfq-factor: 返回前复权因子
139
+ :param adjust: 默认为空: 返回不复权的数据; qfq: 返回前复权后的数据; hfq: 返回后复权后的数据; hfq-factor: 返回后复权因子; qfq-factor: 返回前复权因子
136
140
  :type adjust: str
137
141
  :return: specific data
138
142
  :rtype: pandas.DataFrame
@@ -140,9 +144,9 @@ def stock_zh_b_daily(
140
144
 
141
145
  def _fq_factor(method: str) -> pd.DataFrame:
142
146
  if method == "hfq":
143
- res = requests.get(zh_sina_a_stock_hfq_url.format(symbol))
147
+ r = requests.get(zh_sina_a_stock_hfq_url.format(symbol))
144
148
  hfq_factor_df = pd.DataFrame(
145
- eval(res.text.split("=")[1].split("\n")[0])["data"]
149
+ eval(r.text.split("=")[1].split("\n")[0])["data"]
146
150
  )
147
151
  if hfq_factor_df.shape[0] == 0:
148
152
  raise ValueError("sina hfq factor not available")
@@ -152,9 +156,9 @@ def stock_zh_b_daily(
152
156
  hfq_factor_df.reset_index(inplace=True)
153
157
  return hfq_factor_df
154
158
  else:
155
- res = requests.get(zh_sina_a_stock_qfq_url.format(symbol))
159
+ r = requests.get(zh_sina_a_stock_qfq_url.format(symbol))
156
160
  qfq_factor_df = pd.DataFrame(
157
- eval(res.text.split("=")[1].split("\n")[0])["data"]
161
+ eval(r.text.split("=")[1].split("\n")[0])["data"]
158
162
  )
159
163
  if qfq_factor_df.shape[0] == 0:
160
164
  raise ValueError("sina hfq factor not available")
@@ -167,15 +171,18 @@ def stock_zh_b_daily(
167
171
  if adjust in ("hfq-factor", "qfq-factor"):
168
172
  return _fq_factor(adjust.split("-")[0])
169
173
 
170
- res = requests.get(zh_sina_a_stock_hist_url.format(symbol))
174
+ r = requests.get(zh_sina_a_stock_hist_url.format(symbol))
171
175
  js_code = py_mini_racer.MiniRacer()
172
176
  js_code.eval(hk_js_decode)
173
177
  dict_list = js_code.call(
174
- "d", res.text.split("=")[1].split(";")[0].replace('"', "")
178
+ "d", r.text.split("=")[1].split(";")[0].replace('"', "")
175
179
  ) # 执行js解密代码
176
180
  data_df = pd.DataFrame(dict_list)
177
181
  data_df.index = pd.to_datetime(data_df["date"]).dt.date
178
182
  del data_df["date"]
183
+ del data_df["amount"]
184
+ del data_df["prevclose"]
185
+
179
186
  data_df = data_df.astype("float")
180
187
  r = requests.get(zh_sina_a_stock_amount_url.format(symbol, symbol))
181
188
  amount_data_json = demjson.decode(r.text[r.text.find("[") : r.text.rfind("]") + 1])
@@ -185,15 +192,7 @@ def stock_zh_b_daily(
185
192
  temp_df = pd.merge(
186
193
  data_df, amount_data_df, left_index=True, right_index=True, how="outer"
187
194
  )
188
- try:
189
- # try for pandas >= 2.1.0
190
- temp_df.ffill(inplace=True)
191
- except Exception as e:
192
- try:
193
- # try for pandas < 2.1.0
194
- temp_df.fillna(method="ffill", inplace=True)
195
- except Exception as e:
196
- print("Error:", e)
195
+ temp_df.ffill(inplace=True)
197
196
  temp_df = temp_df.astype(float)
198
197
  temp_df["amount"] = temp_df["amount"] * 10000
199
198
  temp_df["turnover"] = temp_df["volume"] / temp_df["amount"]
@@ -221,25 +220,15 @@ def stock_zh_b_daily(
221
220
  return temp_df
222
221
 
223
222
  if adjust == "hfq":
224
- res = requests.get(zh_sina_a_stock_hfq_url.format(symbol))
225
- hfq_factor_df = pd.DataFrame(
226
- eval(res.text.split("=")[1].split("\n")[0])["data"]
227
- )
223
+ r = requests.get(zh_sina_a_stock_hfq_url.format(symbol))
224
+ hfq_factor_df = pd.DataFrame(eval(r.text.split("=")[1].split("\n")[0])["data"])
228
225
  hfq_factor_df.columns = ["date", "hfq_factor"]
229
226
  hfq_factor_df.index = pd.to_datetime(hfq_factor_df.date)
230
227
  del hfq_factor_df["date"]
231
228
  temp_df = pd.merge(
232
229
  temp_df, hfq_factor_df, left_index=True, right_index=True, how="outer"
233
230
  )
234
- try:
235
- # try for pandas >= 2.1.0
236
- temp_df.ffill(inplace=True)
237
- except Exception as e:
238
- try:
239
- # try for pandas < 2.1.0
240
- temp_df.fillna(method="ffill", inplace=True)
241
- except Exception as e:
242
- print("Error:", e)
231
+ temp_df.ffill(inplace=True)
243
232
  temp_df = temp_df.astype(float)
244
233
  temp_df.dropna(inplace=True)
245
234
  temp_df.drop_duplicates(
@@ -260,26 +249,15 @@ def stock_zh_b_daily(
260
249
  return temp_df
261
250
 
262
251
  if adjust == "qfq":
263
- res = requests.get(zh_sina_a_stock_qfq_url.format(symbol))
264
- qfq_factor_df = pd.DataFrame(
265
- eval(res.text.split("=")[1].split("\n")[0])["data"]
266
- )
252
+ r = requests.get(zh_sina_a_stock_qfq_url.format(symbol))
253
+ qfq_factor_df = pd.DataFrame(eval(r.text.split("=")[1].split("\n")[0])["data"])
267
254
  qfq_factor_df.columns = ["date", "qfq_factor"]
268
255
  qfq_factor_df.index = pd.to_datetime(qfq_factor_df.date)
269
256
  del qfq_factor_df["date"]
270
-
271
257
  temp_df = pd.merge(
272
258
  temp_df, qfq_factor_df, left_index=True, right_index=True, how="outer"
273
259
  )
274
- try:
275
- # try for pandas >= 2.1.0
276
- temp_df.ffill(inplace=True)
277
- except Exception as e:
278
- try:
279
- # try for pandas < 2.1.0
280
- temp_df.fillna(method="ffill", inplace=True)
281
- except Exception as e:
282
- print("Error:", e)
260
+ temp_df.ffill(inplace=True)
283
261
  temp_df = temp_df.astype(float)
284
262
  temp_df.dropna(inplace=True)
285
263
  temp_df.drop_duplicates(
@@ -321,16 +299,15 @@ def stock_zh_b_minute(
321
299
  params = {
322
300
  "symbol": symbol,
323
301
  "scale": period,
324
- "datalen": "20000",
302
+ "datalen": "1970",
325
303
  }
326
304
  r = requests.get(url, params=params)
327
305
  temp_df = pd.DataFrame(json.loads(r.text.split("=(")[1].split(");")[0])).iloc[:, :6]
328
306
  if temp_df.empty:
329
- print(f"{symbol} 股票数据不存在,请检查是否已退市")
330
- return None
307
+ return pd.DataFrame()
331
308
  try:
332
309
  stock_zh_b_daily(symbol=symbol, adjust="qfq")
333
- except:
310
+ except: # noqa: E722
334
311
  return temp_df
335
312
 
336
313
  if adjust == "":
@@ -390,12 +367,12 @@ def stock_zh_b_minute(
390
367
 
391
368
  if __name__ == "__main__":
392
369
  stock_zh_b_daily_hfq_df_one = stock_zh_b_daily(
393
- symbol="sh900901", start_date="20171103", end_date="20210908", adjust=""
370
+ symbol="sh900901", start_date="20071103", end_date="20240916", adjust=""
394
371
  )
395
372
  print(stock_zh_b_daily_hfq_df_one)
396
373
 
397
374
  stock_zh_b_daily_hfq_df_three = stock_zh_b_daily(
398
- symbol="sh900901", start_date="19900103", end_date="20210118", adjust="qfq"
375
+ symbol="sh900901", start_date="19900103", end_date="20240722", adjust="hfq"
399
376
  )
400
377
  print(stock_zh_b_daily_hfq_df_three)
401
378
 
@@ -0,0 +1,250 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ Date: 2025/9/24 15:00
5
+ Desc: 东方财富-行情中心-同行比较
6
+ https://emweb.securities.eastmoney.com/pc_hsf10/pages/index.html?type=web&code=000895&color=b#/thbj
7
+ """
8
+
9
+ import pandas as pd
10
+ import requests
11
+
12
+
13
+ def stock_zh_growth_comparison_em(symbol: str = "SZ000895") -> pd.DataFrame:
14
+ """
15
+ 东方财富-行情中心-同行比较-成长性比较
16
+ https://emweb.securities.eastmoney.com/pc_hsf10/pages/index.html?type=web&code=000895&color=b#/thbj/czxbj
17
+ :param symbol: 股票代码
18
+ :type symbol: str
19
+ :return: 成长性比较
20
+ :rtype: pandas.DataFrame
21
+ """
22
+ url = 'https://datacenter.eastmoney.com/securities/api/data/v1/get'
23
+ params = {
24
+ 'reportName': 'RPT_PCF10_INDUSTRY_GROWTH',
25
+ 'columns': 'ALL',
26
+ 'quoteColumns': '',
27
+ 'filter': f'(SECUCODE="{symbol[2:]}.{symbol[:2]}")',
28
+ 'pageNumber': '',
29
+ 'pageSize': '',
30
+ 'sortTypes': '1',
31
+ 'sortColumns': 'PAIMING',
32
+ 'source': 'HSF10',
33
+ 'client': 'PC',
34
+ 'v': '02747607708067783'
35
+ }
36
+ r = requests.get(url, params=params)
37
+ data_json = r.json()
38
+
39
+ field_mapping = {
40
+ 'CORRE_SECURITY_CODE': '代码',
41
+ 'CORRE_SECURITY_NAME': '简称',
42
+ 'MGSY_3Y': '基本每股收益增长率-3年复合',
43
+ 'MGSYTB': '基本每股收益增长率-24A',
44
+ 'MGSYTTM': '基本每股收益增长率-TTM',
45
+ 'MGSY_1E': '基本每股收益增长率-25E',
46
+ 'MGSY_2E': '基本每股收益增长率-26E',
47
+ 'MGSY_3E': '基本每股收益增长率-27E',
48
+ 'YYSR_3Y': '营业收入增长率-3年复合',
49
+ 'YYSRTB': '营业收入增长率-24A',
50
+ 'YYSRTTM': '营业收入增长率-TTM',
51
+ 'YYSR_1E': '营业收入增长率-25E',
52
+ 'YYSR_2E': '营业收入增长率-26E',
53
+ 'YYSR_3E': '营业收入增长率-27E',
54
+ 'JLR_3Y': '净利润增长率-3年复合',
55
+ 'JLRTB': '净利润增长率-24A',
56
+ 'JLRTTM': '净利润增长率-TTM',
57
+ 'JLR_1E': '净利润增长率-25E',
58
+ 'JLR_2E': '净利润增长率-26E',
59
+ 'JLR_3E': '净利润增长率-27E',
60
+ 'PAIMING': '基本每股收益增长率-3年复合排名',
61
+ }
62
+
63
+ temp_df = pd.DataFrame(columns=field_mapping.values())
64
+ if data_json['result'] is not None:
65
+ temp_df = pd.DataFrame(data_json['result']['data'])
66
+ temp_df.rename(columns=field_mapping, inplace=True)
67
+ temp_df = temp_df[field_mapping.values()]
68
+
69
+ return temp_df
70
+
71
+
72
+ def stock_zh_valuation_comparison_em(symbol: str = "SZ000895") -> pd.DataFrame:
73
+ """
74
+ 东方财富-行情中心-同行比较-估值比较
75
+ https://emweb.securities.eastmoney.com/pc_hsf10/pages/index.html?type=web&code=000895&color=b#/thbj/gzbj
76
+ :param symbol: 股票代码
77
+ :type symbol: str
78
+ :return: 估值比较
79
+ :rtype: pandas.DataFrame
80
+ """
81
+ url = 'https://datacenter.eastmoney.com/securities/api/data/v1/get'
82
+ params = {
83
+ 'reportName': 'RPT_PCF10_INDUSTRY_CVALUE',
84
+ 'columns': 'ALL',
85
+ 'quoteColumns': '',
86
+ 'filter': f'(SECUCODE="{symbol[2:]}.{symbol[:2]}")',
87
+ 'pageNumber': '',
88
+ 'pageSize': '',
89
+ 'sortTypes': '1',
90
+ 'sortColumns': 'PAIMING',
91
+ 'source': 'HSF10',
92
+ 'client': 'PC',
93
+ 'v': '07552428957995401'
94
+ }
95
+ r = requests.get(url, params=params)
96
+ data_json = r.json()
97
+
98
+ field_mapping = {
99
+ 'CORRE_SECURITY_CODE': '代码',
100
+ 'CORRE_SECURITY_NAME': '简称',
101
+ 'PEG': 'PEG',
102
+ 'PE': '市盈率-24A',
103
+ 'PE_TTM': '市盈率-TTM',
104
+ 'PE_1Y': '市盈率-25E',
105
+ 'PE_2Y': '市盈率-26E',
106
+ 'PE_3Y': '市盈率-27E',
107
+ 'PS': '市销率-24A',
108
+ 'PS_TTM': '市销率-TTM',
109
+ 'PS_1Y': '市销率-25E',
110
+ 'PS_2Y': '市销率-26E',
111
+ 'PS_3Y': '市销率-27E',
112
+ 'PB': '市净率-24A',
113
+ 'PB_MRQ': '市净率-MRQ',
114
+ 'PCE': '市现率PCE-24A',
115
+ 'PCE_TTM': '市现率PCE-TTM',
116
+ 'PCF': '市现率PCF-24A',
117
+ 'PCF_TTM': '市现率PCF-TTM',
118
+ 'QYBS': 'EV/EBITDA-24A',
119
+ 'PAIMING': 'PEG排名',
120
+ }
121
+
122
+ temp_df = pd.DataFrame(columns=field_mapping.values())
123
+ if data_json['result'] is not None:
124
+ temp_df = pd.DataFrame(data_json['result']['data'])
125
+ temp_df.rename(columns=field_mapping, inplace=True)
126
+ temp_df = temp_df[field_mapping.values()]
127
+
128
+ return temp_df
129
+
130
+
131
+ def stock_zh_dupont_comparison_em(symbol: str = "SZ000895") -> pd.DataFrame:
132
+ """
133
+ 东方财富-行情中心-同行比较-杜邦分析比较
134
+ https://emweb.securities.eastmoney.com/pc_hsf10/pages/index.html?type=web&code=000895&color=b#/thbj/dbfxbj
135
+ :param symbol: 股票代码
136
+ :type symbol: str
137
+ :return: 杜邦分析比较
138
+ :rtype: pandas.DataFrame
139
+ """
140
+ url = 'https://datacenter.eastmoney.com/securities/api/data/v1/get'
141
+ params = {
142
+ 'reportName': 'RPT_PCF10_INDUSTRY_DBFX',
143
+ 'columns': 'ALL',
144
+ 'quoteColumns': '',
145
+ 'filter': f'(SECUCODE="{symbol[2:]}.{symbol[:2]}")',
146
+ 'pageNumber': '',
147
+ 'pageSize': '',
148
+ 'sortTypes': '1',
149
+ 'sortColumns': 'PAIMING',
150
+ 'source': 'HSF10',
151
+ 'client': 'PC',
152
+ 'v': '05086361194054821'
153
+ }
154
+ r = requests.get(url, params=params)
155
+ data_json = r.json()
156
+
157
+ field_mapping = {
158
+ 'CORRE_SECURITY_CODE': '代码',
159
+ 'CORRE_SECURITY_NAME': '简称',
160
+ 'ROE_AVG': 'ROE-3年平均',
161
+ 'ROEPJ_L3': 'ROE-22A',
162
+ 'ROEPJ_L2': 'ROE-23A',
163
+ 'ROEPJ_L1': 'ROE-24A',
164
+ 'XSJLL_AVG': '净利率-3年平均',
165
+ 'XSJLL_L3': '净利率-22A',
166
+ 'XSJLL_L2': '净利率-23A',
167
+ 'XSJLL_L1': '净利率-24A',
168
+ 'TOAZZL_AVG': '总资产周转率-3年平均',
169
+ 'TOAZZL_L3': '总资产周转率-22A',
170
+ 'TOAZZL_L2': '总资产周转率-23A',
171
+ 'TOAZZL_L1': '总资产周转率-24A',
172
+ 'QYCS_AVG': '权益乘数-3年平均',
173
+ 'QYCS_L3': '权益乘数-22A',
174
+ 'QYCS_L2': '权益乘数-23A',
175
+ 'QYCS_L1': '权益乘数-24A',
176
+ 'PAIMING': 'ROE-3年平均排名',
177
+ }
178
+
179
+ temp_df = pd.DataFrame(columns=field_mapping.values())
180
+ if data_json['result'] is not None:
181
+ temp_df = pd.DataFrame(data_json['result']['data'])
182
+ temp_df.rename(columns=field_mapping, inplace=True)
183
+ temp_df = temp_df[field_mapping.values()]
184
+
185
+ return temp_df
186
+
187
+
188
+ def stock_zh_scale_comparison_em(symbol: str = "SZ000895") -> pd.DataFrame:
189
+ """
190
+ 东方财富-行情中心-同行比较-公司规模
191
+ https://emweb.securities.eastmoney.com/pc_hsf10/pages/index.html?type=web&code=000895&color=b#/thbj/gsgm
192
+ :type symbol: str
193
+ :return: 公司规模
194
+ :rtype: pandas.DataFrame
195
+ """
196
+ url = 'https://datacenter.eastmoney.com/securities/api/data/v1/get'
197
+ params = {
198
+ 'reportName': 'RPT_PCF10_INDUSTRY_MARKET',
199
+ 'columns': 'SECUCODE,SECURITY_CODE,SECURITY_NAME_ABBR,ORG_CODE,'
200
+ 'CORRE_SECUCODE,CORRE_SECURITY_CODE,CORRE_SECURITY_NAME,'
201
+ 'CORRE_ORG_CODE,TOTAL_CAP,FREECAP,TOTAL_OPERATEINCOME,'
202
+ 'NETPROFIT,REPORT_TYPE,TOTAL_CAP_RANK,FREECAP_RANK,'
203
+ 'TOTAL_OPERATEINCOME_RANK,NETPROFIT_RANK',
204
+ 'quoteColumns': '',
205
+ 'filter': f'(SECUCODE="{symbol[2:]}.{symbol[:2]}")(CORRE_SECUCODE="{symbol[2:]}.{symbol[:2]}")',
206
+ 'pageNumber': '1',
207
+ 'pageSize': '5',
208
+ 'sortTypes': '-1',
209
+ 'sortColumns': 'TOTAL_CAP',
210
+ 'source': 'HSF10',
211
+ 'client': 'PC',
212
+ 'v': '005391946600478148'
213
+ }
214
+ r = requests.get(url, params=params)
215
+ data_json = r.json()
216
+
217
+ field_mapping = {
218
+ 'CORRE_SECURITY_CODE': '代码',
219
+ 'CORRE_SECURITY_NAME': '简称',
220
+ 'TOTAL_CAP': '总市值',
221
+ 'TOTAL_CAP_RANK': '总市值排名',
222
+ 'FREECAP': '流通市值',
223
+ 'FREECAP_RANK': '流通市值排名',
224
+ 'TOTAL_OPERATEINCOME': '营业收入',
225
+ 'TOTAL_OPERATEINCOME_RANK': '营业收入排名',
226
+ 'NETPROFIT': '净利润',
227
+ 'NETPROFIT_RANK': '净利润排名',
228
+ }
229
+
230
+ temp_df = pd.DataFrame(columns=field_mapping.values())
231
+ if data_json['result'] is not None:
232
+ temp_df = pd.DataFrame(data_json['result']['data'])
233
+ temp_df.rename(columns=field_mapping, inplace=True)
234
+ temp_df = temp_df[field_mapping.values()]
235
+
236
+ return temp_df
237
+
238
+
239
+ if __name__ == "__main__":
240
+ stock_zh_growth_comparison_em_df = stock_zh_growth_comparison_em(symbol="SZ000895")
241
+ print(stock_zh_growth_comparison_em_df)
242
+
243
+ stock_zh_valuation_comparison_em_df = stock_zh_valuation_comparison_em(symbol="SZ000895")
244
+ print(stock_zh_valuation_comparison_em_df)
245
+
246
+ stock_zh_dupont_comparison_em_df = stock_zh_dupont_comparison_em(symbol="SZ000895")
247
+ print(stock_zh_dupont_comparison_em_df)
248
+
249
+ stock_zh_scale_comparison_em_df = stock_zh_scale_comparison_em(symbol="SZ000895")
250
+ print(stock_zh_scale_comparison_em_df)
@@ -1,10 +1,11 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2021/8/20 19:00
4
+ Date: 2024/7/21 18:00
5
5
  Desc: 科创板报告
6
- http://data.eastmoney.com/notices/kcb.html
6
+ https://data.eastmoney.com/notices/kcb.html
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
  from tqdm import tqdm
@@ -13,11 +14,11 @@ from tqdm import tqdm
13
14
  def _stock_zh_kcb_report_em_page() -> int:
14
15
  """
15
16
  科创板报告的页数
16
- http://data.eastmoney.com/notices/kcb.html
17
+ https://data.eastmoney.com/notices/kcb.html
17
18
  :return: 科创板报告的页数
18
19
  :rtype: int
19
20
  """
20
- url = "http://np-anotice-stock.eastmoney.com/api/security/ann"
21
+ url = "https://np-anotice-stock.eastmoney.com/api/security/ann"
21
22
  params = {
22
23
  "sr": "-1",
23
24
  "page_size": "100",
@@ -38,7 +39,7 @@ def _stock_zh_kcb_report_em_page() -> int:
38
39
  def stock_zh_kcb_report_em(from_page: int = 1, to_page: int = 100) -> pd.DataFrame:
39
40
  """
40
41
  科创板报告内容
41
- http://data.eastmoney.com/notices/kcb.html
42
+ https://data.eastmoney.com/notices/kcb.html
42
43
  :param from_page: 开始获取的页码
43
44
  :type from_page: int
44
45
  :param to_page: 结束获取的页码
@@ -46,9 +47,9 @@ def stock_zh_kcb_report_em(from_page: int = 1, to_page: int = 100) -> pd.DataFra
46
47
  :return: 科创板报告内容
47
48
  :rtype: pandas.DataFrame
48
49
  """
49
- big_df = pd.DataFrame()
50
- url = "http://np-anotice-stock.eastmoney.com/api/security/ann"
50
+ url = "https://np-anotice-stock.eastmoney.com/api/security/ann"
51
51
  total_page = _stock_zh_kcb_report_em_page()
52
+ big_df = pd.DataFrame()
52
53
  if to_page >= total_page:
53
54
  to_page = total_page
54
55
  for i in tqdm(range(from_page, to_page + 1), leave=False):
@@ -76,7 +77,8 @@ def stock_zh_kcb_report_em(from_page: int = 1, to_page: int = 100) -> pd.DataFra
76
77
  [item["art_code"] for item in data_json["data"]["list"]],
77
78
  ]
78
79
  ).T
79
- big_df = big_df.append(temp_df, ignore_index=True)
80
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
81
+
80
82
  big_df.columns = [
81
83
  "代码",
82
84
  "名称",
@@ -85,7 +87,7 @@ def stock_zh_kcb_report_em(from_page: int = 1, to_page: int = 100) -> pd.DataFra
85
87
  "公告日期",
86
88
  "公告代码",
87
89
  ]
88
- big_df['公告日期'] = pd.to_datetime(big_df['公告日期']).dt.date
90
+ big_df["公告日期"] = pd.to_datetime(big_df["公告日期"], errors="coerce").dt.date
89
91
  return big_df
90
92
 
91
93