akshare 1.13.46__py3-none-any.whl → 1.17.99__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (388) hide show
  1. akshare/__init__.py +757 -161
  2. akshare/air/air_hebei.py +79 -53
  3. akshare/air/air_zhenqi.py +3 -7
  4. akshare/air/cons.py +1 -0
  5. akshare/air/crypto.js +1 -1
  6. akshare/air/outcrypto.js +1 -1
  7. akshare/air/sunrise_tad.py +32 -17
  8. akshare/article/cons.py +1 -0
  9. akshare/article/epu_index.py +4 -3
  10. akshare/article/ff_factor.py +19 -8
  11. akshare/article/fred_md.py +4 -1
  12. akshare/article/risk_rv.py +3 -8
  13. akshare/bank/bank_cbirc_2020.py +11 -11
  14. akshare/bank/cons.py +7 -6
  15. akshare/bond/bond_buy_back_em.py +228 -0
  16. akshare/bond/bond_cb_sina.py +1 -0
  17. akshare/bond/bond_cb_ths.py +17 -9
  18. akshare/bond/bond_cbond.py +19 -14
  19. akshare/bond/bond_china.py +38 -39
  20. akshare/bond/bond_china_money.py +75 -48
  21. akshare/bond/bond_convert.py +10 -9
  22. akshare/bond/bond_em.py +37 -17
  23. akshare/bond/bond_info_cm.py +28 -8
  24. akshare/bond/bond_issue_cninfo.py +73 -30
  25. akshare/bond/bond_summary.py +38 -37
  26. akshare/bond/bond_zh_cov.py +31 -40
  27. akshare/bond/bond_zh_sina.py +61 -51
  28. akshare/bond/cons.py +14 -11
  29. akshare/cal/__init__.py +0 -0
  30. akshare/cal/rv.py +170 -0
  31. akshare/cost/cost_living.py +7 -5
  32. akshare/crypto/__init__.py +1 -1
  33. akshare/crypto/crypto_bitcoin_cme.py +9 -7
  34. akshare/crypto/crypto_hold.py +4 -2
  35. akshare/currency/currency.py +1 -0
  36. akshare/currency/currency_china_bank_sina.py +11 -6
  37. akshare/currency/currency_safe.py +7 -6
  38. akshare/data/__init__.py +1 -1
  39. akshare/data/cninfo.js +1 -1
  40. akshare/datasets.py +10 -21
  41. akshare/economic/cons.py +10 -3
  42. akshare/economic/macro_australia.py +74 -69
  43. akshare/economic/macro_bank.py +95 -653
  44. akshare/economic/macro_canada.py +92 -81
  45. akshare/economic/macro_china.py +163 -117
  46. akshare/economic/macro_china_hk.py +0 -1
  47. akshare/economic/macro_china_nbs.py +24 -7
  48. akshare/economic/macro_euro.py +103 -56
  49. akshare/economic/macro_finance_ths.py +135 -0
  50. akshare/economic/macro_germany.py +1 -1
  51. akshare/economic/macro_info_ws.py +100 -0
  52. akshare/economic/macro_japan.py +0 -1
  53. akshare/economic/macro_other.py +1 -6
  54. akshare/economic/macro_swiss.py +2 -3
  55. akshare/economic/macro_uk.py +1 -1
  56. akshare/economic/macro_usa.py +7 -9
  57. akshare/economic/marco_cnbs.py +11 -6
  58. akshare/energy/energy_carbon.py +94 -126
  59. akshare/energy/energy_oil_em.py +1 -2
  60. akshare/event/cons.py +1 -0
  61. akshare/event/migration.py +3 -2
  62. akshare/exceptions.py +43 -0
  63. akshare/file_fold/calendar.json +245 -2
  64. akshare/forex/__init__.py +0 -0
  65. akshare/forex/cons.py +192 -0
  66. akshare/forex/forex_em.py +149 -0
  67. akshare/fortune/fortune_500.py +15 -48
  68. akshare/fortune/fortune_bloomberg.py +6 -3
  69. akshare/fortune/fortune_forbes_500.py +3 -6
  70. akshare/fortune/fortune_hurun.py +2 -1
  71. akshare/fortune/fortune_xincaifu_500.py +17 -14
  72. akshare/fund/fund_amac.py +38 -15
  73. akshare/fund/fund_announcement_em.py +145 -0
  74. akshare/fund/fund_aum_em.py +49 -35
  75. akshare/fund/fund_em.py +251 -220
  76. akshare/fund/fund_etf_em.py +44 -35
  77. akshare/fund/fund_etf_sina.py +76 -27
  78. akshare/fund/fund_etf_ths.py +95 -0
  79. akshare/fund/fund_fee_em.py +172 -0
  80. akshare/fund/fund_fhsp_em.py +42 -32
  81. akshare/fund/fund_init_em.py +8 -5
  82. akshare/fund/fund_lof_em.py +12 -19
  83. akshare/fund/fund_manager.py +25 -11
  84. akshare/fund/fund_overview_em.py +42 -0
  85. akshare/fund/fund_portfolio_em.py +78 -66
  86. akshare/fund/fund_position_lg.py +19 -8
  87. akshare/fund/fund_rank_em.py +90 -84
  88. akshare/fund/fund_rating.py +33 -12
  89. akshare/fund/fund_report_cninfo.py +63 -48
  90. akshare/fund/fund_scale_em.py +24 -13
  91. akshare/fund/fund_scale_sina.py +20 -10
  92. akshare/fund/fund_xq.py +3 -2
  93. akshare/futures/cons.py +141 -46
  94. akshare/futures/cot.py +89 -88
  95. akshare/futures/futures_basis.py +99 -33
  96. akshare/futures/futures_comex_em.py +1 -0
  97. akshare/futures/futures_comm_ctp.py +13 -2
  98. akshare/futures/futures_contract_detail.py +59 -9
  99. akshare/futures/futures_daily_bar.py +75 -62
  100. akshare/futures/futures_foreign.py +14 -8
  101. akshare/futures/futures_hf_em.py +215 -61
  102. akshare/futures/futures_hist_em.py +191 -0
  103. akshare/futures/futures_hq_sina.py +79 -61
  104. akshare/futures/futures_index_ccidx.py +24 -82
  105. akshare/futures/futures_inventory_99.py +70 -272
  106. akshare/futures/futures_inventory_em.py +14 -11
  107. akshare/futures/futures_news_shmet.py +2 -2
  108. akshare/futures/futures_roll_yield.py +11 -24
  109. akshare/futures/futures_rule.py +7 -3
  110. akshare/futures/futures_rule_em.py +38 -0
  111. akshare/futures/futures_settlement_price_sgx.py +21 -6
  112. akshare/futures/futures_stock_js.py +1 -2
  113. akshare/futures/futures_to_spot.py +43 -39
  114. akshare/futures/futures_warehouse_receipt.py +53 -48
  115. akshare/futures/futures_zh_sina.py +4 -4
  116. akshare/futures/receipt.py +298 -165
  117. akshare/futures/requests_fun.py +16 -3
  118. akshare/futures/symbol_var.py +32 -13
  119. akshare/futures_derivative/cons.py +100 -103
  120. akshare/futures_derivative/futures_contract_info_cffex.py +55 -39
  121. akshare/futures_derivative/futures_contract_info_czce.py +2 -0
  122. akshare/futures_derivative/futures_contract_info_dce.py +43 -17
  123. akshare/futures_derivative/futures_contract_info_gfex.py +43 -31
  124. akshare/futures_derivative/futures_contract_info_ine.py +43 -34
  125. akshare/futures_derivative/futures_contract_info_shfe.py +7 -8
  126. akshare/futures_derivative/futures_cot_sina.py +28 -19
  127. akshare/futures_derivative/futures_index_sina.py +25 -13
  128. akshare/fx/cons.py +12 -7
  129. akshare/fx/currency_investing.py +19 -285
  130. akshare/fx/fx_c_swap_cm.py +62 -0
  131. akshare/fx/fx_quote.py +3 -2
  132. akshare/fx/fx_quote_baidu.py +2 -1
  133. akshare/hf/__init__.py +1 -1
  134. akshare/hf/hf_sp500.py +8 -7
  135. akshare/index/cons.py +132 -28
  136. akshare/index/index_cflp.py +29 -26
  137. akshare/index/index_cni.py +89 -91
  138. akshare/index/index_cons.py +26 -10
  139. akshare/index/index_csindex.py +68 -0
  140. akshare/index/index_cx.py +263 -62
  141. akshare/index/index_drewry.py +17 -16
  142. akshare/index/index_eri.py +1 -0
  143. akshare/index/index_global_em.py +167 -0
  144. akshare/index/index_global_sina.py +82 -0
  145. akshare/index/index_kq_fz.py +17 -14
  146. akshare/index/index_kq_ss.py +1 -0
  147. akshare/index/index_option_qvix.py +351 -16
  148. akshare/index/index_research_sw.py +38 -38
  149. akshare/index/index_spot.py +9 -5
  150. akshare/index/index_stock_hk.py +6 -10
  151. akshare/index/index_stock_us_sina.py +1 -1
  152. akshare/index/index_stock_zh.py +193 -101
  153. akshare/index/index_stock_zh_csindex.py +15 -369
  154. akshare/index/index_sugar.py +18 -4
  155. akshare/index/index_sw.py +62 -34
  156. akshare/index/index_yw.py +53 -75
  157. akshare/index/index_zh_em.py +15 -82
  158. akshare/interest_rate/interbank_rate_em.py +14 -10
  159. akshare/movie/artist_yien.py +32 -5
  160. akshare/movie/jm.js +0 -1
  161. akshare/movie/movie_yien.py +92 -18
  162. akshare/movie/video_yien.py +28 -5
  163. akshare/news/__init__.py +1 -1
  164. akshare/news/news_baidu.py +395 -220
  165. akshare/news/news_cctv.py +38 -38
  166. akshare/news/news_stock.py +49 -13
  167. akshare/nlp/nlp_interface.py +7 -8
  168. akshare/option/cons.py +12 -12
  169. akshare/option/option_comm_qihuo.py +86 -0
  170. akshare/option/option_commodity.py +355 -211
  171. akshare/option/option_commodity_sina.py +22 -26
  172. akshare/option/option_contract_info_ctp.py +63 -0
  173. akshare/option/option_current_sse.py +61 -0
  174. akshare/option/option_current_szse.py +84 -0
  175. akshare/option/option_czce.py +37 -9
  176. akshare/option/option_daily_stats_sse_szse.py +145 -0
  177. akshare/option/option_em.py +4 -8
  178. akshare/option/option_finance.py +60 -12
  179. akshare/option/option_finance_sina.py +28 -26
  180. akshare/option/option_lhb_em.py +62 -57
  181. akshare/option/option_margin.py +62 -0
  182. akshare/option/option_premium_analysis_em.py +58 -53
  183. akshare/option/option_risk_analysis_em.py +11 -8
  184. akshare/option/option_risk_indicator_sse.py +18 -16
  185. akshare/option/option_value_analysis_em.py +62 -55
  186. akshare/other/__init__.py +1 -1
  187. akshare/other/other_car_cpca.py +20 -20
  188. akshare/pro/__init__.py +0 -1
  189. akshare/pro/client.py +6 -4
  190. akshare/pro/cons.py +3 -2
  191. akshare/pro/data_pro.py +6 -5
  192. akshare/qdii/__init__.py +0 -0
  193. akshare/qdii/qdii_jsl.py +233 -0
  194. akshare/qhkc/__init__.py +1 -6
  195. akshare/qhkc/qhkc_api.py +64 -22
  196. akshare/qhkc_web/__init__.py +1 -6
  197. akshare/qhkc_web/qhkc_fund.py +10 -6
  198. akshare/qhkc_web/qhkc_index.py +28 -14
  199. akshare/qhkc_web/qhkc_tool.py +62 -59
  200. akshare/rate/__init__.py +1 -1
  201. akshare/rate/repo_rate.py +36 -32
  202. akshare/reits/__init__.py +1 -1
  203. akshare/reits/reits_basic.py +149 -13
  204. akshare/request.py +117 -0
  205. akshare/spot/__init__.py +1 -1
  206. akshare/spot/spot_hog_soozhu.py +232 -0
  207. akshare/spot/spot_price_qh.py +121 -0
  208. akshare/spot/spot_sge.py +70 -9
  209. akshare/stock/cons.py +60 -23
  210. akshare/stock/stock_allotment_cninfo.py +10 -9
  211. akshare/stock/stock_ask_bid_em.py +3 -78
  212. akshare/stock/stock_board_concept_em.py +160 -35
  213. akshare/stock/stock_board_industry_em.py +163 -70
  214. akshare/stock/stock_cg_equity_mortgage.py +15 -11
  215. akshare/stock/stock_cg_guarantee.py +41 -51
  216. akshare/stock/stock_cg_lawsuit.py +36 -35
  217. akshare/stock/stock_dividend_cninfo.py +36 -16
  218. akshare/stock/stock_dzjy_em.py +347 -260
  219. akshare/stock/stock_fund_em.py +73 -64
  220. akshare/stock/stock_fund_hold.py +1 -2
  221. akshare/stock/stock_gsrl_em.py +1 -0
  222. akshare/stock/stock_hk_comparison_em.py +175 -0
  223. akshare/stock/stock_hk_famous.py +107 -0
  224. akshare/stock/stock_hk_fhpx_ths.py +2 -1
  225. akshare/stock/stock_hk_hot_rank_em.py +1 -0
  226. akshare/stock/stock_hk_sina.py +91 -42
  227. akshare/stock/stock_hold_control_cninfo.py +100 -15
  228. akshare/stock/stock_hold_control_em.py +4 -5
  229. akshare/stock/stock_hold_num_cninfo.py +18 -12
  230. akshare/stock/stock_hot_rank_em.py +4 -1
  231. akshare/stock/stock_hot_search_baidu.py +32 -19
  232. akshare/stock/stock_hot_up_em.py +4 -1
  233. akshare/stock/stock_hsgt_em.py +155 -0
  234. akshare/stock/stock_industry.py +1 -0
  235. akshare/stock/stock_industry_cninfo.py +25 -20
  236. akshare/stock/stock_industry_pe_cninfo.py +45 -31
  237. akshare/stock/stock_industry_sw.py +5 -9
  238. akshare/stock/stock_info.py +31 -19
  239. akshare/stock/stock_info_em.py +17 -11
  240. akshare/stock/stock_intraday_em.py +9 -80
  241. akshare/stock/stock_intraday_sina.py +2 -2
  242. akshare/stock/stock_ipo_summary_cninfo.py +25 -10
  243. akshare/stock/stock_new_cninfo.py +32 -19
  244. akshare/stock/stock_news_cx.py +39 -0
  245. akshare/stock/stock_profile_cninfo.py +9 -8
  246. akshare/stock/stock_profile_em.py +302 -0
  247. akshare/stock/stock_rank_forecast.py +8 -6
  248. akshare/stock/stock_repurchase_em.py +7 -2
  249. akshare/stock/stock_share_changes_cninfo.py +18 -14
  250. akshare/stock/stock_share_hold.py +24 -20
  251. akshare/stock/stock_stop.py +6 -6
  252. akshare/stock/stock_summary.py +153 -417
  253. akshare/stock/stock_us_famous.py +19 -11
  254. akshare/stock/stock_us_js.py +3 -2
  255. akshare/stock/stock_us_pink.py +38 -27
  256. akshare/stock/stock_us_sina.py +15 -12
  257. akshare/stock/stock_weibo_nlp.py +18 -20
  258. akshare/stock/stock_xq.py +36 -9
  259. akshare/stock/stock_zh_a_sina.py +58 -80
  260. akshare/stock/stock_zh_a_special.py +240 -243
  261. akshare/stock/stock_zh_a_tick_tx.py +11 -3
  262. akshare/stock/stock_zh_ah_tx.py +23 -26
  263. akshare/stock/stock_zh_b_sina.py +32 -55
  264. akshare/stock/stock_zh_comparison_em.py +250 -0
  265. akshare/stock/stock_zh_kcb_report.py +11 -9
  266. akshare/stock/stock_zh_kcb_sina.py +67 -64
  267. akshare/stock_a/__init__.py +0 -0
  268. akshare/stock_a/stock_board_concept_name_em.py +170 -0
  269. akshare/stock_a/stock_individual_fund_flow_rank.py +258 -0
  270. akshare/stock_a/stock_zh_a_spot.py +212 -0
  271. akshare/stock_feature/cons.py +1 -0
  272. akshare/stock_feature/stock_a_below_net_asset_statistics.py +5 -2
  273. akshare/stock_feature/stock_a_high_low.py +5 -2
  274. akshare/stock_feature/stock_a_indicator.py +15 -57
  275. akshare/stock_feature/stock_a_pe_and_pb.py +39 -9
  276. akshare/stock_feature/stock_account_em.py +0 -1
  277. akshare/stock_feature/stock_all_pb.py +2 -1
  278. akshare/stock_feature/stock_analyst_em.py +36 -30
  279. akshare/stock_feature/stock_board_concept_ths.py +144 -252
  280. akshare/stock_feature/stock_board_industry_ths.py +137 -401
  281. akshare/stock_feature/stock_buffett_index_lg.py +10 -8
  282. akshare/stock_feature/stock_classify_sina.py +3 -6
  283. akshare/stock_feature/stock_comment_em.py +81 -144
  284. akshare/stock_feature/stock_concept_futu.py +183 -0
  285. akshare/stock_feature/stock_congestion_lg.py +2 -1
  286. akshare/stock_feature/stock_cyq_em.py +5 -11
  287. akshare/stock_feature/stock_disclosure_cninfo.py +20 -10
  288. akshare/stock_feature/stock_dxsyl_em.py +121 -74
  289. akshare/stock_feature/stock_ebs_lg.py +5 -4
  290. akshare/stock_feature/stock_esg_sina.py +33 -15
  291. akshare/stock_feature/stock_fhps_em.py +62 -26
  292. akshare/stock_feature/stock_fhps_ths.py +34 -7
  293. akshare/stock_feature/stock_fund_flow.py +38 -25
  294. akshare/stock_feature/stock_gddh_em.py +19 -11
  295. akshare/stock_feature/stock_gdfx_em.py +226 -113
  296. akshare/stock_feature/stock_gdhs.py +75 -50
  297. akshare/stock_feature/stock_gdzjc_em.py +21 -10
  298. akshare/stock_feature/stock_gpzy_em.py +78 -46
  299. akshare/stock_feature/stock_gxl_lg.py +3 -2
  300. akshare/stock_feature/stock_hist_em.py +158 -237
  301. akshare/stock_feature/stock_hist_tx.py +13 -10
  302. akshare/stock_feature/stock_hk_valuation_baidu.py +20 -8
  303. akshare/stock_feature/stock_hot_xq.py +4 -6
  304. akshare/stock_feature/stock_hsgt_em.py +269 -97
  305. akshare/stock_feature/stock_hsgt_exchange_rate.py +115 -87
  306. akshare/stock_feature/stock_hsgt_min_em.py +13 -16
  307. akshare/stock_feature/stock_info.py +8 -81
  308. akshare/stock_feature/stock_inner_trade_xq.py +38 -31
  309. akshare/stock_feature/stock_irm_cninfo.py +32 -9
  310. akshare/stock_feature/stock_jgdy_em.py +43 -40
  311. akshare/stock_feature/stock_lh_yybpm.py +36 -37
  312. akshare/stock_feature/stock_lhb_em.py +165 -35
  313. akshare/stock_feature/stock_lhb_sina.py +93 -46
  314. akshare/stock_feature/stock_margin_em.py +101 -0
  315. akshare/stock_feature/{stock_sse_margin.py → stock_margin_sse.py} +21 -17
  316. akshare/stock_feature/{stock_szse_margin.py → stock_margin_szse.py} +7 -7
  317. akshare/stock_feature/stock_market_legu.py +4 -2
  318. akshare/stock_feature/stock_pankou_em.py +71 -35
  319. akshare/stock_feature/stock_qsjy_em.py +13 -4
  320. akshare/stock_feature/stock_report_em.py +152 -8
  321. akshare/stock_feature/stock_research_report_em.py +55 -20
  322. akshare/stock_feature/stock_sns_sseinfo.py +15 -12
  323. akshare/stock_feature/stock_sy_em.py +20 -15
  324. akshare/stock_feature/stock_technology_ths.py +152 -120
  325. akshare/stock_feature/stock_tfp_em.py +37 -14
  326. akshare/stock_feature/stock_three_report_em.py +120 -78
  327. akshare/stock_feature/stock_ttm_lyr.py +18 -9
  328. akshare/stock_feature/stock_value_em.py +83 -0
  329. akshare/stock_feature/stock_yjbb_em.py +58 -32
  330. akshare/stock_feature/stock_yjyg_cninfo.py +6 -2
  331. akshare/stock_feature/stock_yjyg_em.py +1 -1
  332. akshare/stock_feature/stock_yzxdr_em.py +24 -22
  333. akshare/stock_feature/stock_zdhtmx_em.py +20 -6
  334. akshare/stock_feature/stock_zh_valuation_baidu.py +3 -2
  335. akshare/stock_feature/stock_zh_vote_baidu.py +4 -1
  336. akshare/stock_feature/stock_ztb_em.py +39 -24
  337. akshare/stock_fundamental/__init__.py +1 -1
  338. akshare/stock_fundamental/stock_basic_info_xq.py +119 -0
  339. akshare/stock_fundamental/{stock_finance_hk.py → stock_finance_hk_em.py} +23 -16
  340. akshare/stock_fundamental/{stock_finance.py → stock_finance_sina.py} +203 -59
  341. akshare/stock_fundamental/stock_finance_ths.py +524 -57
  342. akshare/stock_fundamental/stock_finance_us_em.py +268 -0
  343. akshare/stock_fundamental/stock_gbjg_em.py +80 -0
  344. akshare/stock_fundamental/stock_hold.py +26 -17
  345. akshare/stock_fundamental/stock_ipo_declare.py +1 -0
  346. akshare/stock_fundamental/stock_kcb_detail_sse.py +10 -10
  347. akshare/stock_fundamental/stock_kcb_sse.py +26 -25
  348. akshare/stock_fundamental/stock_notice.py +41 -18
  349. akshare/stock_fundamental/stock_profit_forecast_em.py +31 -13
  350. akshare/stock_fundamental/stock_profit_forecast_hk_etnet.py +64 -41
  351. akshare/stock_fundamental/stock_profit_forecast_ths.py +86 -35
  352. akshare/stock_fundamental/stock_recommend.py +20 -4
  353. akshare/stock_fundamental/stock_register_em.py +448 -0
  354. akshare/stock_fundamental/stock_zygc.py +5 -62
  355. akshare/tool/trade_date_hist.py +1 -1
  356. akshare/utils/context.py +43 -0
  357. akshare/utils/demjson.py +2009 -1338
  358. akshare/utils/func.py +49 -2
  359. akshare/utils/multi_decrypt.py +53 -0
  360. akshare/utils/token_process.py +6 -5
  361. akshare/utils/tqdm.py +13 -3
  362. {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info}/METADATA +56 -86
  363. akshare-1.17.99.dist-info/RECORD +409 -0
  364. {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info}/WHEEL +1 -1
  365. {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info/licenses}/LICENSE +1 -1
  366. tests/test_func.py +3 -5
  367. akshare/bond/bond_futures.py +0 -50
  368. akshare/bond/bond_investing.py +0 -139
  369. akshare/crypto/crypto_hist_investing.py +0 -249
  370. akshare/fortune/fortune_it_juzi.py +0 -123
  371. akshare/fund/fund_announcement.py +0 -56
  372. akshare/futures/futures_international.py +0 -170
  373. akshare/futures/futures_news_baidu.py +0 -54
  374. akshare/futures/inventory_data.py +0 -100
  375. akshare/futures_derivative/futures_index_price_nh.py +0 -61
  376. akshare/futures_derivative/futures_index_return_nh.py +0 -47
  377. akshare/futures_derivative/futures_index_volatility_nh.py +0 -51
  378. akshare/futures_derivative/futures_other_index_nh.py +0 -145
  379. akshare/index/index_fear_greed_funddb.py +0 -78
  380. akshare/index/index_investing.py +0 -232
  381. akshare/sport/__init__.py +0 -6
  382. akshare/sport/sport_olympic.py +0 -27
  383. akshare/sport/sport_olympic_winter.py +0 -39
  384. akshare/stock_feature/stock_wencai.py +0 -104
  385. akshare/stock_fundamental/stock_mda_ym.py +0 -40
  386. akshare/stock_fundamental/stock_register.py +0 -292
  387. akshare-1.13.46.dist-info/RECORD +0 -380
  388. {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info}/top_level.txt +0 -0
