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,18 +1,21 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/3/25 12:30
4
+ Date: 2025/3/10 19:00
5
5
  Desc: 东方财富网-数据中心-资金流向
6
6
  https://data.eastmoney.com/zjlx/detail.html
7
7
  """
8
8
 
9
- import json
9
+ import math
10
10
  import time
11
11
  from functools import lru_cache
12
12
 
13
13
  import pandas as pd
14
14
  import requests
15
15
 
16
+ from akshare.utils.func import fetch_paginated_data
17
+ from akshare.utils.tqdm import get_tqdm
18
+
16
19
 
17
20
  def stock_individual_fund_flow(
18
21
  stock: str = "600094", market: str = "sh"
@@ -43,8 +46,8 @@ def stock_individual_fund_flow(
43
46
  "_": int(time.time() * 1000),
44
47
  }
45
48
  r = requests.get(url, params=params, headers=headers)
46
- json_data = r.json()
47
- content_list = json_data["data"]["klines"]
49
+ data_json = r.json()
50
+ content_list = data_json["data"]["klines"]
48
51
  temp_df = pd.DataFrame([item.split(",") for item in content_list])
49
52
  temp_df.columns = [
50
53
  "日期",
@@ -80,6 +83,7 @@ def stock_individual_fund_flow(
80
83
  "小单净流入-净占比",
81
84
  ]
82
85
  ]
86
+ temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
83
87
  temp_df["主力净流入-净额"] = pd.to_numeric(
84
88
  temp_df["主力净流入-净额"], errors="coerce"
85
89
  )
@@ -146,7 +150,7 @@ def stock_individual_fund_flow_rank(indicator: str = "5日") -> pd.DataFrame:
146
150
  params = {
147
151
  "fid": indicator_map[indicator][0],
148
152
  "po": "1",
149
- "pz": "10000",
153
+ "pz": "100",
150
154
  "pn": "1",
151
155
  "np": "1",
152
156
  "fltt": "2",
@@ -157,7 +161,20 @@ def stock_individual_fund_flow_rank(indicator: str = "5日") -> pd.DataFrame:
157
161
  }
158
162
  r = requests.get(url, params=params)
159
163
  data_json = r.json()
160
- temp_df = pd.DataFrame(data_json["data"]["diff"])
164
+ total_page = math.ceil(data_json["data"]["total"] / 100)
165
+ temp_list = []
166
+ tqdm = get_tqdm()
167
+ for page in tqdm(range(1, total_page + 1), leave=False):
168
+ params.update(
169
+ {
170
+ "pn": page,
171
+ }
172
+ )
173
+ r = requests.get(url, params=params, timeout=15)
174
+ data_json = r.json()
175
+ inner_temp_df = pd.DataFrame(data_json["data"]["diff"])
176
+ temp_list.append(inner_temp_df)
177
+ temp_df = pd.concat(temp_list, ignore_index=True)
161
178
  temp_df.reset_index(inplace=True)
162
179
  temp_df["index"] = range(1, len(temp_df) + 1)
163
180
  if indicator == "今日":
@@ -347,13 +364,11 @@ def stock_market_fund_flow() -> pd.DataFrame:
347
364
  "fields1": "f1,f2,f3,f7",
348
365
  "fields2": "f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64,f65",
349
366
  "ut": "b2884a393a59ad64002292a3e90d46a5",
350
- "cb": "jQuery183003743205523325188_1589197499471",
351
367
  "_": int(time.time() * 1000),
352
368
  }
353
369
  r = requests.get(url, params=params, headers=headers)
354
- text_data = r.text
355
- json_data = json.loads(text_data[text_data.find("{"): -2])
356
- content_list = json_data["data"]["klines"]
370
+ data_json = r.json()
371
+ content_list = data_json["data"]["klines"]
357
372
  temp_df = pd.DataFrame([item.split(",") for item in content_list])
358
373
  temp_df.columns = [
359
374
  "日期",
@@ -467,7 +482,7 @@ def stock_sector_fund_flow_rank(
467
482
  }
468
483
  params = {
469
484
  "pn": "1",
470
- "pz": "5000",
485
+ "pz": "100",
471
486
  "po": "1",
472
487
  "np": "1",
473
488
  "ut": "b2884a393a59ad64002292a3e90d46a5",
@@ -478,13 +493,25 @@ def stock_sector_fund_flow_rank(
478
493
  "stat": indicator_map[indicator][1],
479
494
  "fields": indicator_map[indicator][2],
480
495
  "rt": "52975239",
481
- "cb": "jQuery18308357908311220152_1589256588824",
482
496
  "_": int(time.time() * 1000),
483
497
  }
484
498
  r = requests.get(url, params=params, headers=headers)
485
- text_data = r.text
486
- json_data = json.loads(text_data[text_data.find("{"): -2])
487
- temp_df = pd.DataFrame(json_data["data"]["diff"])
499
+ data_json = r.json()
500
+ total_page = math.ceil(data_json["data"]["total"] / 100)
501
+ temp_list = []
502
+ tqdm = get_tqdm()
503
+ for page in tqdm(range(1, total_page + 1), leave=False):
504
+ params.update(
505
+ {
506
+ "pn": page,
507
+ }
508
+ )
509
+ r = requests.get(url, params=params, timeout=15)
510
+ data_json = r.json()
511
+ inner_temp_df = pd.DataFrame(data_json["data"]["diff"])
512
+ temp_list.append(inner_temp_df)
513
+ temp_df = pd.concat(temp_list, ignore_index=True)
514
+
488
515
  if indicator == "今日":
489
516
  temp_df.columns = [
490
517
  "-",
@@ -629,28 +656,19 @@ def _get_stock_sector_fund_flow_summary_code() -> dict:
629
656
  :rtype: dict
630
657
  """
