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
@@ -8,7 +8,7 @@ https://data.eastmoney.com/stock/tradedetail.html
8
8
 
9
9
  import pandas as pd
10
10
  import requests
11
- from tqdm import tqdm
11
+ from akshare.utils.tqdm import get_tqdm
12
12
 
13
13
 
14
14
  def stock_lhb_detail_em(
@@ -45,7 +45,8 @@ def stock_lhb_detail_em(
45
45
  data_json = r.json()
46
46
  total_page_num = data_json["result"]["pages"]
47
47
  big_df = pd.DataFrame()
48
- for page in range(1, total_page_num + 1):
48
+ tqdm = get_tqdm()
49
+ for page in tqdm(range(1, total_page_num + 1), leave=False):
49
50
  params.update(
50
51
  {
51
52
  "pageNumber": page,
@@ -111,7 +112,6 @@ def stock_lhb_detail_em(
111
112
  ]
112
113
  ]
113
114
  big_df["上榜日"] = pd.to_datetime(big_df["上榜日"], errors="coerce").dt.date
114
-
115
115
  big_df["收盘价"] = pd.to_numeric(big_df["收盘价"], errors="coerce")
116
116
  big_df["涨跌幅"] = pd.to_numeric(big_df["涨跌幅"], errors="coerce")
117
117
  big_df["龙虎榜净买额"] = pd.to_numeric(big_df["龙虎榜净买额"], errors="coerce")
@@ -224,7 +224,7 @@ def stock_lhb_stock_statistic_em(symbol: str = "近一月") -> pd.DataFrame:
224
224
 
225
225
 
226
226
  def stock_lhb_jgmmtj_em(
227
- start_date: str = "20220906", end_date: str = "20220906"
227
+ start_date: str = "20240417", end_date: str = "20240430"
228
228
  ) -> pd.DataFrame:
229
229
  """
230
230
  东方财富网-数据中心-龙虎榜单-机构买卖每日统计
@@ -242,7 +242,7 @@ def stock_lhb_jgmmtj_em(
242
242
  params = {
243
243
  "sortColumns": "NET_BUY_AMT,TRADE_DATE,SECURITY_CODE",
244
244
  "sortTypes": "-1,-1,1",
245
- "pageSize": "5000",
245
+ "pageSize": "500",
246
246
  "pageNumber": "1",
247
247
  "reportName": "RPT_ORGANIZATION_TRADE_DETAILS",
248
248
  "columns": "ALL",
@@ -252,10 +252,22 @@ def stock_lhb_jgmmtj_em(
252
252
  }
253
253
  r = requests.get(url, params=params)
254
254
  data_json = r.json()
255
- temp_df = pd.DataFrame(data_json["result"]["data"])
256
- temp_df.reset_index(inplace=True)
257
- temp_df["index"] = temp_df.index + 1
258
- temp_df.columns = [
255
+ total_page = data_json["result"]["pages"]
256
+ big_df = pd.DataFrame()
257
+ tqdm = get_tqdm()
258
+ for page in tqdm(range(1, total_page + 1), leave=False):
259
+ params.update(
260
+ {
261
+ "pageNumber": page,
262
+ }
263
+ )
264
+ r = requests.get(url, params=params)
265
+ data_json = r.json()
266
+ temp_df = pd.DataFrame(data_json["result"]["data"])
267
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
268
+ big_df.reset_index(inplace=True)
269
+ big_df["index"] = big_df.index + 1
270
+ big_df.columns = [
259
271
  "序号",
260
272
  "-",
261
273
  "名称",
@@ -283,7 +295,7 @@ def stock_lhb_jgmmtj_em(
283
295
  "-",
284
296
  "-",
285
297
  ]
286
- temp_df = temp_df[
298
+ big_df = big_df[
287
299
  [
288
300
  "序号",
289
301
  "代码",
@@ -303,22 +315,21 @@ def stock_lhb_jgmmtj_em(
303
315
  "上榜日期",
304
316
  ]
305
317
  ]
306
- temp_df["上榜日期"] = pd.to_datetime(temp_df["上榜日期"], errors="coerce").dt.date
307
- temp_df["收盘价"] = pd.to_numeric(temp_df["收盘价"], errors="coerce")
308
- temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"], errors="coerce")
309
- temp_df["买方机构数"] = pd.to_numeric(temp_df["买方机构数"], errors="coerce")
310
- temp_df["卖方机构数"] = pd.to_numeric(temp_df["卖方机构数"], errors="coerce")
311
- temp_df["机构买入总额"] = pd.to_numeric(temp_df["机构买入总额"], errors="coerce")
312
- temp_df["机构卖出总额"] = pd.to_numeric(temp_df["机构卖出总额"], errors="coerce")
313
- temp_df["机构买入净额"] = pd.to_numeric(temp_df["机构买入净额"], errors="coerce")
314
- temp_df["市场总成交额"] = pd.to_numeric(temp_df["市场总成交额"], errors="coerce")
315
- temp_df["机构净买额占总成交额比"] = pd.to_numeric(
316
- temp_df["机构净买额占总成交额比"], errors="coerce"
318
+ big_df["上榜日期"] = pd.to_datetime(big_df["上榜日期"], errors="coerce").dt.date
319
+ big_df["收盘价"] = pd.to_numeric(big_df["收盘价"], errors="coerce")
320
+ big_df["涨跌幅"] = pd.to_numeric(big_df["涨跌幅"], errors="coerce")
321
+ big_df["买方机构数"] = pd.to_numeric(big_df["买方机构数"], errors="coerce")
322
+ big_df["卖方机构数"] = pd.to_numeric(big_df["卖方机构数"], errors="coerce")
323
+ big_df["机构买入总额"] = pd.to_numeric(big_df["机构买入总额"], errors="coerce")
324
+ big_df["机构卖出总额"] = pd.to_numeric(big_df["机构卖出总额"], errors="coerce")
325
+ big_df["机构买入净额"] = pd.to_numeric(big_df["机构买入净额"], errors="coerce")
326
+ big_df["市场总成交额"] = pd.to_numeric(big_df["市场总成交额"], errors="coerce")
327
+ big_df["机构净买额占总成交额比"] = pd.to_numeric(
328
+ big_df["机构净买额占总成交额比"], errors="coerce"
317
329
  )
318
- temp_df["换手率"] = pd.to_numeric(temp_df["换手率"], errors="coerce")
319
- temp_df["流通市值"] = pd.to_numeric(temp_df["流通市值"], errors="coerce")
320
-
321
- return temp_df
330
+ big_df["换手率"] = pd.to_numeric(big_df["换手率"], errors="coerce")
331
+ big_df["流通市值"] = pd.to_numeric(big_df["流通市值"], errors="coerce")
332
+ return big_df
322
333
 
323
334
 
324
335
  def stock_lhb_jgstatistic_em(symbol: str = "近一月") -> pd.DataFrame:
@@ -352,12 +363,13 @@ def stock_lhb_jgstatistic_em(symbol: str = "近一月") -> pd.DataFrame:
352
363
  data_json = r.json()
353
364
  total_page = data_json["result"]["pages"]
354
365
  big_df = pd.DataFrame()
366
+ tqdm = get_tqdm()
355
367
  for page in tqdm(range(1, total_page + 1), leave=False):
356
368
  params.update({"pageNumber": page})
357
369
  r = requests.get(url, params=params)
358
370
  data_json = r.json()
359
371
  temp_df = pd.DataFrame(data_json["result"]["data"])
360
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
372
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
361
373
  big_df.reset_index(inplace=True)
362
374
  big_df["index"] = big_df.index + 1
363
375
  big_df.rename(
@@ -423,7 +435,7 @@ def stock_lhb_hyyyb_em(
423
435
  ) -> pd.DataFrame:
424
436
  """
425
437
  东方财富网-数据中心-龙虎榜单-每日活跃营业部
426
- https://data.eastmoney.com/stock/jgmmtj.html
438
+ https://data.eastmoney.com/stock/hyyyb.html
427
439
  :param start_date: 开始日期
428
440
  :type start_date: str
429
441
  :param end_date: 结束日期
@@ -448,14 +460,14 @@ def stock_lhb_hyyyb_em(
448
460
  r = requests.get(url, params=params)
449
461
  data_json = r.json()
450
462
  total_page = data_json["result"]["pages"]
451
-
452
463
  big_df = pd.DataFrame()
464
+ tqdm = get_tqdm()
453
465
  for page in tqdm(range(1, total_page + 1), leave=False):
454
466
  params.update({"pageNumber": page})
455
467
  r = requests.get(url, params=params)
456
468
  data_json = r.json()
457
469
  temp_df = pd.DataFrame(data_json["result"]["data"])
458
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
470
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
459
471
  big_df.reset_index(inplace=True)
460
472
  big_df["index"] = big_df.index + 1
461
473
  big_df.columns = [
@@ -468,7 +480,7 @@ def stock_lhb_hyyyb_em(
468
480
  "卖出总金额",
469
481
  "总买卖净额",
470
482
  "-",
471
- "-",
483
+ "营业部代码",
472
484
  "买入股票",
473
485
  "-",
474
486
  "-",
@@ -484,6 +496,7 @@ def stock_lhb_hyyyb_em(
484
496
  "卖出总金额",
485
497
  "总买卖净额",
486
498
  "买入股票",
499
+ "营业部代码",
487
500
  ]
488
501
  ]
489
502
 
@@ -527,6 +540,7 @@ def stock_lhb_yybph_em(symbol: str = "近一月") -> pd.DataFrame:
527
540
  data_json = r.json()
528
541
  total_page = data_json["result"]["pages"]
529
542
  big_df = pd.DataFrame()
543
+ tqdm = get_tqdm()
530
544
  for page in tqdm(range(1, total_page + 1), leave=False):
531
545
  params.update({"pageNumber": page})
532
546
  r = requests.get(url, params=params)
@@ -662,6 +676,7 @@ def stock_lhb_traderstatistic_em(symbol: str = "近一月") -> pd.DataFrame:
662
676
  data_json = r.json()
663
677
  total_page = data_json["result"]["pages"]
664
678
  big_df = pd.DataFrame()
679
+ tqdm = get_tqdm()
665
680
  for page in tqdm(range(1, total_page + 1), leave=False):
666
681
  params.update({"pageNumber": page})
667
682
  r = requests.get(url, params=params)
@@ -782,7 +797,6 @@ def stock_lhb_stock_detail_em(
782
797
  "sortColumns": flag_map[flag],
783
798
  "source": "WEB",
784
799
  "client": "WEB",
785
- "_": "1647338693644",
786
800
  }
787
801
  r = requests.get(url, params=params)
788
802
  data_json = r.json()
@@ -887,9 +901,122 @@ def stock_lhb_stock_detail_em(
887
901
  return temp_df
888
902
 
889
903
 
904
+ def stock_lhb_yyb_detail_em(symbol: str = "10188715") -> pd.DataFrame:
905
+ """
906
+ 东方财富网-数据中心-龙虎榜单-营业部历史交易明细-营业部交易明细
907
+ https://data.eastmoney.com/stock/lhb/yyb/10188715.html
908
+ :param symbol: 营业部代码, 如 "10188715", 通过 ak.stock_lhb_hyyyb_em() 接口获取
909
+ :type symbol: str
910
+ :return: 营业部交易明细数据
911
+ :rtype: pandas.DataFrame
912
+ """
913
+ url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
914
+ params = {
915
+ "sortColumns": "TRADE_DATE,SECURITY_CODE",
916
+ "sortTypes": "-1,1",
917
+ "pageSize": '100',
918
+ "pageNumber": "1",
919
+ "reportName": "RPT_OPERATEDEPT_TRADE_DETAILSNEW",
920
+ "columns": "ALL",
921
+ "source": "WEB",
922
+ "client": "WEB",
923
+ "filter": f'(OPERATEDEPT_CODE="{symbol}")',
924
+ }
925
+ r = requests.get(url, params=params)
926
+ data_json = r.json()
927
+ total_page = data_json["result"]["pages"]
928
+ big_df = pd.DataFrame()
929
+ tqdm = get_tqdm()
930
+ for page in tqdm(range(1, total_page + 1), leave=False):
931
+ params.update({"pageNumber": page})
932
+ r = requests.get(url, params=params)
933
+ data_json = r.json()
934
+ temp_df = pd.DataFrame(data_json["result"]["data"])
935
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
936
+
937
+ # 检查DataFrame是否为空
938
+ if big_df.empty:
939
+ return pd.DataFrame()
940
+
941
+ # 确保列名与实际返回的JSON数据结构一致
942
+ column_map = {
943
+ "OPERATEDEPT_CODE": "营业部代码",
944
+ "OPERATEDEPT_NAME": "营业部名称",
945
+ "TRADE_DATE": "交易日期",
946
+ "D1_CLOSE_ADJCHRATE": "1日后涨跌幅",
947
+ "D2_CLOSE_ADJCHRATE": "2日后涨跌幅",
948
+ "D3_CLOSE_ADJCHRATE": "3日后涨跌幅",
949
+ "D5_CLOSE_ADJCHRATE": "5日后涨跌幅",
950
+ "D10_CLOSE_ADJCHRATE": "10日后涨跌幅",
951
+ "SECURITY_CODE": "股票代码",
952
+ "SECURITY_NAME_ABBR": "股票名称",
953
+ "ACT_BUY": "买入金额",
954
+ "ACT_SELL": "卖出金额",
955
+ "NET_AMT": "净额",
956
+ "EXPLANATION": "上榜原因",
957
+ "D20_CLOSE_ADJCHRATE": "20日后涨跌幅",
958
+ "D30_CLOSE_ADJCHRATE": "30日后涨跌幅",
959
+ "SECUCODE": "证券代码",
960
+ "OPERATEDEPT_CODE_OLD": "营业部旧代码",
961
+ "ORG_NAME_ABBR": "营业部简称",
962
+ "CHANGE_RATE": "涨跌幅"
963
+ }
964
+
965
+ # 重命名列
966
+ big_df.rename(columns=column_map, inplace=True)
967
+
968
+ # 添加序号列
969
+ big_df.reset_index(inplace=True)
970
+ big_df["序号"] = big_df.index + 1
971
+
972
+ # 选择需要的列并排序
973
+ result_columns = [
974
+ "序号",
975
+ "营业部代码",
976
+ "营业部名称",
977
+ "营业部简称",
978
+ "交易日期",
979
+ "股票代码",
980
+ "股票名称",
981
+ "涨跌幅",
982
+ "买入金额",
983
+ "卖出金额",
984
+ "净额",
985
+ "上榜原因",
986
+ "1日后涨跌幅",
987
+ "2日后涨跌幅",
988
+ "3日后涨跌幅",
989
+ "5日后涨跌幅",
990
+ "10日后涨跌幅",
991
+ "20日后涨跌幅",
992
+ "30日后涨跌幅",
993
+ ]
994
+
995
+ # 确保所有列都存在
996
+ for col in result_columns:
997
+ if col not in big_df.columns and col != "序号":
998
+ big_df[col] = None
999
+
1000
+ big_df = big_df[result_columns]
1001
+
1002
+ # 处理日期格式
1003
+ big_df["交易日期"] = pd.to_datetime(big_df["交易日期"], errors="coerce").dt.date
1004
+
1005
+ # 处理数值列
1006
+ numeric_cols = [
1007
+ "涨跌幅", "买入金额", "卖出金额", "净额",
1008
+ "1日后涨跌幅", "2日后涨跌幅", "3日后涨跌幅",
1009
+ "5日后涨跌幅", "10日后涨跌幅", "20日后涨跌幅", "30日后涨跌幅"
1010
+ ]
1011
+ for col in numeric_cols:
1012
+ big_df[col] = pd.to_numeric(big_df[col], errors="coerce")
1013
+
1014
+ return big_df
1015
+
1016
+
890
1017
  if __name__ == "__main__":
891
1018
  stock_lhb_detail_em_df = stock_lhb_detail_em(
892
- start_date="20230403", end_date="20230417"
1019
+ start_date="20250201", end_date="20250228"
893
1020
  )
894
1021
  print(stock_lhb_detail_em_df)
895
1022
 
@@ -906,7 +1033,7 @@ if __name__ == "__main__":
906
1033
  print(stock_lhb_stock_statistic_em_df)
907
1034
 
908
1035
  stock_lhb_jgmmtj_em_df = stock_lhb_jgmmtj_em(
909
- start_date="20220904", end_date="20220906"
1036
+ start_date="20240417", end_date="20240430"
910
1037
  )
911
1038
  print(stock_lhb_jgmmtj_em_df)
912
1039
 
@@ -914,7 +1041,7 @@ if __name__ == "__main__":
914
1041
  print(stock_lhb_jgstatistic_em_df)
915
1042
 
916
1043
  stock_lhb_hyyyb_em_df = stock_lhb_hyyyb_em(
917
- start_date="20220324", end_date="20220324"
1044
+ start_date="20240401", end_date="20240430"
918
1045
  )
919
1046
  print(stock_lhb_hyyyb_em_df)
920
1047
 
@@ -933,6 +1060,9 @@ if __name__ == "__main__":
933
1060
  print(stock_lhb_stock_detail_em_df)
934
1061
 
935
1062
  stock_lhb_stock_detail_em_df = stock_lhb_stock_detail_em(
936
- symbol="600016", date="20220324", flag="买入"
1063
+ symbol="600077", date="20070416", flag="买入"
937
1064
  )
938
1065
  print(stock_lhb_stock_detail_em_df)
1066
+
1067
+ stock_lhb_yyb_detail_em_df = stock_lhb_yyb_detail_em(symbol="10188715")
1068
+ print(stock_lhb_yyb_detail_em_df)
@@ -1,10 +1,11 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/2/26 15:00
4
+ Date: 2024/5/10 00:00
5
5
  Desc: 新浪财经-龙虎榜
6
6
  https://vip.stock.finance.sina.com.cn/q/go.php/vInvestConsult/kind/lhb/index.phtml
7
7
  """
8
+
8
9
  from io import StringIO
9
10
 
10
11
  import pandas as pd
@@ -39,16 +40,27 @@ def stock_lhb_detail_daily_sina(date: str = "20240222") -> pd.DataFrame:
39
40
  big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
40
41
  big_df["股票代码"] = big_df["股票代码"].astype(str).str.zfill(6)
41
42
  del big_df["查看详情"]
42
- big_df.columns = ["序号", "股票代码", "股票名称", "收盘价", "对应值", "成交量", "成交额", "指标"]
43
- big_df['收盘价'] = pd.to_numeric(big_df['收盘价'], errors="coerce")
44
- big_df['对应值'] = pd.to_numeric(big_df['对应值'], errors="coerce")
45
- big_df['成交量'] = pd.to_numeric(big_df['成交量'], errors="coerce")
46
- big_df['成交额'] = pd.to_numeric(big_df['成交额'], errors="coerce")
43
+ big_df.columns = [
44
+ "序号",
45
+ "股票代码",
46
+ "股票名称",
47
+ "收盘价",
48
+ "对应值",
49
+ "成交量",
50
+ "成交额",
51
+ "指标",
52
+ ]
53
+ big_df["收盘价"] = pd.to_numeric(big_df["收盘价"], errors="coerce")
54
+ big_df["对应值"] = pd.to_numeric(big_df["对应值"], errors="coerce")
55
+ big_df["成交量"] = pd.to_numeric(big_df["成交量"], errors="coerce")
56
+ big_df["成交额"] = pd.to_numeric(big_df["成交额"], errors="coerce")
47
57
  return big_df
48
58
 
49
59
 
50
- def _find_last_page(url: str = "https://vip.stock.finance.sina.com.cn/q/go.php/vLHBData/kind/ggtj/index.phtml",
51
- recent_day: str = "60"):
60
+ def _find_last_page(
61
+ url: str = "https://vip.stock.finance.sina.com.cn/q/go.php/vLHBData/kind/ggtj/index.phtml",
62
+ recent_day: str = "60",
63
+ ):
52
64
  params = {
53
65
  "last": recent_day,
54
66
  "p": "1",
@@ -57,7 +69,7 @@ def _find_last_page(url: str = "https://vip.stock.finance.sina.com.cn/q/go.php/v
57
69
  soup = BeautifulSoup(r.text, "lxml")
58
70
  try:
59
71
  previous_page = int(soup.find_all(attrs={"class": "page"})[-2].text)
60
- except Exception as e:
72
+ except: # noqa: E722
61
73
  previous_page = 1
62
74
  if previous_page != 1:
63
75
  while True:
@@ -66,7 +78,7 @@ def _find_last_page(url: str = "https://vip.stock.finance.sina.com.cn/q/go.php/v
66
78
  "p": previous_page,
67
79
  }
68
80
  r = requests.get(url, params=params)
69
- soup = BeautifulSoup(r.text, "lxml")
81
+ soup = BeautifulSoup(r.text, features="lxml")
70
82
  last_page = int(soup.find_all(attrs={"class": "page"})[-2].text)
71
83
  if last_page != previous_page:
72
84
  previous_page = last_page
@@ -76,44 +88,56 @@ def _find_last_page(url: str = "https://vip.stock.finance.sina.com.cn/q/go.php/v
76
88
  return previous_page
77
89
 
78
90
 
79
- def stock_lhb_ggtj_sina(recent_day: str = "30") -> pd.DataFrame:
91
+ def stock_lhb_ggtj_sina(symbol: str = "5") -> pd.DataFrame:
80
92
  """
81
93
  龙虎榜-个股上榜统计
82
94
  https://vip.stock.finance.sina.com.cn/q/go.php/vLHBData/kind/ggtj/index.phtml
83
- :param recent_day: choice of {"5": 最近 5 天; "10": 最近 10 天; "30": 最近 30 天; "60": 最近 60 天;}
84
- :type recent_day: str
85
- :return: 龙虎榜-每日详情
95
+ :param symbol: choice of {"5": 最近 5 天; "10": 最近 10 天; "30": 最近 30 天; "60": 最近 60 天;}
96
+ :type symbol: str
97
+ :return: 龙虎榜-个股上榜统计
86
98
  :rtype: pandas.DataFrame
87
99
  """
88
- url = "https://vip.stock.finance.sina.com.cn/q/go.php/vLHBData/kind/ggtj/index.phtml"
89
- last_page_num = _find_last_page(url, recent_day)
100
+ url = (
101
+ "https://vip.stock.finance.sina.com.cn/q/go.php/vLHBData/kind/ggtj/index.phtml"
102
+ )
103
+ last_page_num = _find_last_page(url, symbol)
90
104
  big_df = pd.DataFrame()
91
105
  tqdm = get_tqdm()
92
106
  for page in tqdm(range(1, last_page_num + 1), leave=False):
93
107
  params = {
94
- "last": recent_day,
108
+ "last": symbol,
95
109
  "p": page,
96
110
  }
97
111
  r = requests.get(url, params=params)
98
112
  temp_df = pd.read_html(StringIO(r.text))[0].iloc[0:, :]
99
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
113
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
100
114
  big_df["股票代码"] = big_df["股票代码"].astype(str).str.zfill(6)
101
- big_df.columns = ["股票代码", "股票名称", "上榜次数", "累积购买额", "累积卖出额", "净额", "买入席位数",
102
- "卖出席位数"]
115
+ big_df.columns = [
116
+ "股票代码",
117
+ "股票名称",
118
+ "上榜次数",
119
+ "累积购买额",
120
+ "累积卖出额",
121
+ "净额",
122
+ "买入席位数",
123
+ "卖出席位数",
124
+ ]
103
125
  return big_df
104
126
 
105
127
 
106
- def stock_lhb_yytj_sina(recent_day: str = "5") -> pd.DataFrame:
128
+ def stock_lhb_yytj_sina(symbol: str = "5") -> pd.DataFrame:
107
129
  """
108
130
  龙虎榜-营业部上榜统计
109
131
  https://vip.stock.finance.sina.com.cn/q/go.php/vLHBData/kind/yytj/index.phtml
110
- :param recent_day: choice of {"5": 最近 5 天; "10": 最近 10 天; "30": 最近 30 天; "60": 最近 60 天;}
111
- :type recent_day: str
132
+ :param symbol: choice of {"5": 最近 5 天; "10": 最近 10 天; "30": 最近 30 天; "60": 最近 60 天;}
133
+ :type symbol: str
112
134
  :return: 龙虎榜-营业部上榜统计
113
135
  :rtype: pandas.DataFrame
114
136
  """
115
- url = "https://vip.stock.finance.sina.com.cn/q/go.php/vLHBData/kind/yytj/index.phtml"
116
- last_page_num = _find_last_page(url, recent_day)
137
+ url = (
138
+ "https://vip.stock.finance.sina.com.cn/q/go.php/vLHBData/kind/yytj/index.phtml"
139
+ )
140
+ last_page_num = _find_last_page(url, symbol)
117
141
  big_df = pd.DataFrame()
118
142
  tqdm = get_tqdm()
119
143
  for page in tqdm(range(1, last_page_num + 1), leave=False):
@@ -124,29 +148,39 @@ def stock_lhb_yytj_sina(recent_day: str = "5") -> pd.DataFrame:
124
148
  r = requests.get(url, params=params)
125
149
  temp_df = pd.read_html(StringIO(r.text))[0].iloc[0:, :]
126
150
  big_df = pd.concat([big_df, temp_df], ignore_index=True)
127
- big_df.columns = ["营业部名称", "上榜次数", "累积购买额", "买入席位数", "累积卖出额", "卖出席位数", "买入前三股票"]
151
+ big_df.columns = [
152
+ "营业部名称",
153
+ "上榜次数",
154
+ "累积购买额",
155
+ "买入席位数",
156
+ "累积卖出额",
157
+ "卖出席位数",
158
+ "买入前三股票",
159
+ ]
128
160
  big_df["上榜次数"] = pd.to_numeric(big_df["上榜次数"], errors="coerce")
129
161
  big_df["买入席位数"] = pd.to_numeric(big_df["买入席位数"], errors="coerce")
130
162
  big_df["卖出席位数"] = pd.to_numeric(big_df["卖出席位数"], errors="coerce")
131
163
  return big_df
132
164
 
133
165
 
134
- def stock_lhb_jgzz_sina(recent_day: str = "5") -> pd.DataFrame:
166
+ def stock_lhb_jgzz_sina(symbol: str = "5") -> pd.DataFrame:
135
167
  """
136
168
  龙虎榜-机构席位追踪
137
169
  https://vip.stock.finance.sina.com.cn/q/go.php/vLHBData/kind/jgzz/index.phtml
138
- :param recent_day: choice of {"5": 最近 5 天; "10": 最近 10 天; "30": 最近 30 天; "60": 最近 60 天;}
139
- :type recent_day: str
170
+ :param symbol: choice of {"5": 最近 5 天; "10": 最近 10 天; "30": 最近 30 天; "60": 最近 60 天;}
171
+ :type symbol: str
140
172
  :return: 龙虎榜-机构席位追踪
141
173
  :rtype: pandas.DataFrame
142
174
  """
143
- url = "https://vip.stock.finance.sina.com.cn/q/go.php/vLHBData/kind/jgzz/index.phtml"
144
- last_page_num = _find_last_page(url, recent_day)
175
+ url = (
176
+ "https://vip.stock.finance.sina.com.cn/q/go.php/vLHBData/kind/jgzz/index.phtml"
177
+ )
178
+ last_page_num = _find_last_page(url, symbol)
145
179
  big_df = pd.DataFrame()
146
180
  tqdm = get_tqdm()
147
181
  for page in tqdm(range(1, last_page_num + 1), leave=False):
148
182
  params = {
149
- "last": recent_day,
183
+ "last": symbol,
150
184
  "p": page,
151
185
  }
152
186
  r = requests.get(url, params=params)
@@ -157,7 +191,15 @@ def stock_lhb_jgzz_sina(recent_day: str = "5") -> pd.DataFrame:
157
191
  big_df["股票代码"] = big_df["股票代码"].astype(str).str.zfill(6)
158
192
  del big_df["当前价"]
159
193
  del big_df["涨跌幅"]
160
- big_df.columns = ["股票代码", "股票名称", "累积买入额", "买入次数", "累积卖出额", "卖出次数", "净额"]
194
+ big_df.columns = [
195
+ "股票代码",
196
+ "股票名称",
197
+ "累积买入额",
198
+ "买入次数",
199
+ "累积卖出额",
200
+ "卖出次数",
201
+ "净额",
202
+ ]
161
203
  big_df["买入次数"] = pd.to_numeric(big_df["买入次数"], errors="coerce")
162
204
  big_df["卖出次数"] = pd.to_numeric(big_df["卖出次数"], errors="coerce")
163
205
  return big_df
@@ -170,7 +212,9 @@ def stock_lhb_jgmx_sina() -> pd.DataFrame:
170
212
  :return: 龙虎榜-机构席位成交明细
171
213
  :rtype: pandas.DataFrame
172
214
  """
173
- url = "https://vip.stock.finance.sina.com.cn/q/go.php/vLHBData/kind/jgmx/index.phtml"
215
+ url = (
216
+ "https://vip.stock.finance.sina.com.cn/q/go.php/vLHBData/kind/jgmx/index.phtml"
217
+ )
174
218
  params = {
175
219
  "p": "1",
176
220
  }
@@ -178,7 +222,7 @@ def stock_lhb_jgmx_sina() -> pd.DataFrame:
178
222
  soup = BeautifulSoup(r.text, features="lxml")
179
223
  try:
180
224
  last_page_num = int(soup.find_all(attrs={"class": "page"})[-2].text)
181
- except:
225
+ except: # noqa: E722
182
226
  last_page_num = 1
183
227
  big_df = pd.DataFrame()
184
228
  tqdm = get_tqdm()
@@ -190,27 +234,30 @@ def stock_lhb_jgmx_sina() -> pd.DataFrame:
190
234
  temp_df = pd.read_html(StringIO(r.text))[0].iloc[0:, :]
191
235
  big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
192
236
  big_df["股票代码"] = big_df["股票代码"].astype(str).str.zfill(6)
193
- big_df['交易日期'] = pd.to_datetime(big_df['交易日期'], errors="coerce").dt.date
194
- big_df.rename(columns={"机构席位买入额(万)": "机构席位买入额", "机构席位卖出额(万)": "机构席位卖出额"},
195
- inplace=True)
196
- big_df['机构席位买入额'] = pd.to_numeric(big_df['机构席位买入额'], errors="coerce")
197
- big_df['机构席位卖出额'] = pd.to_numeric(big_df['机构席位卖出额'], errors="coerce")
237
+ big_df["交易日期"] = pd.to_datetime(big_df["交易日期"], errors="coerce").dt.date
238
+ big_df.rename(
239
+ columns={
240
+ "机构席位买入额(万)": "机构席位买入额",
241
+ "机构席位卖出额(万)": "机构席位卖出额",
242
+ },
243
+ inplace=True,
244
+ )
245
+ big_df["机构席位买入额"] = pd.to_numeric(big_df["机构席位买入额"], errors="coerce")
246
+ big_df["机构席位卖出额"] = pd.to_numeric(big_df["机构席位卖出额"], errors="coerce")
198
247
  return big_df
199
248
 
200
249
 
201
250
  if __name__ == "__main__":
202
- stock_lhb_detail_daily_sina_df = stock_lhb_detail_daily_sina(
203
- date="20240222"
204
- )
251
+ stock_lhb_detail_daily_sina_df = stock_lhb_detail_daily_sina(date="20240222")
205
252
  print(stock_lhb_detail_daily_sina_df)
206
253
 
207
- stock_lhb_ggtj_sina_df = stock_lhb_ggtj_sina(recent_day="5")
254
+ stock_lhb_ggtj_sina_df = stock_lhb_ggtj_sina(symbol="5")
208
255
  print(stock_lhb_ggtj_sina_df)
209
256
 
210
- stock_lhb_yytj_sina_df = stock_lhb_yytj_sina(recent_day="5")
257
+ stock_lhb_yytj_sina_df = stock_lhb_yytj_sina(symbol="5")
211
258
  print(stock_lhb_yytj_sina_df)
212
259
 
213
- stock_lhb_jgzz_sina_df = stock_lhb_jgzz_sina(recent_day="5")
260
+ stock_lhb_jgzz_sina_df = stock_lhb_jgzz_sina(symbol="5")
214
261
  print(stock_lhb_jgzz_sina_df)
215
262
 
216
263
  stock_lhb_jgmx_sina_df = stock_lhb_jgmx_sina()