@@ -1,7 +1,7 @@
1
1
  # -*- coding:utf-8 -*-
2
2
  # !/usr/bin/env python
3
3
  """
4
- Date: 2024/4/14 15:00
4
+ Date: 2025/3/4 23:00
5
5
  Desc: 东方财富网-数据中心-沪深港通持股
6
6
  https://data.eastmoney.com/hsgtcg/
7
7
  沪深港通详情: https://finance.eastmoney.com/news/1622,20161118685370149.html
@@ -10,7 +10,9 @@ https://data.eastmoney.com/hsgtcg/
10
10
  import pandas as pd
11
11
  import requests
12
12
  from bs4 import BeautifulSoup
13
- from tqdm import tqdm
13
+
14
+ from akshare.utils.tqdm import get_tqdm
15
+ from akshare.utils.func import fetch_paginated_data
14
16
 
15
17
 
16
18
  def stock_hsgt_fund_flow_summary_em() -> pd.DataFrame:
@@ -35,7 +37,6 @@ def stock_hsgt_fund_flow_summary_em() -> pd.DataFrame:
35
37
  "sortColumns": "MUTUAL_TYPE",
36
38
  "source": "WEB",
37
39
  "client": "WEB",
38
- "_": "1669047266881",
39
40
  }
40
41
  r = requests.get(url, params=params)
41
42
  data_json = r.json()
@@ -100,22 +101,17 @@ def stock_hk_ggt_components_em() -> pd.DataFrame:
100
101
  url = "https://33.push2.eastmoney.com/api/qt/clist/get"
101
102
  params = {
102
103
  "pn": "1",
103
- "pz": "5000",
104
+ "pz": "100",
104
105
  "po": "1",
105
106
  "np": "1",
106
107
  "ut": "bd1d9ddb04089700cf9c27f6f7426281",
107
108
  "fltt": "2",
108
- "fid": "f3",
109
+ "fid": "f12",
109
110
  "fs": "b:DLMK0146,b:DLMK0144",
110
111
  "fields": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f23,f24,"
111
112
  "f25,f26,f22,f33,f11,f62,f128,f136,f115,f152",
112
- "_": "1639974456250",
113
113
  }
114
- r = requests.get(url, params=params)
115
- data_json = r.json()
116
- temp_df = pd.DataFrame(data_json["data"]["diff"])
117
- temp_df.reset_index(inplace=True)
118
- temp_df["index"] = temp_df.index + 1
114
+ temp_df = fetch_paginated_data(url=url, base_params=params)
119
115
  temp_df.columns = [
120
116
  "序号",
121
117
  "-",
@@ -187,9 +183,9 @@ def stock_hsgt_hold_stock_em(
187
183
  """