631
658
  url = "https://push2.eastmoney.com/api/qt/clist/get"
632
- headers = {
633
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
634
- "(KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36",
635
- }
636
659
  params = {
637
- "pn": "1",
638
- "pz": "5000",
660
+ "fid": "f62",
639
661
  "po": "1",
662
+ "pz": "100",
663
+ "pn": "1",
640
664
  "np": "1",
641
- "ut": "b2884a393a59ad64002292a3e90d46a5",
642
665
  "fltt": "2",
643
666
  "invt": "2",
644
- "fid0": "f62",
667
+ "ut": "8dec03ba335b81bf4ebdf7b29ec27d15",
645
668
  "fs": "m:90 t:2",
646
- "stat": "1",
647
- "fields": "f12,f14,f2,f3,f62,f184,f66,f69,f72,f75,f78,f81,f84,f87,f204,f205,f124",
648
- "rt": "52975239",
649
- "_": int(time.time() * 1000),
669
+ "fields": "f12,f14,f2,f3,f62,f184,f66,f69,f72,f75,f78,f81,f84,f87,f204,f205,f124,f1,f13",
650
670
  }
651
- r = requests.get(url, params=params, headers=headers)
652
- data_json = r.json()
653
- temp_df = pd.DataFrame(data_json["data"]["diff"])
671
+ temp_df = fetch_paginated_data(url, params)
654
672
  name_code_map = dict(zip(temp_df["f14"], temp_df["f12"]))
655
673
  return name_code_map
656
674
 
