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,10 +1,11 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/4/5 22:05
4
+ Date: 2025/9/20 18:05
5
5
  Desc: 乐估乐股-底部研究-巴菲特指标
6
6
  https://legulegu.com/stockdata/marketcap-gdp
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
 
@@ -24,7 +25,7 @@ def stock_buffett_index_lg() -> pd.DataFrame:
24
25
  r = requests.get(
25
26
  url,
26
27
  params=params,
27
- **get_cookie_csrf(url="https://legulegu.com/stockdata/marketcap-gdp")
28
+ **get_cookie_csrf(url="https://legulegu.com/stockdata/marketcap-gdp"),
28
29
  )
29
30
  data_json = r.json()
30
31
  temp_df = pd.DataFrame(data_json["data"])
@@ -49,12 +50,13 @@ def stock_buffett_index_lg() -> pd.DataFrame:
49
50
  "总历史分位数",
50
51
  ]
51
52
  ]
52
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], unit="ms").dt.date
53
- temp_df['收盘价'] = pd.to_numeric(temp_df['收盘价'], errors="coerce")
54
- temp_df['总市值'] = pd.to_numeric(temp_df['总市值'], errors="coerce")
55
- temp_df['GDP'] = pd.to_numeric(temp_df['GDP'], errors="coerce")
56
- temp_df['近十年分位数'] = pd.to_numeric(temp_df['近十年分位数'], errors="coerce")
57
- temp_df['总历史分位数'] = pd.to_numeric(temp_df['总历史分位数'], errors="coerce")
53
+ temp_df["日期"] = pd.to_datetime(temp_df["日期"], unit="ms")
54
+ temp_df["日期"] = pd.to_datetime(temp_df["日期"] + pd.Timedelta(hours=8)).dt.date
55
+ temp_df["收盘价"] = pd.to_numeric(temp_df["收盘价"], errors="coerce")
56
+ temp_df["总市值"] = pd.to_numeric(temp_df["总市值"], errors="coerce")
57
+ temp_df["GDP"] = pd.to_numeric(temp_df["GDP"], errors="coerce")
58
+ temp_df["近十年分位数"] = pd.to_numeric(temp_df["近十年分位数"], errors="coerce")
59
+ temp_df["总历史分位数"] = pd.to_numeric(temp_df["总历史分位数"], errors="coerce")
58
60
  return temp_df
59
61
 
60
62
 
@@ -5,6 +5,7 @@ Date: 2022/7/13 16:16
5
5
  Desc: 新浪财经-股票-行业分类
6
6
  http://vip.stock.finance.sina.com.cn/mkt/
7
7
  """
8
+
8
9
  import math
9
10
 
10
11
  import pandas as pd
@@ -30,9 +31,7 @@ def stock_classify_board() -> dict:
30
31
  for item in data_json[1][0][1]
31
32
  ] # 沪深股市
32
33
  for num, class_name in enumerate(class_name_list):
33
- temp_df = pd.DataFrame(
34
- [item for item in data_json[1][0][1][num][1:][0]]
35
- )
34
+ temp_df = pd.DataFrame([item for item in data_json[1][0][1][num][1:][0]])
36
35
  if temp_df.shape[1] == 5:
37
36
  temp_df.columns = ["name", "_", "code", "_", "_"]
38
37
  temp_df = temp_df[["name", "code"]]
@@ -57,9 +56,7 @@ def stock_classify_sina(symbol: str = "热门概念") -> pd.DataFrame:
57
56
  """
58
57
  stock_classify_board_dict = stock_classify_board()
59
58
  data_df = pd.DataFrame()
60
- for num in tqdm(
61
- range(len(stock_classify_board_dict[symbol]["code"])), leave=False
62
- ):
59
+ for num in tqdm(range(len(stock_classify_board_dict[symbol]["code"])), leave=False):
63
60
  url = "http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeStockCount"
64
61
  params = {"node": stock_classify_board_dict[symbol]["code"][num]}
65
62
  r = requests.get(url, params=params)