188
184
  url = "https://data.eastmoney.com/hsgtcg/list.html"
189
185
  r = requests.get(url)
190
- soup = BeautifulSoup(r.text, "lxml")
186
+ soup = BeautifulSoup(r.text, features="lxml")
191
187
  date = (
192
- soup.find("div", attrs={"class": "title"})
188
+ soup.find(name="div", attrs={"class": "title"})
193
189
  .find("span")
194
190
  .text.strip("(")
195
191
  .strip(")")
@@ -232,12 +228,13 @@ def stock_hsgt_hold_stock_em(
232
228
  data_json = r.json()
233
229
  page_num = data_json["result"]["pages"]
234
230
  big_df = pd.DataFrame()
231
+ tqdm = get_tqdm()
235
232
  for page in tqdm(range(1, page_num + 1), leave=False):
236
233
  params.update({"pageNumber": page})
237
234
  r = requests.get(url, params=params)
238
235
  data_json = r.json()
239
236
  temp_df = pd.DataFrame(data_json["result"]["data"])
240
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
237
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
241
238
 
242
239
  big_df.reset_index(inplace=True)
243
240
  big_df["index"] = range(1, len(big_df) + 1)
@@ -375,17 +372,18 @@ def stock_hsgt_stock_statistics_em(
375
372
  params.update(
376
373
  {"filter": f"""(INTERVAL_TYPE="1")(RN=1)(TRADE_DATE='{start_date}')"""}
377
374
  )
378
- url = "http://datacenter-web.eastmoney.com/api/data/v1/get"
375
+ url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
379
376
  r = requests.get(url, params=params)
380
377
  data_json = r.json()
381
378
  total_page = data_json["result"]["pages"]
382
379
  big_df = pd.DataFrame()
380
+ tqdm = get_tqdm()
383
381
  for page in tqdm(range(1, int(total_page) + 1), leave=False):
384
382
  params.update({"pageNumber": page})
385
383
  r = requests.get(url, params=params)
386
384
  data_json = r.json()
387
385
  temp_df = pd.DataFrame(data_json["result"]["data"])
388
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
386
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
389
387
 
390
388
  big_df.columns = [
391
389
  "-",
@@ -398,8 +396,8 @@ def stock_hsgt_stock_statistics_em(
398
396
  "-",
399
397
  "-",
400
398
  "-",
401
- "持股数量",
402
399
  "持股市值",
400
+ "持股数量",
403
401
  "-",
404
402
  "-",
405
403
  "-",
@@ -474,12 +472,13 @@ def stock_hsgt_stock_statistics_em(
474
472
  data_json = r.json()
475
473
  total_page = data_json["result"]["pages"]
476
474
  big_df = pd.DataFrame()
475
+ tqdm = get_tqdm()
477
476
  for page in tqdm(range(1, int(total_page) + 1), leave=False):
478
477
  params.update({"pageNumber": page})
479
478
  r = requests.get(url, params=params)
480
479
  data_json = r.json()
481
480
  temp_df = pd.DataFrame(data_json["result"]["data"])
482
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
481
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
483
482
 
484
483
  big_df.columns = [
485
484
  "-",
@@ -576,17 +575,18 @@ def stock_hsgt_stock_statistics_em(
576
575
  "filter": f"""(INTERVAL_TYPE="1")(MUTUAL_TYPE="001")(TRADE_DATE='{start_date}')"""
577
576
  }
578
577
  )
579
- url = "http://datacenter-web.eastmoney.com/api/data/v1/get"
578
+ url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
580
579
  r = requests.get(url, params=params)
581
580
  data_json = r.json()
582
581
  total_page = data_json["result"]["pages"]
583
582
  big_df = pd.DataFrame()
583
+ tqdm = get_tqdm()
584
584
  for page in tqdm(range(1, int(total_page) + 1), leave=False):
585
585
  params.update({"pageNumber": page})
586
586
  r = requests.get(url, params=params)
587
587
  data_json = r.json()
588
588
  temp_df = pd.DataFrame(data_json["result"]["data"])
589
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
589
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
590
590
  big_df.columns = [
591
591
  "-",
592
592
  "-",
@@ -673,7 +673,8 @@ def stock_hsgt_stock_statistics_em(
673
673
  "columns": "ALL",
674
674
  "source": "WEB",
675
675
  "client": "WEB",
676
- "filter": f"""(INTERVAL_TYPE="1")(MUTUAL_TYPE="003")(TRADE_DATE>='{start_date}')(TRADE_DATE<='{end_date}')""",
676
+ "filter": f"""(INTERVAL_TYPE="1")(MUTUAL_TYPE="003")(TRADE_DATE
677
+ >='{start_date}')(TRADE_DATE<='{end_date}')""",
677
678
  "reportName": "RPT_MUTUAL_STOCK_NORTHSTA",
678
679
  }
679
680
  if start_date == end_date:
@@ -682,17 +683,18 @@ def stock_hsgt_stock_statistics_em(
682
683
  "filter": f"""(INTERVAL_TYPE="1")(MUTUAL_TYPE="003")(TRADE_DATE='{start_date}')"""
683
684
  }
684
685
  )
685
- url = "http://datacenter-web.eastmoney.com/api/data/v1/get"
686
+ url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
686
687
  r = requests.get(url, params=params)
687
688
  data_json = r.json()
688
689
  total_page = data_json["result"]["pages"]
689
690
  big_df = pd.DataFrame()
691
+ tqdm = get_tqdm()
690
692
  for page in tqdm(range(1, int(total_page) + 1), leave=False):
691
693
  params.update({"pageNumber": page})
692
694
  r = requests.get(url, params=params)
693
695
  data_json = r.json()
694
696
  temp_df = pd.DataFrame(data_json["result"]["data"])
695
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
697
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
696
698
  big_df.columns = [
697
699
  "-",
698
700
  "-",
@@ -792,6 +794,10 @@ def stock_hsgt_institution_statistics_em(
792
794
  """
793
795
  start_date = "-".join([start_date[:4], start_date[4:6], start_date[6:]])
794
796
  end_date = "-".join([end_date[:4], end_date[4:6], end_date[6:]])
797
+ headers = {
798
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
799
+ "Chrome/114.0.0.0 Safari/537.36"
800
+ }
795
801
  if market == "南向持股":
796
802
  params = {
797
803
  "sortColumns": "HOLD_DATE",
@@ -804,9 +810,6 @@ def stock_hsgt_institution_statistics_em(
804
810
  "client": "WEB",
805
811
  "filter": f"""(MARKET_TYPE="S")(HOLD_DATE>='{start_date}')(HOLD_DATE<='{end_date}')""",
806
812
  }
807
- headers = {
808
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"
809
- }
810
813
  url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
811
814
  r = requests.get(url, params=params, headers=headers)
812
815
  data_json = r.json()
@@ -842,12 +845,20 @@ def stock_hsgt_institution_statistics_em(
842
845
  "持股市值变化-10日",
843
846
  ]
844
847
  ]
845
- temp_df["持股日期"] = pd.to_datetime(temp_df["持股日期"]).dt.date
846
- temp_df["持股只数"] = pd.to_numeric(temp_df["持股只数"])
847
- temp_df["持股市值"] = pd.to_numeric(temp_df["持股市值"])
848
- temp_df["持股市值变化-1日"] = pd.to_numeric(temp_df["持股市值变化-1日"])
849
- temp_df["持股市值变化-5日"] = pd.to_numeric(temp_df["持股市值变化-5日"])
850
- temp_df["持股市值变化-10日"] = pd.to_numeric(temp_df["持股市值变化-10日"])
848
+ temp_df["持股日期"] = pd.to_datetime(
849
+ temp_df["持股日期"], errors="coerce"
850
+ ).dt.date
851
+ temp_df["持股只数"] = pd.to_numeric(temp_df["持股只数"], errors="coerce")
852
+ temp_df["持股市值"] = pd.to_numeric(temp_df["持股市值"], errors="coerce")
853
+ temp_df["持股市值变化-1日"] = pd.to_numeric(
854
+ temp_df["持股市值变化-1日"], errors="coerce"
855
+ )
856
+ temp_df["持股市值变化-5日"] = pd.to_numeric(
857
+ temp_df["持股市值变化-5日"], errors="coerce"
858
+ )
859
+ temp_df["持股市值变化-10日"] = pd.to_numeric(
860
+ temp_df["持股市值变化-10日"], errors="coerce"
861
+ )
851
862
  return temp_df
852
863
 
853
864
  elif market == "北向持股":
@@ -862,20 +873,18 @@ def stock_hsgt_institution_statistics_em(
862
873
  "client": "WEB",
863
874
  "filter": f"""(MARKET_TYPE="N")(HOLD_DATE>='{start_date}')(HOLD_DATE<='{end_date}')""",
864
875
  }
865
- headers = {
866
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"
867
- }
868
876
  url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
869
877
  r = requests.get(url, params=params, headers=headers)
870
878
  data_json = r.json()
871
879
  total_page = data_json["result"]["pages"]
872
880
  big_df = pd.DataFrame()
881
+ tqdm = get_tqdm()
873
882
  for page in tqdm(range(1, total_page + 1), leave=False):
874
883
  params.update({"pageNumber": page})
875
884
  r = requests.get(url, params=params, headers=headers)
876
885
  data_json = r.json()
877
886
  temp_df = pd.DataFrame(data_json["result"]["data"])
878
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
887
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
879
888
  big_df.columns = [
880
889
  "持股日期",
881
890
  "_",
@@ -907,12 +916,18 @@ def stock_hsgt_institution_statistics_em(
907
916
  "持股市值变化-10日",
908
917
  ]
909
918
  ]
910
- big_df["持股日期"] = pd.to_datetime(big_df["持股日期"]).dt.date
911
- big_df["持股只数"] = pd.to_numeric(big_df["持股只数"])
912
- big_df["持股市值"] = pd.to_numeric(big_df["持股市值"])
913
- big_df["持股市值变化-1日"] = pd.to_numeric(big_df["持股市值变化-1日"])
914
- big_df["持股市值变化-5日"] = pd.to_numeric(big_df["持股市值变化-5日"])
915
- big_df["持股市值变化-10日"] = pd.to_numeric(big_df["持股市值变化-10日"])
919
+ big_df["持股日期"] = pd.to_datetime(big_df["持股日期"], errors="coerce").dt.date
920
+ big_df["持股只数"] = pd.to_numeric(big_df["持股只数"], errors="coerce")
921
+ big_df["持股市值"] = pd.to_numeric(big_df["持股市值"], errors="coerce")
922
+ big_df["持股市值变化-1日"] = pd.to_numeric(
923
+ big_df["持股市值变化-1日"], errors="coerce"
924
+ )
925
+ big_df["持股市值变化-5日"] = pd.to_numeric(
926
+ big_df["持股市值变化-5日"], errors="coerce"
927
+ )
928
+ big_df["持股市值变化-10日"] = pd.to_numeric(
929
+ big_df["持股市值变化-10日"], errors="coerce"
930
+ )
916
931
  return big_df
917
932
  elif market == "沪股通持股":
918
933
  params = {
@@ -926,20 +941,18 @@ def stock_hsgt_institution_statistics_em(
926
941
  "client": "WEB",
927
942
  "filter": f"""(MARKET_TYPE="001")(HOLD_DATE>='{start_date}')(HOLD_DATE<='{end_date}')""",
928
943
  }
929
- headers = {
930
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"
931
- }
932
944
  url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
933
945
  r = requests.get(url, params=params, headers=headers)
934
946
  data_json = r.json()
935
947
  total_page = data_json["result"]["pages"]
936
948
  big_df = pd.DataFrame()
949
+ tqdm = get_tqdm()
937
950
  for page in tqdm(range(1, total_page + 1), leave=False):
938
951
  params.update({"pageNumber": page})
939
952
  r = requests.get(url, params=params, headers=headers)
940
953
  data_json = r.json()
941
954
  temp_df = pd.DataFrame(data_json["result"]["data"])
942
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
955
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
943
956
  big_df.columns = [
944
957
  "持股日期",
945
958
  "_",
@@ -971,12 +984,18 @@ def stock_hsgt_institution_statistics_em(
971
984
  "持股市值变化-10日",
972
985
  ]
973
986
  ]
974
- big_df["持股日期"] = pd.to_datetime(big_df["持股日期"]).dt.date
975
- big_df["持股只数"] = pd.to_numeric(big_df["持股只数"])
976
- big_df["持股市值"] = pd.to_numeric(big_df["持股市值"])
977
- big_df["持股市值变化-1日"] = pd.to_numeric(big_df["持股市值变化-1日"])
978
- big_df["持股市值变化-5日"] = pd.to_numeric(big_df["持股市值变化-5日"])
979
- big_df["持股市值变化-10日"] = pd.to_numeric(big_df["持股市值变化-10日"])
987
+ big_df["持股日期"] = pd.to_datetime(big_df["持股日期"], errors="coerce").dt.date
988
+ big_df["持股只数"] = pd.to_numeric(big_df["持股只数"], errors="coerce")
989
+ big_df["持股市值"] = pd.to_numeric(big_df["持股市值"], errors="coerce")
990
+ big_df["持股市值变化-1日"] = pd.to_numeric(
991
+ big_df["持股市值变化-1日"], errors="coerce"
992
+ )
993
+ big_df["持股市值变化-5日"] = pd.to_numeric(
994
+ big_df["持股市值变化-5日"], errors="coerce"
995
+ )
996
+ big_df["持股市值变化-10日"] = pd.to_numeric(
997
+ big_df["持股市值变化-10日"], errors="coerce"
998
+ )
980
999
  return big_df
981
1000
  elif market == "深股通持股":
982
1001
  params = {
@@ -990,20 +1009,18 @@ def stock_hsgt_institution_statistics_em(
990
1009
  "client": "WEB",
991
1010
  "filter": f"""(MARKET_TYPE="003")(HOLD_DATE>='{start_date}')(HOLD_DATE<='{end_date}')""",
992
1011
  }
993
- headers = {
994
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"
995
- }
996
1012
  url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
997
1013
  r = requests.get(url, params=params, headers=headers)
998
1014
  data_json = r.json()
999
1015
  total_page = data_json["result"]["pages"]
1000
1016
  big_df = pd.DataFrame()
1017
+ tqdm = get_tqdm()
1001
1018
  for page in tqdm(range(1, total_page + 1), leave=False):
1002
1019
  params.update({"pageNumber": page})
1003
1020
  r = requests.get(url, params=params, headers=headers)
1004
1021
  data_json = r.json()
1005
1022
  temp_df = pd.DataFrame(data_json["result"]["data"])
1006
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
1023
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
1007
1024
  big_df.columns = [
1008
1025
  "持股日期",
1009
1026
  "_",
@@ -1035,12 +1052,18 @@ def stock_hsgt_institution_statistics_em(
1035
1052
  "持股市值变化-10日",
1036
1053
  ]
1037
1054
  ]
1038
- big_df["持股日期"] = pd.to_datetime(big_df["持股日期"]).dt.date
1039
- big_df["持股只数"] = pd.to_numeric(big_df["持股只数"])
1040
- big_df["持股市值"] = pd.to_numeric(big_df["持股市值"])
1041
- big_df["持股市值变化-1日"] = pd.to_numeric(big_df["持股市值变化-1日"])
1042
- big_df["持股市值变化-5日"] = pd.to_numeric(big_df["持股市值变化-5日"])
1043
- big_df["持股市值变化-10日"] = pd.to_numeric(big_df["持股市值变化-10日"])
1055
+ big_df["持股日期"] = pd.to_datetime(big_df["持股日期"], errors="coerce").dt.date
1056
+ big_df["持股只数"] = pd.to_numeric(big_df["持股只数"], errors="coerce")
1057
+ big_df["持股市值"] = pd.to_numeric(big_df["持股市值"], errors="coerce")
1058
+ big_df["持股市值变化-1日"] = pd.to_numeric(
1059
+ big_df["持股市值变化-1日"], errors="coerce"
1060
+ )
1061
+ big_df["持股市值变化-5日"] = pd.to_numeric(
1062
+ big_df["持股市值变化-5日"], errors="coerce"
1063
+ )
1064
+ big_df["持股市值变化-10日"] = pd.to_numeric(
1065
+ big_df["持股市值变化-10日"], errors="coerce"
1066
+ )
1044
1067
  return big_df
1045
1068
 
1046
1069
 
@@ -1053,6 +1076,10 @@ def stock_hsgt_hist_em(symbol: str = "北向资金") -> pd.DataFrame:
1053
1076
  :return: 沪深港通历史数据
1054
1077
  :rtype: pandas.DataFrame
1055
1078
  """
1079
+ import warnings
1080
+
1081
+ warnings.filterwarnings(action="ignore", category=FutureWarning)
1082
+ url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
1056
1083
  symbol_map = {
1057
1084
  "北向资金": "5",
1058
1085
  "沪股通": "1",
@@ -1061,7 +1088,6 @@ def stock_hsgt_hist_em(symbol: str = "北向资金") -> pd.DataFrame:
1061
1088
  "港股通沪": "2",
1062
1089
  "港股通深": "4",
1063
1090
  }
1064
- url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
1065
1091
  params = {
1066
1092
  "sortColumns": "TRADE_DATE",
1067
1093
  "sortTypes": "-1",
@@ -1076,13 +1102,16 @@ def stock_hsgt_hist_em(symbol: str = "北向资金") -> pd.DataFrame:
1076
1102
  r = requests.get(url, params=params)
1077
1103
  data_json = r.json()
1078
1104
  total_page = data_json["result"]["pages"]
1079
- big_df = pd.DataFrame()
1105
+ temp_list = []
1106
+ tqdm = get_tqdm()
1080
1107
  for page in tqdm(range(1, int(total_page) + 1), leave=False):
1081
1108
  params.update({"pageNumber": page})
1082
1109
  r = requests.get(url, params=params)
1083
1110
  data_json = r.json()
1084
1111
  temp_df = pd.DataFrame(data_json["result"]["data"])
1085
- big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
1112
+ temp_list.append(temp_df)
1113
+
1114
+ big_df = pd.concat(objs=temp_list, ignore_index=True)
1086
1115
  if symbol == "北向资金":
1087
1116
  index_name = "沪深300"
1088
1117
  elif symbol == "沪股通":
@@ -1173,7 +1202,7 @@ def stock_hsgt_board_rank_em(
1173
1202
  """
1174
1203
  url = "https://data.eastmoney.com/hsgtcg/hy.html"
1175
1204
  r = requests.get(url)
1176
- soup = BeautifulSoup(r.text, "lxml")
1205
+ soup = BeautifulSoup(r.text, features="lxml")
1177
1206
  current_date = soup.find(attrs={"id": "bkph_date"}).text.strip("(").strip(")")
1178
1207
  symbol_map = {
1179
1208
  "北向资金增持行业板块排行": "5",
@@ -1298,30 +1327,43 @@ def stock_hsgt_board_rank_em(
1298
1327
  return temp_df
1299
1328
 
1300
1329
 
1301
- def stock_hsgt_individual_em(stock: str = "002008") -> pd.DataFrame:
1330
+ def __stock_hsgt_individual_zh_hk_em(symbol: str = "00700") -> pd.DataFrame:
1302
1331
  """
1303
1332
  东方财富-数据中心-沪深港通-沪深港通持股-具体股票
1304
- https://data.eastmoney.com/hsgtcg/StockHdStatistics/002008.html
1305
- :param stock: 股票代码
1306
- :type stock: str
1333
+ https://data.eastmoney.com/hsgt/StockHdDetail/00700.html
1334
+ :param symbol: 股票代码
1335
+ :type symbol: str
1307
1336
  :return: 具体股票-沪深港通持股
1308
1337
  :rtype: pandas.DataFrame
1309
1338
  """
1310
- url = "http://datacenter-web.eastmoney.com/api/data/v1/get"
1339
+ url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
1311
1340
  params = {
1312
1341
  "sortColumns": "TRADE_DATE",
1313
1342
  "sortTypes": "-1",
1314
1343
  "pageSize": "500",
1315
1344
  "pageNumber": "1",
1316
- "reportName": "RPT_MUTUAL_HOLDSTOCKNORTH_STA",
1345
+ "reportName": "RPT_MUTUAL_STOCK_HOLDRANKS",
1317
1346
  "columns": "ALL",
1318
1347
  "source": "WEB",
1319
1348
  "client": "WEB",
1320
- "filter": f"""(SECURITY_CODE="{stock}")(TRADE_DATE>='2020-07-25')""",
1349
+ "filter": f"""(SECUCODE="{symbol}.HK")(MUTUAL_TYPE="002")""",
1321
1350
  }
1322
1351
  r = requests.get(url, params=params)
1323
1352
  data_json = r.json()
1353
+ total_page = data_json["result"]["pages"]
1324
1354
  temp_df = pd.DataFrame(data_json["result"]["data"])
1355
+ for page in range(1, total_page + 1):
1356
+ params.update({"pageNumber": str(page)})
1357
+ r = requests.get(url, params=params)
1358
+ data_json = r.json()
1359
+ if page == 1:
1360
+ temp_df = pd.DataFrame(data_json["result"]["data"])
1361
+ else:
1362
+ temp_df = pd.concat(
1363
+ objs=[temp_df, pd.DataFrame(data_json["result"]["data"])],
1364
+ ignore_index=True,
1365
+ )
1366
+
1325
1367
  temp_df.rename(
1326
1368
  columns={
1327
1369
  "SECURITY_INNER_CODE": "-",
@@ -1357,18 +1399,135 @@ def stock_hsgt_individual_em(stock: str = "002008") -> pd.DataFrame:
1357
1399
  "持股市值变化-10日",
1358
1400
  ]
1359
1401
  ]
1360
- temp_df["持股日期"] = pd.to_datetime(temp_df["持股日期"]).dt.date
1361
- temp_df["当日收盘价"] = pd.to_numeric(temp_df["当日收盘价"])
1362
- temp_df["当日涨跌幅"] = pd.to_numeric(temp_df["当日涨跌幅"])
1363
- temp_df["持股数量"] = pd.to_numeric(temp_df["持股数量"])
1364
- temp_df["持股市值"] = pd.to_numeric(temp_df["持股市值"])
1365
- temp_df["持股数量占A股百分比"] = pd.to_numeric(temp_df["持股数量占A股百分比"])
1366
- temp_df["持股市值变化-1日"] = pd.to_numeric(temp_df["持股市值变化-1日"])
1367
- temp_df["持股市值变化-5日"] = pd.to_numeric(temp_df["持股市值变化-5日"])
1368
- temp_df["持股市值变化-10日"] = pd.to_numeric(temp_df["持股市值变化-10日"])
1402
+ temp_df["持股日期"] = pd.to_datetime(temp_df["持股日期"], errors="coerce").dt.date
1403
+ temp_df["当日收盘价"] = pd.to_numeric(temp_df["当日收盘价"], errors="coerce")
1404
+ temp_df["当日涨跌幅"] = pd.to_numeric(temp_df["当日涨跌幅"], errors="coerce")
1405
+ temp_df["持股数量"] = pd.to_numeric(temp_df["持股数量"], errors="coerce")
1406
+ temp_df["持股市值"] = pd.to_numeric(temp_df["持股市值"], errors="coerce")
1407
+ temp_df["持股数量占A股百分比"] = pd.to_numeric(
1408
+ temp_df["持股数量占A股百分比"], errors="coerce"
1409
+ )
1410
+ temp_df["持股市值变化-1日"] = pd.to_numeric(
1411
+ temp_df["持股市值变化-1日"], errors="coerce"
1412
+ )
1413
+ temp_df["持股市值变化-5日"] = pd.to_numeric(
1414
+ temp_df["持股市值变化-5日"], errors="coerce"
1415
+ )
1416
+ temp_df["持股市值变化-10日"] = pd.to_numeric(
1417
+ temp_df["持股市值变化-10日"], errors="coerce"
1418
+ )
1419
+ temp_df.sort_values("持股日期", ignore_index=True, inplace=True)
1420
+ return temp_df
1421
+
1422
+
1423
+ def __stock_hsgt_individual_zh_a_em(symbol: str = "002008") -> pd.DataFrame:
1424
+ """
1425
+ 东方财富-数据中心-沪深港通-沪深港通持股-具体股票
1426
+ https://data.eastmoney.com/hsgt/StockHdStatistics/002008.html
1427
+ :param symbol: 股票代码
1428
+ :type symbol: str
1429
+ :return: 具体股票-沪深港通持股
1430
+ :rtype: pandas.DataFrame
1431
+ """
1432
+ url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
1433
+ params = {
1434
+ "sortColumns": "TRADE_DATE",
1435
+ "sortTypes": "-1",
1436
+ "pageSize": "500",
1437
+ "pageNumber": "1",
1438
+ "reportName": "RPT_MUTUAL_HOLDSTOCKNDATE_STA",
1439
+ "columns": "ALL",
1440
+ "source": "WEB",
1441
+ "client": "WEB",
1442
+ "filter": f"""(SECURITY_CODE="{symbol}")(INTERVAL_TYPE="1")""",
1443
+ }
1444
+ r = requests.get(url, params=params)
1445
+ data_json = r.json()
1446
+ total_page = data_json["result"]["pages"]
1447
+ temp_df = pd.DataFrame(data_json["result"]["data"])
1448
+ for page in range(1, total_page + 1):
1449
+ params.update({"pageNumber": str(page)})
1450
+ r = requests.get(url, params=params)
1451
+ data_json = r.json()
1452
+ if page == 1:
1453
+ temp_df = pd.DataFrame(data_json["result"]["data"])
1454
+ else:
1455
+ temp_df = pd.concat(
1456
+ objs=[temp_df, pd.DataFrame(data_json["result"]["data"])],
1457
+ ignore_index=True,
1458
+ )
1459
+
1460
+ temp_df.rename(
1461
+ columns={
1462
+ "SECURITY_INNER_CODE": "-",
1463
+ "SECUCODE": "-",
1464
+ "TRADE_DATE": "持股日期",
1465
+ "SECURITY_CODE": "-",
1466
+ "SECURITY_NAME": "-",
1467
+ "MUTUAL_TYPE": "-",
1468
+ "CHANGE_RATE": "当日涨跌幅",
1469
+ "CLOSE_PRICE": "当日收盘价",
1470
+ "HOLD_SHARES": "持股数量",
1471
+ "HOLD_MARKET_CAP": "持股市值",
1472
+ "A_SHARES_RATIO": "-",
1473
+ "HOLD_SHARES_RATIO": "持股数量占A股百分比",
1474
+ "FREE_SHARES_RATIO": "-",
1475
+ "TOTAL_SHARES_RATIO": "-",
1476
+ "HMC_CHANGE": "今日持股市值变化",
1477
+ "ADD_SHARES_REPAIR": "今日增持股数",
1478
+ "PREDICT_AMC": "今日增持资金",
1479
+ },
1480
+ inplace=True,
1481
+ )
1482
+ temp_df = temp_df[
1483
+ [
1484
+ "持股日期",
1485
+ "当日收盘价",
1486
+ "当日涨跌幅",
1487
+ "持股数量",
1488
+ "持股市值",
1489
+ "持股数量占A股百分比",
1490
+ "今日增持股数",
1491
+ "今日增持资金",
1492
+ "今日持股市值变化",
1493
+ ]
1494
+ ]
1495
+ temp_df["持股日期"] = pd.to_datetime(temp_df["持股日期"], errors="coerce").dt.date
1496
+ temp_df["当日收盘价"] = pd.to_numeric(temp_df["当日收盘价"], errors="coerce")
1497
+ temp_df["当日涨跌幅"] = pd.to_numeric(temp_df["当日涨跌幅"], errors="coerce")
1498
+ temp_df["持股数量"] = pd.to_numeric(temp_df["持股数量"], errors="coerce")
1499
+ temp_df["持股市值"] = pd.to_numeric(temp_df["持股市值"], errors="coerce")
1500
+ temp_df["持股数量占A股百分比"] = pd.to_numeric(
1501
+ temp_df["持股数量占A股百分比"], errors="coerce"
1502
+ )
1503
+ temp_df["今日增持股数"] = pd.to_numeric(
1504
+ temp_df["今日增持股数"], errors="coerce"
1505
+ )
1506
+ temp_df["今日增持资金"] = pd.to_numeric(
1507
+ temp_df["今日增持资金"], errors="coerce"
1508
+ )
1509
+ temp_df["今日持股市值变化"] = pd.to_numeric(
1510
+ temp_df["今日持股市值变化"], errors="coerce"
1511
+ )
1512
+ temp_df.sort_values("持股日期", ignore_index=True, inplace=True)
1369
1513
  return temp_df
1370
1514
 
1371
1515
 
1516
+ def stock_hsgt_individual_em(symbol: str = "002008") -> pd.DataFrame:
1517
+ """
1518
+ 东方财富-数据中心-沪深港通-沪深港通持股-具体股票
1519
+ https://data.eastmoney.com/hsgt/StockHdDetail/002008.html
1520
+ :param symbol: 股票代码
1521
+ :type symbol: str
1522
+ :return: 具体股票-沪深港通持股
1523
+ :rtype: pandas.DataFrame
1524
+ """
1525
+ if len(symbol) == 6:
1526
+ return __stock_hsgt_individual_zh_a_em(symbol=symbol)
1527
+ else:
1528
+ return __stock_hsgt_individual_zh_hk_em(symbol=symbol)
1529
+
1530
+
1372
1531
  def stock_hsgt_individual_detail_em(
1373
1532
  symbol: str = "002008",
1374
1533
  start_date: str = "20220130",
@@ -1386,7 +1545,7 @@ def stock_hsgt_individual_detail_em(
1386
1545
  :return: 沪深港通持股-具体股票详情
1387
1546
  :rtype: pandas.DataFrame
1388
1547
  """
1389
- url = "http://datacenter-web.eastmoney.com/api/data/v1/get"
1548
+ url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
1390
1549
  params = {
1391
1550
  "sortColumns": "HOLD_DATE",
1392
1551
  "sortTypes": "-1",
@@ -1396,7 +1555,9 @@ def stock_hsgt_individual_detail_em(
1396
1555
  "columns": "ALL",
1397
1556
  "source": "WEB",
1398
1557
  "client": "WEB",
1399
- "filter": f"""(SECURITY_CODE="{symbol}")(MARKET_CODE="003")(HOLD_DATE>='{'-'.join([start_date[:4], start_date[4:6], start_date[6:]])}')(HOLD_DATE<='{'-'.join([end_date[:4], end_date[4:6], end_date[6:]])}')""",
1558
+ "filter": f"""(SECURITY_CODE="{symbol}")(MARKET_CODE="003")(HOLD_DATE
1559
+ >='{'-'.join([start_date[:4], start_date[4:6], start_date[6:]])}')(HOLD_DATE
1560
+ <='{'-'.join([end_date[:4], end_date[4:6], end_date[6:]])}')""",
1400
1561
  }
1401
1562
  r = requests.get(url, params=params)
1402
1563
  data_json = r.json()
@@ -1405,19 +1566,22 @@ def stock_hsgt_individual_detail_em(
1405
1566
  except TypeError:
1406
1567
  params.update(
1407
1568
  {
1408
- "filter": f"""(SECURITY_CODE="{symbol}")(MARKET_CODE="001")(HOLD_DATE>='{'-'.join([start_date[:4], start_date[4:6], start_date[6:]])}')(HOLD_DATE<='{'-'.join([end_date[:4], end_date[4:6], end_date[6:]])}')""",
1569
+ "filter": f"""(SECURITY_CODE="{symbol}")(MARKET_CODE="001")(HOLD_DATE
1570
+ >='{'-'.join([start_date[:4], start_date[4:6], start_date[6:]])}')(HOLD_DATE
1571
+ <='{'-'.join([end_date[:4], end_date[4:6], end_date[6:]])}')""",
1409
1572
  }
1410
1573
  )
1411
1574
  r = requests.get(url, params=params)
1412
1575
  data_json = r.json()
1413
1576
  total_page = data_json["result"]["pages"]
1414
1577
  big_df = pd.DataFrame()
1578
+ tqdm = get_tqdm()
1415
1579
  for page in tqdm(range(1, int(total_page) + 1), leave=False):
1416
1580
  params.update({"pageNumber": page})
1417
1581
  r = requests.get(url, params=params)
1418
1582
  data_json = r.json()
1419
1583
  temp_df = pd.DataFrame(data_json["result"]["data"])
1420
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
1584
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
1421
1585
  big_df.rename(
1422
1586
  columns={
1423
1587
  "SECUCODE": "-",
@@ -1454,15 +1618,23 @@ def stock_hsgt_individual_detail_em(
1454
1618
  "持股市值变化-10日",
1455
1619
  ]
1456
1620
  ]
1457
- big_df["持股日期"] = pd.to_datetime(big_df["持股日期"]).dt.date
1458
- big_df["当日收盘价"] = pd.to_numeric(big_df["当日收盘价"])
1459
- big_df["当日涨跌幅"] = pd.to_numeric(big_df["当日涨跌幅"])
1460
- big_df["持股数量"] = pd.to_numeric(big_df["持股数量"])
1461
- big_df["持股市值"] = pd.to_numeric(big_df["持股市值"])
1462
- big_df["持股数量占A股百分比"] = pd.to_numeric(big_df["持股数量占A股百分比"])
1463
- big_df["持股市值变化-1日"] = pd.to_numeric(big_df["持股市值变化-1日"])
1464
- big_df["持股市值变化-5日"] = pd.to_numeric(big_df["持股市值变化-5日"])
1465
- big_df["持股市值变化-10日"] = pd.to_numeric(big_df["持股市值变化-10日"])
1621
+ big_df["持股日期"] = pd.to_datetime(big_df["持股日期"], errors="coerce").dt.date
1622
+ big_df["当日收盘价"] = pd.to_numeric(big_df["当日收盘价"], errors="coerce")
1623
+ big_df["当日涨跌幅"] = pd.to_numeric(big_df["当日涨跌幅"], errors="coerce")
1624
+ big_df["持股数量"] = pd.to_numeric(big_df["持股数量"], errors="coerce")
1625
+ big_df["持股市值"] = pd.to_numeric(big_df["持股市值"], errors="coerce")
1626
+ big_df["持股数量占A股百分比"] = pd.to_numeric(
1627
+ big_df["持股数量占A股百分比"], errors="coerce"
1628
+ )
1629
+ big_df["持股市值变化-1日"] = pd.to_numeric(
1630
+ big_df["持股市值变化-1日"], errors="coerce"
1631
+ )
1632
+ big_df["持股市值变化-5日"] = pd.to_numeric(
1633
+ big_df["持股市值变化-5日"], errors="coerce"
1634
+ )
1635
+ big_df["持股市值变化-10日"] = pd.to_numeric(
1636
+ big_df["持股市值变化-10日"], errors="coerce"
1637
+ )
1466
1638
  return big_df
1467
1639
 
1468
1640
 
@@ -1499,7 +1671,7 @@ if __name__ == "__main__":
1499
1671
  print(stock_hsgt_stock_statistics_em_df)
1500
1672
 
1501
1673
  stock_hsgt_stock_statistics_em_df = stock_hsgt_stock_statistics_em(
1502
- symbol="南向持股", start_date="20240110", end_date="20240110"
1674
+ symbol="南向持股", start_date="20250314", end_date="20250314"
1503
1675
  )
1504
1676
  print(stock_hsgt_stock_statistics_em_df)
1505
1677
 
@@ -1541,7 +1713,7 @@ if __name__ == "__main__":
1541
1713
  )
1542
1714
  print(stock_hsgt_board_rank_em_df)
1543
1715
 
1544
- stock_hsgt_individual_em_df = stock_hsgt_individual_em(stock="002008")
1716
+ stock_hsgt_individual_em_df = stock_hsgt_individual_em(symbol="00700")
1545
1717
  print(stock_hsgt_individual_em_df)
1546
1718
 
1547
1719
  stock_hsgt_individual_detail_em_df = stock_hsgt_individual_detail_em(