@@ -674,9 +692,9 @@ def stock_sector_fund_flow_summary(
674
692
  params = {
675
693
  "fid": "f62",
676
694
  "po": "1",
677
- "pz": "50",
695
+ "pz": "5000",
678
696
  "pn": "1",
679
- "np": "1",
697
+ "np": "2",
680
698
  "fltt": "2",
681
699
  "invt": "2",
682
700
  "fs": f"b:{code_name_map[symbol]}",
@@ -684,9 +702,9 @@ def stock_sector_fund_flow_summary(
684
702
  }
685
703
  r = requests.get(url, params=params)
686
704
  data_json = r.json()
687
- temp_df = pd.DataFrame(data_json["data"]["diff"])
705
+ temp_df = pd.DataFrame(data_json["data"]["diff"]).T
688
706
  temp_df.reset_index(inplace=True)
689
- temp_df["index"] = temp_df["index"] + 1
707
+ temp_df["index"] = temp_df["index"].astype(int) + 1
690
708
  temp_df.rename(
691
709
  columns={
692
710
  "index": "序号",
@@ -763,9 +781,9 @@ def stock_sector_fund_flow_summary(
763
781
  params = {
764
782
  "fid": "f164",
765
783
  "po": "1",
766
- "pz": "50",
784
+ "pz": "50000",
767
785
  "pn": "1",
768
- "np": "1",
786
+ "np": "2",
769
787
  "fltt": "2",
770
788
  "invt": "2",
771
789
  "fs": f"b:{code_name_map[symbol]}",
@@ -773,9 +791,9 @@ def stock_sector_fund_flow_summary(
773
791
  }
774
792
  r = requests.get(url, params=params)
775
793
  data_json = r.json()
776
- temp_df = pd.DataFrame(data_json["data"]["diff"])
794
+ temp_df = pd.DataFrame(data_json["data"]["diff"]).T
777
795
  temp_df.reset_index(inplace=True)
778
- temp_df["index"] = temp_df["index"] + 1
796
+ temp_df["index"] = temp_df["index"].astype(int) + 1
779
797
  temp_df.rename(
780
798
  columns={
781
799
  "index": "序号",
@@ -852,9 +870,9 @@ def stock_sector_fund_flow_summary(
852
870
  params = {
853
871
  "fid": "f174",
854
872
  "po": "1",
855
- "pz": "50",
873
+ "pz": "50000",
856
874
  "pn": "1",
857
- "np": "1",
875
+ "np": "2",
858
876
  "fltt": "2",
859
877
  "invt": "2",
860
878
  "fs": f"b:{code_name_map[symbol]}",
@@ -862,9 +880,9 @@ def stock_sector_fund_flow_summary(
862
880
  }
863
881
  r = requests.get(url, params=params)
864
882
  data_json = r.json()
865
- temp_df = pd.DataFrame(data_json["data"]["diff"])
883
+ temp_df = pd.DataFrame(data_json["data"]["diff"]).T
866
884
  temp_df.reset_index(inplace=True)
867
- temp_df["index"] = temp_df["index"] + 1
885
+ temp_df["index"] = temp_df["index"].astype(int) + 1
868
886
  temp_df.rename(
869
887
  columns={
870
888
  "index": "序号",
@@ -937,9 +955,11 @@ def stock_sector_fund_flow_summary(
937
955
  temp_df["10日小单净流入-净占比"], errors="coerce"
938
956
  )
939
957
  return temp_df
958
+ else:
959
+ return pd.DataFrame()
940
960
 
941
961
 
942
- def stock_sector_fund_flow_hist(symbol: str = "电源设备") -> pd.DataFrame:
962
+ def stock_sector_fund_flow_hist(symbol: str = "汽车服务") -> pd.DataFrame:
943
963
  """
944
964
  东方财富网-数据中心-资金流向-行业资金流-行业历史资金流
945
965
  https://data.eastmoney.com/bkzj/BK1034.html
@@ -956,7 +976,6 @@ def stock_sector_fund_flow_hist(symbol: str = "电源设备") -> pd.DataFrame:
956
976
  "fields1": "f1,f2,f3,f7",
957
977
  "fields2": "f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64,f65",
958
978
  "secid": f"90.{code_name_map[symbol]}",
959
- "_": "1678954135116",
960
979
  }
961
980
  r = requests.get(url, params=params)
962
981
  data_json = r.json()
@@ -1023,7 +1042,7 @@ def stock_sector_fund_flow_hist(symbol: str = "电源设备") -> pd.DataFrame:
1023
1042
  temp_df["小单净流入-净占比"] = pd.to_numeric(
1024
1043
  temp_df["小单净流入-净占比"], errors="coerce"
1025
1044
  )
1026
- temp_df["日期"] = pd.to_datetime(temp_df["日期"]).dt.date
1045
+ temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
1027
1046
  return temp_df
1028
1047
 
1029
1048
 
@@ -1036,29 +1055,23 @@ def _get_stock_concept_fund_flow_summary_code() -> dict:
1036
1055
  :rtype: dict
1037
1056
  """
1038
1057
  url = "https://push2.eastmoney.com/api/qt/clist/get"
1039
- headers = {
1040
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
1041
- "(KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36",
1042
- }
1043
1058
  params = {
1044
1059
  "pn": "1",
1045
- "pz": "5000",
1060
+ "pz": "100",
1046
1061
  "po": "1",
1047
1062
  "np": "1",
1048
- "fields": "f12,f13,f14,f62",
1063
+ "fields": "f3,f12,f13,f14,f62",
1049
1064
  "fid": "f62",
1050
1065
  "fs": "m:90+t:3",
1051
1066
  "ut": "b2884a393a59ad64002292a3e90d46a5",
1052
1067
  "_": int(time.time() * 1000),
1053
1068
  }
1054
- r = requests.get(url, params=params, headers=headers)
1055
- data_json = r.json()
1056
- temp_df = pd.DataFrame(data_json["data"]["diff"])
1069
+ temp_df = fetch_paginated_data(url, params)
1057
1070
  name_code_map = dict(zip(temp_df["f14"], temp_df["f12"]))
1058
1071
  return name_code_map
1059
1072
 
1060
1073
 
1061
- def stock_concept_fund_flow_hist(symbol: str = "锂电池") -> pd.DataFrame:
1074
+ def stock_concept_fund_flow_hist(symbol: str = "数据要素") -> pd.DataFrame:
1062
1075
  """
1063
1076
  东方财富网-数据中心-资金流向-概念资金流-概念历史资金流
1064
1077
  https://data.eastmoney.com/bkzj/BK0574.html
@@ -1075,7 +1088,6 @@ def stock_concept_fund_flow_hist(symbol: str = "锂电池") -> pd.DataFrame:
1075
1088
  "fields1": "f1,f2,f3,f7",
1076
1089
  "fields2": "f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64,f65",
1077
1090
  "secid": f"90.{code_name_map[symbol]}",
1078
- "_": "1678954135116",
1079
1091
  }
1080
1092
  r = requests.get(url, params=params)
1081
1093
  data_json = r.json()
@@ -1169,7 +1181,7 @@ def stock_main_fund_flow(symbol: str = "全部股票") -> pd.DataFrame:
1169
1181
  params = {
1170
1182
  "fid": "f184",
1171
1183
  "po": "1",
1172
- "pz": "50000",
1184
+ "pz": "100",
1173
1185
  "pn": "1",
1174
1186
  "np": "1",
1175
1187
  "fltt": "2",
@@ -1178,10 +1190,7 @@ def stock_main_fund_flow(symbol: str = "全部股票") -> pd.DataFrame:
1178
1190
  "ut": "b2884a393a59ad64002292a3e90d46a5",
1179
1191
  "fs": symbol_map[symbol],
1180
1192
  }
1181
- r = requests.get(url, params=params, timeout=15)
1182
- data_json = r.json()
1183
- temp_df = pd.DataFrame(data_json["data"]["diff"])
1184
- temp_df.reset_index(inplace=True)
1193
+ temp_df = fetch_paginated_data(url, params)
1185
1194
  temp_df.rename(
1186
1195
  columns={
1187
1196
  "index": "序号",
@@ -1295,14 +1304,14 @@ if __name__ == "__main__":
1295
1304
  print(stock_sector_fund_flow_rank_df)
1296
1305
 
1297
1306
  stock_sector_fund_flow_summary_df = stock_sector_fund_flow_summary(
1298
- symbol="电源设备", indicator="今日"
1307
+ symbol="文化传媒", indicator="今日"
1299
1308
  )
1300
1309
  print(stock_sector_fund_flow_summary_df)
1301
1310
 
1302
- stock_sector_fund_flow_hist_df = stock_sector_fund_flow_hist(symbol="电源设备")
1311
+ stock_sector_fund_flow_hist_df = stock_sector_fund_flow_hist(symbol="汽车服务")
1303
1312
  print(stock_sector_fund_flow_hist_df)
1304
1313
 
1305
- stock_concept_fund_flow_hist_df = stock_concept_fund_flow_hist(symbol="锂电池")
1314
+ stock_concept_fund_flow_hist_df = stock_concept_fund_flow_hist(symbol="半导体概念")
1306
1315
  print(stock_concept_fund_flow_hist_df)
1307
1316
 
1308
1317
  stock_main_fund_flow_df = stock_main_fund_flow(symbol="全部股票")
@@ -5,11 +5,10 @@ Date: 2021/12/19 13:09
5
5
  Desc: 东方财富网-数据中心-主力数据-基金持仓
6
6
  http://data.eastmoney.com/zlsj/2020-06-30-1-2.html
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
 
11
- from akshare.utils import demjson
12
-
13
12
 
14
13
  def stock_report_fund_hold(
15
14
  symbol: str = "基金持仓", date: str = "20210331"
@@ -5,6 +5,7 @@ Date: 2023/8/8 21:30
5
5
  Desc: 东方财富网-数据中心-股市日历
6
6
  https://data.eastmoney.com/gsrl/gsdt.html
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
 
@@ -0,0 +1,175 @@
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_HKF10/pages/home/index.html?code=03900&type=web&color=w#/IndustryComparison
7
+ """
8
+
9
+ import pandas as pd
10
+ import requests
11
+
12
+
13
+ def stock_hk_growth_comparison_em(symbol: str = "03900") -> pd.DataFrame:
14
+ """
15
+ 东方财富-港股-行业对比-成长性对比
16
+ https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/IndustryComparison
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_HKGROWTH',
25
+ 'columns': 'SECUCODE,SECURITY_CODE,ORG_CODE,REPORT_DATE,TYPE_ID,TYPE_TYPE,'
26
+ 'TYPE_NAME,TYPE_NAME_EN,CORRE_SECURITY_CODE,CORRE_SECUCODE,'
27
+ 'CORRE_SECURITY_NAME,EPS_YOY,OPERATE_INCOME_YOY,OPERATE_PROFIT_YOY,'
28
+ 'TOTAL_ASSET_YOY,EPS_YOY_RANK,OPINCOME_YOY_RANK,OPROFIT_YOY_RANK,TOASSET_YOY_RANK',
29
+ 'quoteColumns': '',
30
+ 'filter': f'(SECUCODE="{symbol}.HK")(CORRE_SECUCODE="{symbol}.HK")',
31
+ 'pageNumber': '1',
32
+ 'pageSize': '',
33
+ 'sortTypes': '',
34
+ 'sortColumns': '',
35
+ 'source': 'F10',
36
+ 'client': 'PC',
37
+ 'v': '03313416193688571'
38
+ }
39
+ r = requests.get(url, params=params)
40
+ data_json = r.json()
41
+ field_mapping = {
42
+ 'CORRE_SECURITY_CODE': '代码',
43
+ 'CORRE_SECURITY_NAME': '简称',
44
+ 'EPS_YOY': '基本每股收益同比增长率',
45
+ 'EPS_YOY_RANK': '基本每股收益同比增长率排名',
46
+ 'OPERATE_INCOME_YOY': '营业收入同比增长率',
47
+ 'OPINCOME_YOY_RANK': '营业收入同比增长率排名',
48
+ 'OPERATE_PROFIT_YOY': '营业利润率同比增长率',
49
+ 'OPROFIT_YOY_RANK': '营业利润率同比增长率排名',
50
+ 'TOTAL_ASSET_YOY': '基本每股收总资产同比增长率益同比增长率',
51
+ 'TOASSET_YOY_RANK': '总资产同比增长率排名',
52
+ }
53
+ temp_df = pd.DataFrame(columns=field_mapping.values())
54
+ if data_json['result'] is not None:
55
+ temp_df = pd.DataFrame(data_json['result']['data'])
56
+ temp_df.rename(columns=field_mapping, inplace=True)
57
+ temp_df = temp_df[field_mapping.values()]
58
+ return temp_df
59
+
60
+
61
+ def stock_hk_valuation_comparison_em(symbol: str = "03900") -> pd.DataFrame:
62
+ """
63
+ 东方财富-港股-行业对比-估值对比
64
+ https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/IndustryComparison
65
+ :param symbol: 股票代码
66
+ :type symbol: str
67
+ :return: 估值对比
68
+ :rtype: pandas.DataFrame
69
+ """
70
+ url = 'https://datacenter.eastmoney.com/securities/api/data/v1/get'
71
+ params = {
72
+ 'reportName': 'RPT_PCF10_INDUSTRY_HKCVALUE',
73
+ 'columns': 'SECUCODE,SECURITY_CODE,ORG_CODE,REPORT_DATE,TYPE_ID,'
74
+ 'TYPE_TYPE,TYPE_NAME,TYPE_NAME_EN,CORRE_SECURITY_CODE,'
75
+ 'CORRE_SECUCODE,CORRE_SECURITY_NAME,PE_TTM,PE_LYR,PB_MQR,'
76
+ 'PB_LYR,PS_TTM,PS_LYR,PCE_TTM,PCE_LYR,PE_TTM_RANK,PE_LYR_RANK,'
77
+ 'PB_MQR_RANK,PB_LYR_RANK,PS_TTM_RANK,PS_LYR_RANK,PCE_TTM_RANK,PCE_LYR_RANK',
78
+ 'quoteColumns': '',
79
+ 'filter': f'(SECUCODE="{symbol}.HK")(CORRE_SECUCODE="{symbol}.HK")',
80
+ 'pageNumber': '1',
81
+ 'pageSize': '',
82
+ 'sortTypes': '',
83
+ 'sortColumns': '',
84
+ 'source': 'F10',
85
+ 'client': 'PC',
86
+ 'v': '03445297742754925'
87
+ }
88
+ r = requests.get(url, params=params)
89
+ data_json = r.json()
90
+ field_mapping = {
91
+ 'CORRE_SECURITY_CODE': '代码',
92
+ 'CORRE_SECURITY_NAME': '简称',
93
+ 'PE_TTM': '市盈率-TTM',
94
+ 'PE_TTM_RANK': '市盈率-TTM排名',
95
+ 'PE_LYR': '市盈率-LYR',
96
+ 'PE_LYR_RANK': '市盈率-LYR排名',
97
+ 'PB_MQR': '市净率-MRQ',
98
+ 'PB_MQR_RANK': '市净率-MRQ排名',
99
+ 'PB_LYR': '市净率-LYR',
100
+ 'PB_LYR_RANK': '市净率-LYR排名',
101
+ 'PS_TTM': '市销率-TTM',
102
+ 'PS_TTM_RANK': '市销率-TTM排名',
103
+ 'PS_LYR': '市销率-LYR',
104
+ 'PS_LYR_RANK': '市销率-LYR排名',
105
+ 'PCE_TTM': '市现率-TTM',
106
+ 'PCE_TTM_RANK': '市现率-TTM排名',
107
+ 'PCE_LYR': '市现率-LYR',
108
+ 'PCE_LYR_RANK': '市现率-LYR排名',
109
+ }
110
+ temp_df = pd.DataFrame(columns=field_mapping.values())
111
+ if data_json['result'] is not None:
112
+ temp_df = pd.DataFrame(data_json['result']['data'])
113
+ temp_df.rename(columns=field_mapping, inplace=True)
114
+ temp_df = temp_df[field_mapping.values()]
115
+ return temp_df
116
+
117
+
118
+ def stock_hk_scale_comparison_em(symbol: str = "03900") -> pd.DataFrame:
119
+ """
120
+ 东方财富-港股-行业对比-规模对比
121
+ https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/IndustryComparison
122
+ :param symbol: 股票代码
123
+ :type symbol: str
124
+ :return: 规模对比
125
+ :rtype: pandas.DataFrame
126
+ """
127
+ url = 'https://datacenter.eastmoney.com/securities/api/data/v1/get'
128
+ params = {
129
+ 'reportName': 'RPT_PCF10_INDUSTRY_SCALE',
130
+ 'columns': 'SECURITY_CODE,SECUCODE,TYPE_ID,TYPE_TYPE,TYPE_NAME,'
131
+ 'TYPE_NAME_EN,CORRE_SECURITY_CODE,CORRE_SECUCODE,'
132
+ 'CORRE_SECURITY_NAME,MAXSTDREPORTDATE,HKSDQMV,'
133
+ 'HKTOTAL_MARKET_CAP,OPERATE_INCOME,GROSS_PROFIT,'
134
+ 'HKSDQMV_RANK,HKTOTAL_CAP_RANK,OPERATE_INCOME_RANK,GROSS_PROFIT_RANK',
135
+ 'quoteColumns': '',
136
+ 'filter': f'(SECUCODE="{symbol}.HK")(CORRE_SECUCODE="{symbol}.HK")',
137
+ 'pageNumber': '1',
138
+ 'pageSize': '',
139
+ 'sortTypes': '',
140
+ 'sortColumns': '',
141
+ 'source': 'F10',
142
+ 'client': 'PC',
143
+ 'v': '07839693368708753'
144
+ }
145
+ r = requests.get(url, params=params)
146
+ data_json = r.json()
147
+ field_mapping = {
148
+ 'CORRE_SECURITY_CODE': '代码',
149
+ 'CORRE_SECURITY_NAME': '简称',
150
+ 'HKSDQMV': '总市值',
151
+ 'HKSDQMV_RANK': '总市值排名',
152
+ 'HKTOTAL_MARKET_CAP': '流通市值',
153
+ 'HKTOTAL_CAP_RANK': '流通市值排名',
154
+ 'OPERATE_INCOME': '营业总收入',
155
+ 'OPERATE_INCOME_RANK': '营业总收入排名',
156
+ 'GROSS_PROFIT': '净利润',
157
+ 'GROSS_PROFIT_RANK': '净利润排名',
158
+ }
159
+ temp_df = pd.DataFrame(columns=field_mapping.values())
160
+ if data_json['result'] is not None:
161
+ temp_df = pd.DataFrame(data_json['result']['data'])
162
+ temp_df.rename(columns=field_mapping, inplace=True)
163
+ temp_df = temp_df[field_mapping.values()]
164
+ return temp_df
165
+
166
+
167
+ if __name__ == "__main__":
168
+ stock_hk_growth_comparison_em_df = stock_hk_growth_comparison_em(symbol="03900")
169
+ print(stock_hk_growth_comparison_em_df)
170
+
171
+ stock_hk_valuation_comparison_em_df = stock_hk_valuation_comparison_em(symbol="03900")
172
+ print(stock_hk_valuation_comparison_em_df)
173
+
174
+ stock_hk_scale_comparison_em_df = stock_hk_scale_comparison_em(symbol="03900")
175
+ print(stock_hk_scale_comparison_em_df)
@@ -0,0 +1,107 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ Date: 2025/2/24 18:30
5
+ Desc: 东方财富网-行情中心-港股市场-知名港股
6
+ https://quote.eastmoney.com/center/gridlist.html#hk_wellknown
7
+ """
8
+
9
+ import pandas as pd
10
+ import requests
11
+
12
+
13
+ def stock_hk_famous_spot_em() -> pd.DataFrame:
14
+ """
15
+ 东方财富网-行情中心-港股市场-知名港股
16
+ https://quote.eastmoney.com/center/gridlist.html#hk_wellknown
17
+ :return: 知名美股实时行情
18
+ :rtype: pandas.DataFrame
19
+ """
20
+ url = "https://69.push2.eastmoney.com/api/qt/clist/get"
21
+ params = {
22
+ "pn": "1",
23
+ "pz": "50000",
24
+ "po": "1",
25
+ "np": "2",
26
+ "ut": "bd1d9ddb04089700cf9c27f6f7426281",
27
+ "fltt": "2",
28
+ "invt": "2",
29
+ "dect": "1",
30
+ "wbp2u": "|0|0|0|web",
31
+ "fid": "f3",
32
+ "fs": "b:DLMK0106",
33
+ "fields": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,"
34
+ "f25,f26,f22,f33,f11,f62,f128,f136,f115,f152",
35
+ }
36
+ r = requests.get(url, params=params)
37
+ data_json = r.json()
38
+ temp_df = pd.DataFrame(data_json["data"]["diff"]).T
39
+ temp_df.columns = [
40
+ "_",
41
+ "最新价",
42
+ "涨跌幅",
43
+ "涨跌额",
44
+ "成交量",
45
+ "成交额",
46
+ "_",
47
+ "_",
48
+ "_",
49
+ "_",
50
+ "_",
51
+ "代码",
52
+ "编码",
53
+ "名称",
54
+ "最高",
55
+ "最低",
56
+ "今开",
57
+ "昨收",
58
+ "总市值",
59
+ "_",
60
+ "_",
61
+ "_",
62
+ "_",
63
+ "_",
64
+ "_",
65
+ "_",
66
+ "_",
67
+ "市盈率",
68
+ "_",
69
+ "_",
70
+ "_",
71
+ "_",
72
+ "_",
73
+ ]
74
+ temp_df.reset_index(inplace=True)
75
+ temp_df["index"] = range(1, len(temp_df) + 1)
76
+ temp_df.rename(columns={"index": "序号"}, inplace=True)
77
+ temp_df = temp_df[
78
+ [
79
+ "序号",
80
+ "代码",
81
+ "名称",
82
+ "最新价",
83
+ "涨跌额",
84
+ "涨跌幅",
85
+ "今开",
86
+ "最高",
87
+ "最低",
88
+ "昨收",
89
+ "成交量",
90
+ "成交额",
91
+ ]
92
+ ]
93
+ temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce")
94
+ temp_df["涨跌额"] = pd.to_numeric(temp_df["涨跌额"], errors="coerce")
95
+ temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"], errors="coerce")
96
+ temp_df["今开"] = pd.to_numeric(temp_df["今开"], errors="coerce")
97
+ temp_df["最高"] = pd.to_numeric(temp_df["最高"], errors="coerce")
98
+ temp_df["最低"] = pd.to_numeric(temp_df["最低"], errors="coerce")
99
+ temp_df["昨收"] = pd.to_numeric(temp_df["昨收"], errors="coerce")
100
+ temp_df["成交量"] = pd.to_numeric(temp_df["成交量"], errors="coerce")
101
+ temp_df["成交额"] = pd.to_numeric(temp_df["成交额"], errors="coerce")
102
+ return temp_df
103
+
104
+
105
+ if __name__ == "__main__":
106
+ stock_hk_famous_spot_em_df = stock_hk_famous_spot_em()
107
+ print(stock_hk_famous_spot_em_df)
@@ -5,6 +5,7 @@ Date: 2024/1/16 15:30
5
5
  Desc: 同花顺-港股-分红派息
6
6
  https://stockpage.10jqka.com.cn/HK0700/bonus/
7
7
  """
8
+
8
9
  from io import StringIO
9
10
 
10
11
  import pandas as pd
@@ -57,7 +58,7 @@ def stock_hk_fhpx_detail_ths(symbol: str = "0700") -> pd.DataFrame:
57
58
  temp_df["过户日期起止日-截止"] = pd.to_datetime(
58
59
  temp_df["过户日期起止日-截止"], format="%Y-%m-%d", errors="coerce"
59
60
  ).dt.date
60
- temp_df.sort_values(['公告日期'], inplace=True, ignore_index=True)
61
+ temp_df.sort_values(["公告日期"], inplace=True, ignore_index=True)
61
62
  return temp_df
62
63
 
63
64
 
@@ -5,6 +5,7 @@ Date: 2023/3/25 22:15
5
5
  Desc: 东方财富个股人气榜-港股市场
6
6
  https://guba.eastmoney.com/rank/
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11