@@ -28,7 +28,8 @@ def stock_comment_em() -> pd.DataFrame:
28
28
  "pageSize": "500",
29
29
  "pageNumber": "1",
30
30
  "reportName": "RPT_DMSK_TS_STOCKNEW",
31
- "quoteColumns": "f2~01~SECURITY_CODE~CLOSE_PRICE,f8~01~SECURITY_CODE~TURNOVERRATE,f3~01~SECURITY_CODE~CHANGE_RATE,f9~01~SECURITY_CODE~PE_DYNAMIC",
31
+ "quoteColumns": "f2~01~SECURITY_CODE~CLOSE_PRICE,f8~01~SECURITY_CODE~TURNOVERRATE,"
32
+ "f3~01~SECURITY_CODE~CHANGE_RATE,f9~01~SECURITY_CODE~PE_DYNAMIC",
32
33
  "columns": "ALL",
33
34
  "filter": "",
34
35
  "token": "894050c76af8597a853f5b408b759f5d",
@@ -79,6 +80,7 @@ def stock_comment_em() -> pd.DataFrame:
79
80
  "目前排名",
80
81
  "关注指数",
81
82
  "-",
83
+ "-",
82
84
  ]
83
85
  big_df = big_df[
84
86
  [
@@ -131,17 +133,16 @@ def stock_comment_detail_zlkp_jgcyd_em(symbol: str = "600000") -> pd.DataFrame:
131
133
  "client": "WEB",
132
134
  "sortColumns": "TRADE_DATE",
133
135
  "sortTypes": "-1",
134
- "_": "1655387358195",
135
136
  }
136
137
  r = requests.get(url, params=params)
137
138
  data_json = r.json()
138
139
  temp_df = pd.DataFrame(data_json["result"]["data"])
139
140
  temp_df = temp_df[["TRADE_DATE", "ORG_PARTICIPATE"]]
140
- temp_df.columns = ["date", "value"]
141
- temp_df["date"] = pd.to_datetime(temp_df["date"], errors="coerce").dt.date
142
- temp_df.sort_values(["date"], inplace=True)
141
+ temp_df.columns = ["交易日", "机构参与度"]
142
+ temp_df["交易日"] = pd.to_datetime(temp_df["交易日"], errors="coerce").dt.date
143
+ temp_df.sort_values(["交易日"], inplace=True)
143
144
  temp_df.reset_index(inplace=True, drop=True)
144
- temp_df["value"] = pd.to_numeric(temp_df["value"], errors="coerce") * 100
145
+ temp_df["机构参与度"] = pd.to_numeric(temp_df["机构参与度"], errors="coerce") * 100
145
146
  return temp_df
146
147
 
147
148
 
@@ -154,36 +155,31 @@ def stock_comment_detail_zhpj_lspf_em(symbol: str = "600000") -> pd.DataFrame:
154
155
  :return: 综合评价-历史评分
155
156
  :rtype: pandas.DataFrame
156
157
  """
157
- url = f"https://data.eastmoney.com/stockcomment/api/{symbol}.json"
158
- try_count = 10
159
- data_json = None
160
- while try_count:
161
- try:
162
- r = requests.get(url)
163
- data_json = r.json()
164
- break
165
- except requests.exceptions.JSONDecodeError:
166
- try_count -= 1
167
- time.sleep(1)
168
- continue
169
- current_year = data_json["ApiResults"]["zhpj"]["ComprehensiveScoreRank1"][0][0][
170
- "TradeDate"
171
- ].split("/")[0]
172
-
173
- temp_df = pd.DataFrame(
174
- [
175
- data_json["ApiResults"]["zhpj"]["HistoryScore"]["XData"],
176
- data_json["ApiResults"]["zhpj"]["HistoryScore"]["Ydata"]["Score"],
177
- data_json["ApiResults"]["zhpj"]["HistoryScore"]["Ydata"]["Price"],
178
- ]
179
- ).T
180
- temp_df.columns = ["日期", "评分", "股价"]
181
- temp_df["日期"] = current_year + "-" + temp_df["日期"]
182
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
183
- temp_df.sort_values(by=["日期"], inplace=True)
158
+ url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
159
+ params = {
160
+ "filter": f'(SECURITY_CODE="{symbol}")',
161
+ "columns": "ALL",
162
+ "source": "WEB",
163
+ "client": "WEB",
164
+ "reportName": "RPT_STOCK_HISTORYMARK",
165
+ "sortColumns": "DIAGNOSE_DATE",
166
+ "sortTypes": "1",
167
+ }
168
+ r = requests.get(url=url, params=params)
169
+ data_json = r.json()
170
+ temp_df = pd.DataFrame(data_json["result"]["data"])
171
+ temp_df.rename(
172
+ columns={
173
+ "TOTAL_SCORE": "评分",
174
+ "DIAGNOSE_DATE": "交易日",
175
+ },
176
+ inplace=True,
177
+ )
178
+ temp_df = temp_df[["交易日", "评分"]]
179
+ temp_df["交易日"] = pd.to_datetime(temp_df["交易日"], errors="coerce").dt.date
180
+ temp_df.sort_values(by=["交易日"], inplace=True)
184
181
  temp_df.reset_index(inplace=True, drop=True)
185
182
  temp_df["评分"] = pd.to_numeric(temp_df["评分"], errors="coerce")
186
- temp_df["股价"] = pd.to_numeric(temp_df["股价"], errors="coerce")
187
183
  return temp_df
188
184
 
189
185
 
@@ -196,36 +192,32 @@ def stock_comment_detail_scrd_focus_em(symbol: str = "600000") -> pd.DataFrame:
196
192
  :return: 市场热度-用户关注指数
197
193
  :rtype: pandas.DataFrame
198
194
  """
199
- url = f"https://data.eastmoney.com/stockcomment/api/{symbol}.json"
200
- try_count = 10
201
- data_json = None
202
- while try_count:
203
- try:
204
- r = requests.get(url)
205
- data_json = r.json()
206
- break
207
- except requests.exceptions.JSONDecodeError:
208
- try_count -= 1
209
- time.sleep(1)
210
- continue
211
-
212
- current_year = data_json["ApiResults"]["scrd"]["focus"][0][0]["UpdateDate"].split(
213
- "/"
214
- )[0]
215
- temp_df = pd.DataFrame(
216
- [
217
- data_json["ApiResults"]["scrd"]["focus"][1]["XData"],
218
- data_json["ApiResults"]["scrd"]["focus"][1]["Ydata"]["StockFocus"],
219
- data_json["ApiResults"]["scrd"]["focus"][1]["Ydata"]["ClosePrice"],
220
- ]
221
- ).T
222
- temp_df.columns = ["日期", "用户关注指数", "收盘价"]
223
- temp_df["日期"] = current_year + "-" + temp_df["日期"]
224
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
225
- temp_df.sort_values(by=["日期"], inplace=True)
195
+ url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
196
+ params = {
197
+ "filter": f'(SECURITY_CODE="{symbol}")',
198
+ "columns": "ALL",
199
+ "source": "WEB",
200
+ "client": "WEB",
201
+ "reportName": "RPT_STOCK_MARKETFOCUS",
202
+ "sortColumns": "TRADE_DATE",
203
+ "sortTypes": "-1",
204
+ "pageSize": "30",
205
+ }
206
+ r = requests.get(url=url, params=params)
207
+ data_json = r.json()
208
+ temp_df = pd.DataFrame(data_json["result"]["data"])
209
+ temp_df.rename(
210
+ columns={
211
+ "MARKET_FOCUS": "用户关注指数",
212
+ "TRADE_DATE": "交易日",
213
+ },
214
+ inplace=True,
215
+ )
216
+ temp_df = temp_df[["交易日", "用户关注指数"]]
217
+ temp_df["交易日"] = pd.to_datetime(temp_df["交易日"], errors="coerce").dt.date
218
+ temp_df.sort_values(by=["交易日"], inplace=True)
226
219
  temp_df.reset_index(inplace=True, drop=True)
227
220
  temp_df["用户关注指数"] = pd.to_numeric(temp_df["用户关注指数"], errors="coerce")
228
- temp_df["收盘价"] = pd.to_numeric(temp_df["收盘价"], errors="coerce")
229
221
  return temp_df
230
222
 
231
223
 
@@ -289,86 +281,36 @@ def stock_comment_detail_scrd_desire_daily_em(
289
281
  :return: 市场热度-日度市场参与意愿
290
282
  :rtype: pandas.DataFrame
291
283
  """
292
- url = f"https://data.eastmoney.com/stockcomment/api/{symbol}.json"
293
- try_count = 10
294
- data_json = None
295
- while try_count:
296
- try:
297
- r = requests.get(url)
298
- data_json = r.json()
299
- break
300
- except requests.exceptions.JSONDecodeError:
301
- try_count -= 1
302
- time.sleep(1)
303
- continue
304
-
305
- date_str = (
306
- data_json["ApiResults"]["scrd"]["desire"][0][0]["UpdateTime"]
307
- .split(" ")[0]
308
- .replace("/", "-")
284
+ url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
285
+ params = {
286
+ "filter": f'(SECURITY_CODE="{symbol}")',
287
+ "columns": "ALL",
288
+ "source": "WEB",
289
+ "client": "WEB",
290
+ "reportName": "RPT_STOCK_PARTICIPATION",
291
+ "sortColumns": "TRADE_DATE",
292
+ "sortTypes": "-1",
293
+ "pageSize": "30",
294
+ }
295
+ r = requests.get(url=url, params=params)
296
+ data_json = r.json()
297
+ temp_df = pd.DataFrame(data_json["result"]["data"])
298
+ temp_df.rename(
299
+ columns={
300
+ "PARTICIPATION_WISH_5DAYSCHANGE": "5日平均参与意愿变化",
301
+ "PARTICIPATION_WISH_CHANGE": "当日意愿上升",
302
+ "TRADE_DATE": "交易日",
303
+ },
304
+ inplace=True,
309
305
  )
310
-
311
- temp_df = pd.DataFrame(
312
- [
313
- data_json["ApiResults"]["scrd"]["desire"][2]["XData"],
314
- data_json["ApiResults"]["scrd"]["desire"][2]["Ydata"]["PeopleNumChg"],
315
- data_json["ApiResults"]["scrd"]["desire"][2]["Ydata"][
316
- "TotalPeopleNumChange"
317
- ],
318
- ]
319
- ).T
320
- temp_df.columns = ["日期", "当日意愿下降", "五日累计意愿"]
321
- temp_df["日期"] = date_str[:4] + "-" + temp_df["日期"]
322
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
323
-
324
- temp_df.sort_values(by=["日期"], inplace=True)
306
+ temp_df = temp_df[["交易日", "当日意愿上升", "5日平均参与意愿变化"]]
307
+ temp_df["交易日"] = pd.to_datetime(temp_df["交易日"], errors="coerce").dt.date
308
+ temp_df.sort_values(by=["交易日"], inplace=True)
325
309
  temp_df.reset_index(inplace=True, drop=True)
326
- temp_df["当日意愿下降"] = pd.to_numeric(temp_df["当日意愿下降"], errors="coerce")
327
- temp_df["五日累计意愿"] = pd.to_numeric(temp_df["五日累计意愿"], errors="coerce")
328
- return temp_df
329
-
330
-
331
- def stock_comment_detail_scrd_cost_em(symbol: str = "600000") -> pd.DataFrame:
332
- """
333
- 东方财富网-数据中心-特色数据-千股千评-市场热度-市场成本
334
- https://data.eastmoney.com/stockcomment/stock/600000.html
335
- :param symbol: 股票代码
336
- :type symbol: str
337
- :return: 市场热度-市场成本
338
- :rtype: pandas.DataFrame
339
- """
340
- url = f"https://data.eastmoney.com/stockcomment/api/{symbol}.json"
341
- try_count = 10
342
- data_json = None
343
- while try_count:
344
- try:
345
- r = requests.get(url)
346
- data_json = r.json()
347
- break
348
- except requests.exceptions.JSONDecodeError:
349
- try_count -= 1
350
- time.sleep(1)
351
- continue
352
- date_str = (
353
- data_json["ApiResults"]["scrd"]["cost"][0][0]["UpdateDate"]
354
- .split(" ")[0]
355
- .replace("/", "-")
310
+ temp_df["当日意愿上升"] = pd.to_numeric(temp_df["当日意愿上升"], errors="coerce")
311
+ temp_df["5日平均参与意愿变化"] = pd.to_numeric(
312
+ temp_df["5日平均参与意愿变化"], errors="coerce"
356
313
  )
357
-
358
- temp_df = pd.DataFrame(
359
- [
360
- data_json["ApiResults"]["scrd"]["cost"][1]["XData"],
361
- data_json["ApiResults"]["scrd"]["cost"][1]["Ydata"]["AvgBuyPrice"],
362
- data_json["ApiResults"]["scrd"]["cost"][1]["Ydata"]["FiveDayAvgBuyPrice"],
363
- ]
364
- ).T
365
- temp_df.columns = ["日期", "市场成本", "5日市场成本"]
366
- temp_df["日期"] = date_str[:4] + "-" + temp_df["日期"]
367
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
368
- temp_df.sort_values(by=["日期"], inplace=True)
369
- temp_df.reset_index(inplace=True, drop=True)
370
- temp_df["市场成本"] = pd.to_numeric(temp_df["市场成本"], errors="coerce")
371
- temp_df["5日市场成本"] = pd.to_numeric(temp_df["5日市场成本"], errors="coerce")
372
314
  return temp_df
373
315
 
374
316
 
@@ -400,8 +342,3 @@ if __name__ == "__main__":
400
342
  stock_comment_detail_scrd_desire_daily_em(symbol="600000")
401
343
  )
402
344
  print(stock_comment_detail_scrd_desire_daily_em_df)
403
-
404
- stock_comment_detail_scrd_cost_em_df = stock_comment_detail_scrd_cost_em(
405
- symbol="600000"
406
- )
407
- print(stock_comment_detail_scrd_cost_em_df)
@@ -0,0 +1,183 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ Date: 2024/7/16 22:00
5
+ Desc: 富途牛牛-主题投资-概念板块-成分股
6
+ https://www.futunn.com/quote/sparks-us
7
+ """
8
+
9
+ import json
10
+
11
+ import pandas as pd
12
+ import requests
13
+ from bs4 import BeautifulSoup
14
+
15
+
16
+ def _stock_concept_cons_futu(symbol: str = "巴菲特持仓") -> pd.DataFrame:
17
+ """
18
+ 富途牛牛-主题投资-概念板块-成分股
19
+ https://www.futunn.com/quote/sparks-us
20
+ :param symbol: 板块名称; choice of {"巴菲特持仓", "佩洛西持仓"}
21
+ :type symbol: str
22
+ :return: 概念板块
23
+ :rtype: pandas.DataFrame
24
+ """
25
+ symbol_map = {
26
+ "巴菲特持仓": "BK2999",
27
+ "佩洛西持仓": "BK20883",
28
+ }
29
+ url = f"https://www.futunn.com/stock/{symbol_map[symbol]}"
30
+ # 定义查询参数
31
+ params = {"global_content": json.dumps({"promote_id": 13766, "sub_promote_id": 24})}
32
+ headers = {
33
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
34
+ "(KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
35
+ }
36
+ r = requests.get(url, params=params, headers=headers)
37
+ soup = BeautifulSoup(r.text, features="lxml")
38
+ temp_code_name = [
39
+ item.find_all("div", attrs={"class": "fix-left"})
40
+ for item in soup.find(name="div", attrs={"class": "content-main"}).find_all("a")
41
+ ]
42
+ temp_value_list = [
43
+ item.find_all("div", attrs={"class": "middle"})
44
+ for item in soup.find(name="div", attrs={"class": "content-main"}).find_all("a")
45
+ ]
46
+ code_name_list = [item[0].find_all("span") for item in temp_code_name]
47
+
48
+ quant_list = [item[0].find_all("span") for item in temp_value_list]
49
+ temp_df = pd.DataFrame(
50
+ [
51
+ [item[0]["title"] for item in code_name_list],
52
+ [item[1]["title"] for item in code_name_list],
53
+ [item[0]["title"] for item in quant_list],
54
+ [item[1]["title"] for item in quant_list],
55
+ [item[2]["title"] for item in quant_list],
56
+ [item[3]["title"] for item in quant_list],
57
+ [item[4]["title"] for item in quant_list],
58
+ [item[5]["title"] for item in quant_list],
59
+ [item[6]["title"] for item in quant_list],
60
+ [item[7]["title"] for item in quant_list],
61
+ [item[8]["title"] for item in quant_list],
62
+ [item[9]["title"] for item in quant_list],
63
+ [item[10]["title"] for item in quant_list],
64
+ [item[11]["title"] for item in quant_list],
65
+ [item[12]["title"] for item in quant_list],
66
+ [item[13]["title"] for item in quant_list],
67
+ [item[14]["title"] for item in quant_list],
68
+ ]
69
+ ).T
70
+ temp_df.columns = [
71
+ "代码",
72
+ "股票名称",
73
+ "最新价",
74
+ "涨跌额",
75
+ "涨跌幅",
76
+ "成交量",
77
+ "成交额",
78
+ "-",
79
+ "-",
80
+ "-",
81
+ "-",
82
+ "-",
83
+ "-",
84
+ "-",
85
+ "-",
86
+ "-",
87
+ "-",
88
+ ]
89
+ temp_df = temp_df[
90
+ [
91
+ "代码",
92
+ "股票名称",
93
+ "最新价",
94
+ "涨跌额",
95
+ "涨跌幅",
96
+ "成交量",
97
+ "成交额",
98
+ ]
99
+ ]
100
+ return temp_df
101
+
102
+
103
+ def stock_concept_cons_futu(symbol: str = "特朗普概念股") -> pd.DataFrame:
104
+ """
105
+ 富途牛牛-主题投资-概念板块-成分股
106
+ https://www.futunn.com/quote/sparks-us
107
+ :param symbol: 板块名称; choice of {"巴菲特持仓", "佩洛西持仓", "特朗普概念股"}
108
+ :type symbol: str
109
+ :return: 概念板块
110
+ :rtype: pandas.DataFrame
111
+ """
112
+ if symbol == "特朗普概念股":
113
+ url = "https://www.futunn.com/quote-api/quote-v2/get-plate-stock"
114
+ params = {
115
+ "marketType": "2",
116
+ "plateId": "10102960",
117
+ "page": "0",
118
+ "pageSize": "30",
119
+ }
120
+ headers = {
121
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
122
+ "(KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
123
+ "Quote-Token": "7f74cd2a5e",
124
+ }
125
+ r = requests.get(url, params=params, headers=headers)
126
+ data_json = r.json()
127
+ total_page = data_json["data"]["pagination"]["pageCount"]
128
+ big_df = pd.DataFrame()
129
+ for page in range(0, total_page):
130
+ params.update(
131
+ {
132
+ "page": page,
133
+ }
134
+ )
135
+ if page == 1:
136
+ headers.update({"Quote-Token": "a3043d6fed"})
137
+ r = requests.get(url, params=params, headers=headers)
138
+ data_json = r.json()
139
+ temp_df = pd.DataFrame(data_json["data"]["list"])
140
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
141
+
142
+ big_df.rename(
143
+ columns={
144
+ "stockCode": "代码",
145
+ "name": "股票名称",
146
+ "price": "最新价",
147
+ "change": "涨跌额",
148
+ "changeRatio": "涨跌幅",
149
+ "tradeVolumn": "成交量",
150
+ "tradeTrunover": "成交额",
151
+ },
152
+ inplace=True,
153
+ )
154
+ big_df = big_df[
155
+ [
156
+ "代码",
157
+ "股票名称",
158
+ "最新价",
159
+ "涨跌额",
160
+ "涨跌幅",
161
+ "成交量",
162
+ "成交额",
163
+ ]
164
+ ]
165
+ big_df["最新价"] = pd.to_numeric(big_df["最新价"], errors="coerce")
166
+ big_df["涨跌额"] = pd.to_numeric(big_df["涨跌额"], errors="coerce")
167
+ return big_df
168
+ else:
169
+ temp_df = _stock_concept_cons_futu(symbol)
170
+ temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce")
171
+ temp_df["涨跌额"] = pd.to_numeric(temp_df["涨跌额"], errors="coerce")
172
+ return temp_df
173
+
174
+
175
+ if __name__ == "__main__":
176
+ stock_concept_cons_futu_df = stock_concept_cons_futu(symbol="特朗普概念股")
177
+ print(stock_concept_cons_futu_df)
178
+
179
+ stock_concept_cons_futu_df = stock_concept_cons_futu(symbol="巴菲特持仓")
180
+ print(stock_concept_cons_futu_df)
181
+
182
+ stock_concept_cons_futu_df = stock_concept_cons_futu(symbol="佩洛西持仓")
183
+ print(stock_concept_cons_futu_df)
@@ -5,6 +5,7 @@ Date: 2023/4/7 15:05
5
5
  Desc: 乐咕乐股-大盘拥挤度
6
6
  https://legulegu.com/stockdata/ashares-congestion
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
 
@@ -24,7 +25,7 @@ def stock_a_congestion_lg() -> pd.DataFrame:
24
25
  r = requests.get(
25
26
  url,
26
27
  params=params,
27
- **get_cookie_csrf(url="https://legulegu.com/stockdata/ashares-congestion")
28
+ **get_cookie_csrf(url="https://legulegu.com/stockdata/ashares-congestion"),
28
29
  )
29
30
  data_json = r.json()
30
31
  temp_df = pd.DataFrame(data_json["items"])
@@ -1,19 +1,16 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/4/4 19:00
4
+ Date: 2025/11/4 18:00
5
5
  Desc: 东方财富网-概念板-行情中心-日K-筹码分布
6
6
  https://quote.eastmoney.com/concept/sz000001.html
7
7
  """
8
8
 
9
- import json
10
9
  from datetime import datetime
11
10
 
12
11
  import pandas as pd
12
+ import py_mini_racer
13
13
  import requests
14
- from py_mini_racer import py_mini_racer
15
-
16
- from akshare.stock_feature.stock_hist_em import code_id_map_em
17
14
 
18
15
 
19
16
  def stock_cyq_em(symbol: str = "000001", adjust: str = "") -> pd.DataFrame:
@@ -222,22 +219,19 @@ def stock_cyq_em(symbol: str = "000001", adjust: str = "") -> pd.DataFrame:
222
219
  js_code = py_mini_racer.MiniRacer()
223
220
  js_code.eval(html_str)
224
221
  adjust_dict = {"qfq": "1", "hfq": "2", "": "0"}
225
- code_id_dict = code_id_map_em()
222
+ market_code = 1 if symbol.startswith("6") else 0
226
223
  url = "https://push2his.eastmoney.com/api/qt/stock/kline/get"
227
224
  params = {
228
- "secid": f"{code_id_dict[symbol]}.{symbol}",
229
- "ut": "fa5fd1943c7b386f172d6893dbfba10b",
225
+ "secid": f"{market_code}.{symbol}",
230
226
  "fields1": "f1,f2,f3,f4,f5,f6",
231
227
  "fields2": "f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",
232
228
  "klt": "101",
233
229
  "fqt": adjust_dict[adjust],
234
230
  "end": datetime.now().date().strftime("%Y%m%d"),
235
231
  "lmt": "210",
236
- "cb": "quote_jp1",
237
232
  }
238
233
  r = requests.get(url, params=params)
239
- data_json = r.text.strip("quote_jp1(").strip(");")
240
- data_json = json.loads(data_json)
234
+ data_json = r.json()
241
235
  temp_df = pd.DataFrame([item.split(",") for item in data_json["data"]["klines"]])
242
236
  temp_df.columns = [
243
237
  "date",