akshare 1.14.49__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 (343) hide show
  1. akshare/__init__.py +595 -129
  2. akshare/air/air_hebei.py +77 -54
  3. akshare/air/air_zhenqi.py +0 -4
  4. akshare/air/cons.py +1 -0
  5. akshare/air/crypto.js +1 -1
  6. akshare/air/outcrypto.js +1 -1
  7. akshare/article/cons.py +1 -0
  8. akshare/article/epu_index.py +4 -3
  9. akshare/article/ff_factor.py +19 -8
  10. akshare/article/fred_md.py +4 -1
  11. akshare/article/risk_rv.py +3 -8
  12. akshare/bank/bank_cbirc_2020.py +11 -11
  13. akshare/bank/cons.py +7 -6
  14. akshare/bond/bond_buy_back_em.py +228 -0
  15. akshare/bond/bond_cb_sina.py +1 -0
  16. akshare/bond/bond_cb_ths.py +17 -9
  17. akshare/bond/bond_cbond.py +19 -14
  18. akshare/bond/bond_china.py +38 -39
  19. akshare/bond/bond_china_money.py +1 -1
  20. akshare/bond/bond_convert.py +10 -9
  21. akshare/bond/bond_em.py +37 -17
  22. akshare/bond/bond_summary.py +38 -37
  23. akshare/bond/bond_zh_cov.py +31 -40
  24. akshare/bond/bond_zh_sina.py +4 -0
  25. akshare/bond/cons.py +14 -11
  26. akshare/cal/__init__.py +0 -0
  27. akshare/cal/rv.py +170 -0
  28. akshare/cost/cost_living.py +7 -5
  29. akshare/crypto/__init__.py +1 -1
  30. akshare/crypto/crypto_bitcoin_cme.py +9 -7
  31. akshare/crypto/crypto_hold.py +4 -2
  32. akshare/currency/currency.py +1 -0
  33. akshare/currency/currency_china_bank_sina.py +11 -6
  34. akshare/data/__init__.py +1 -1
  35. akshare/data/cninfo.js +1 -1
  36. akshare/datasets.py +10 -21
  37. akshare/economic/cons.py +10 -3
  38. akshare/economic/macro_australia.py +74 -69
  39. akshare/economic/macro_bank.py +95 -653
  40. akshare/economic/macro_canada.py +92 -81
  41. akshare/economic/macro_china.py +97 -105
  42. akshare/economic/macro_china_hk.py +0 -1
  43. akshare/economic/macro_euro.py +103 -56
  44. akshare/economic/macro_finance_ths.py +7 -5
  45. akshare/economic/macro_germany.py +1 -1
  46. akshare/economic/macro_japan.py +0 -1
  47. akshare/economic/macro_other.py +1 -6
  48. akshare/economic/macro_swiss.py +2 -3
  49. akshare/economic/macro_uk.py +1 -1
  50. akshare/economic/macro_usa.py +7 -9
  51. akshare/economic/marco_cnbs.py +11 -6
  52. akshare/energy/energy_carbon.py +0 -1
  53. akshare/energy/energy_oil_em.py +1 -2
  54. akshare/event/cons.py +1 -0
  55. akshare/exceptions.py +43 -0
  56. akshare/file_fold/calendar.json +245 -2
  57. akshare/forex/__init__.py +0 -0
  58. akshare/forex/cons.py +192 -0
  59. akshare/forex/forex_em.py +149 -0
  60. akshare/fortune/fortune_500.py +1 -37
  61. akshare/fortune/fortune_bloomberg.py +6 -3
  62. akshare/fortune/fortune_forbes_500.py +3 -6
  63. akshare/fortune/fortune_hurun.py +2 -1
  64. akshare/fortune/fortune_xincaifu_500.py +17 -14
  65. akshare/fund/fund_announcement_em.py +145 -0
  66. akshare/fund/fund_aum_em.py +49 -35
  67. akshare/fund/fund_em.py +251 -220
  68. akshare/fund/fund_etf_em.py +44 -35
  69. akshare/fund/fund_etf_sina.py +75 -27
  70. akshare/fund/fund_etf_ths.py +2 -0
  71. akshare/fund/fund_fee_em.py +172 -0
  72. akshare/fund/fund_fhsp_em.py +42 -32
  73. akshare/fund/fund_init_em.py +8 -5
  74. akshare/fund/fund_lof_em.py +12 -19
  75. akshare/fund/fund_manager.py +25 -11
  76. akshare/fund/fund_overview_em.py +42 -0
  77. akshare/fund/fund_portfolio_em.py +23 -21
  78. akshare/fund/fund_position_lg.py +19 -8
  79. akshare/fund/fund_rank_em.py +2 -5
  80. akshare/fund/fund_rating.py +33 -12
  81. akshare/fund/fund_scale_em.py +24 -13
  82. akshare/fund/fund_scale_sina.py +20 -10
  83. akshare/fund/fund_xq.py +3 -2
  84. akshare/futures/cons.py +135 -39
  85. akshare/futures/cot.py +55 -56
  86. akshare/futures/futures_basis.py +49 -11
  87. akshare/futures/futures_comex_em.py +1 -0
  88. akshare/futures/futures_comm_ctp.py +1 -1
  89. akshare/futures/futures_contract_detail.py +59 -9
  90. akshare/futures/futures_daily_bar.py +66 -59
  91. akshare/futures/futures_foreign.py +14 -8
  92. akshare/futures/futures_hf_em.py +215 -61
  93. akshare/futures/futures_hist_em.py +191 -0
  94. akshare/futures/futures_hq_sina.py +5 -3
  95. akshare/futures/futures_index_ccidx.py +24 -82
  96. akshare/futures/futures_inventory_99.py +70 -272
  97. akshare/futures/futures_inventory_em.py +14 -11
  98. akshare/futures/futures_news_shmet.py +2 -2
  99. akshare/futures/futures_roll_yield.py +11 -24
  100. akshare/futures/futures_rule.py +7 -3
  101. akshare/futures/futures_rule_em.py +38 -0
  102. akshare/futures/futures_settlement_price_sgx.py +21 -6
  103. akshare/futures/futures_stock_js.py +0 -1
  104. akshare/futures/futures_to_spot.py +5 -6
  105. akshare/futures/futures_warehouse_receipt.py +48 -47
  106. akshare/futures/futures_zh_sina.py +3 -3
  107. akshare/futures/receipt.py +298 -165
  108. akshare/futures/requests_fun.py +16 -3
  109. akshare/futures/symbol_var.py +32 -13
  110. akshare/futures_derivative/cons.py +100 -103
  111. akshare/futures_derivative/futures_contract_info_cffex.py +55 -39
  112. akshare/futures_derivative/futures_contract_info_czce.py +2 -0
  113. akshare/futures_derivative/futures_contract_info_dce.py +43 -17
  114. akshare/futures_derivative/futures_contract_info_gfex.py +43 -31
  115. akshare/futures_derivative/futures_contract_info_ine.py +43 -34
  116. akshare/futures_derivative/futures_contract_info_shfe.py +3 -4
  117. akshare/futures_derivative/futures_cot_sina.py +8 -6
  118. akshare/futures_derivative/futures_index_sina.py +25 -13
  119. akshare/fx/cons.py +12 -7
  120. akshare/fx/fx_c_swap_cm.py +62 -0
  121. akshare/fx/fx_quote.py +3 -2
  122. akshare/fx/fx_quote_baidu.py +2 -1
  123. akshare/hf/__init__.py +1 -1
  124. akshare/hf/hf_sp500.py +8 -7
  125. akshare/index/cons.py +132 -28
  126. akshare/index/index_cni.py +7 -7
  127. akshare/index/index_cons.py +2 -2
  128. akshare/index/index_csindex.py +68 -0
  129. akshare/index/index_cx.py +20 -20
  130. akshare/index/index_drewry.py +17 -16
  131. akshare/index/index_eri.py +1 -0
  132. akshare/index/index_global_em.py +167 -0
  133. akshare/index/index_global_sina.py +82 -0
  134. akshare/index/index_kq_fz.py +17 -14
  135. akshare/index/index_kq_ss.py +1 -0
  136. akshare/index/index_option_qvix.py +351 -16
  137. akshare/index/index_research_sw.py +21 -21
  138. akshare/index/index_spot.py +9 -5
  139. akshare/index/index_stock_hk.py +5 -9
  140. akshare/index/index_stock_zh.py +111 -24
  141. akshare/index/index_stock_zh_csindex.py +3 -367
  142. akshare/index/index_sugar.py +18 -4
  143. akshare/index/index_sw.py +10 -2
  144. akshare/index/index_yw.py +53 -75
  145. akshare/index/index_zh_em.py +15 -82
  146. akshare/interest_rate/interbank_rate_em.py +0 -1
  147. akshare/movie/jm.js +0 -1
  148. akshare/news/__init__.py +1 -1
  149. akshare/news/news_baidu.py +395 -222
  150. akshare/news/news_stock.py +49 -16
  151. akshare/option/cons.py +2 -2
  152. akshare/option/option_commodity.py +341 -220
  153. akshare/option/option_commodity_sina.py +22 -26
  154. akshare/option/option_contract_info_ctp.py +63 -0
  155. akshare/option/option_current_sse.py +61 -0
  156. akshare/option/option_current_szse.py +84 -0
  157. akshare/option/option_czce.py +37 -9
  158. akshare/option/option_daily_stats_sse_szse.py +0 -1
  159. akshare/option/option_em.py +4 -8
  160. akshare/option/option_finance.py +60 -12
  161. akshare/option/option_finance_sina.py +7 -7
  162. akshare/option/option_lhb_em.py +0 -1
  163. akshare/option/option_margin.py +62 -0
  164. akshare/option/option_premium_analysis_em.py +58 -53
  165. akshare/option/option_risk_analysis_em.py +11 -8
  166. akshare/option/option_risk_indicator_sse.py +3 -4
  167. akshare/option/option_value_analysis_em.py +62 -55
  168. akshare/other/__init__.py +1 -1
  169. akshare/pro/__init__.py +0 -1
  170. akshare/pro/client.py +6 -4
  171. akshare/pro/cons.py +3 -2
  172. akshare/pro/data_pro.py +6 -5
  173. akshare/qdii/__init__.py +0 -0
  174. akshare/qdii/qdii_jsl.py +233 -0
  175. akshare/qhkc/__init__.py +1 -6
  176. akshare/qhkc/qhkc_api.py +64 -22
  177. akshare/qhkc_web/__init__.py +1 -6
  178. akshare/qhkc_web/qhkc_fund.py +10 -6
  179. akshare/qhkc_web/qhkc_index.py +28 -14
  180. akshare/qhkc_web/qhkc_tool.py +62 -59
  181. akshare/rate/__init__.py +1 -1
  182. akshare/rate/repo_rate.py +36 -32
  183. akshare/reits/__init__.py +1 -1
  184. akshare/reits/reits_basic.py +149 -13
  185. akshare/request.py +117 -0
  186. akshare/spot/__init__.py +1 -1
  187. akshare/spot/spot_hog_soozhu.py +165 -3
  188. akshare/spot/spot_sge.py +70 -9
  189. akshare/stock/cons.py +60 -23
  190. akshare/stock/stock_allotment_cninfo.py +8 -8
  191. akshare/stock/stock_ask_bid_em.py +3 -78
  192. akshare/stock/stock_board_concept_em.py +160 -35
  193. akshare/stock/stock_board_industry_em.py +163 -70
  194. akshare/stock/stock_dividend_cninfo.py +31 -17
  195. akshare/stock/stock_dzjy_em.py +347 -260
  196. akshare/stock/stock_fund_em.py +72 -64
  197. akshare/stock/stock_fund_hold.py +1 -2
  198. akshare/stock/stock_gsrl_em.py +1 -0
  199. akshare/stock/stock_hk_comparison_em.py +175 -0
  200. akshare/stock/stock_hk_famous.py +4 -5
  201. akshare/stock/stock_hk_fhpx_ths.py +2 -1
  202. akshare/stock/stock_hk_hot_rank_em.py +1 -0
  203. akshare/stock/stock_hk_sina.py +84 -36
  204. akshare/stock/stock_hold_control_cninfo.py +82 -0
  205. akshare/stock/stock_hold_control_em.py +0 -2
  206. akshare/stock/stock_hot_rank_em.py +4 -1
  207. akshare/stock/stock_hot_search_baidu.py +32 -19
  208. akshare/stock/stock_hot_up_em.py +4 -1
  209. akshare/stock/stock_hsgt_em.py +155 -0
  210. akshare/stock/stock_industry.py +1 -0
  211. akshare/stock/stock_industry_cninfo.py +1 -2
  212. akshare/stock/stock_info.py +6 -4
  213. akshare/stock/stock_info_em.py +17 -11
  214. akshare/stock/stock_intraday_em.py +4 -78
  215. akshare/stock/stock_intraday_sina.py +2 -2
  216. akshare/stock/stock_news_cx.py +39 -0
  217. akshare/stock/stock_profile_cninfo.py +7 -7
  218. akshare/stock/stock_profile_em.py +302 -0
  219. akshare/stock/stock_rank_forecast.py +6 -5
  220. akshare/stock/stock_repurchase_em.py +7 -2
  221. akshare/stock/stock_share_changes_cninfo.py +7 -5
  222. akshare/stock/stock_share_hold.py +24 -20
  223. akshare/stock/stock_stop.py +6 -6
  224. akshare/stock/stock_summary.py +153 -417
  225. akshare/stock/stock_us_famous.py +5 -6
  226. akshare/stock/stock_us_js.py +3 -2
  227. akshare/stock/stock_us_pink.py +38 -27
  228. akshare/stock/stock_us_sina.py +7 -3
  229. akshare/stock/stock_weibo_nlp.py +18 -20
  230. akshare/stock/stock_xq.py +24 -22
  231. akshare/stock/stock_zh_a_sina.py +8 -5
  232. akshare/stock/stock_zh_a_special.py +240 -243
  233. akshare/stock/stock_zh_a_tick_tx.py +11 -3
  234. akshare/stock/stock_zh_ah_tx.py +23 -26
  235. akshare/stock/stock_zh_b_sina.py +2 -2
  236. akshare/stock/stock_zh_comparison_em.py +250 -0
  237. akshare/stock/stock_zh_kcb_sina.py +67 -64
  238. akshare/stock_a/__init__.py +0 -0
  239. akshare/stock_a/stock_board_concept_name_em.py +170 -0
  240. akshare/stock_a/stock_individual_fund_flow_rank.py +258 -0
  241. akshare/stock_a/stock_zh_a_spot.py +212 -0
  242. akshare/stock_feature/cons.py +1 -0
  243. akshare/stock_feature/stock_a_indicator.py +9 -54
  244. akshare/stock_feature/stock_a_pe_and_pb.py +23 -5
  245. akshare/stock_feature/stock_account_em.py +0 -1
  246. akshare/stock_feature/stock_all_pb.py +2 -1
  247. akshare/stock_feature/stock_analyst_em.py +36 -30
  248. akshare/stock_feature/stock_board_concept_ths.py +328 -0
  249. akshare/stock_feature/stock_board_industry_ths.py +57 -2
  250. akshare/stock_feature/stock_buffett_index_lg.py +10 -8
  251. akshare/stock_feature/stock_classify_sina.py +3 -6
  252. akshare/stock_feature/stock_comment_em.py +81 -144
  253. akshare/stock_feature/stock_congestion_lg.py +2 -1
  254. akshare/stock_feature/stock_cyq_em.py +5 -11
  255. akshare/stock_feature/stock_disclosure_cninfo.py +6 -6
  256. akshare/stock_feature/stock_dxsyl_em.py +121 -74
  257. akshare/stock_feature/stock_ebs_lg.py +5 -4
  258. akshare/stock_feature/stock_esg_sina.py +29 -7
  259. akshare/stock_feature/stock_fhps_em.py +2 -1
  260. akshare/stock_feature/stock_fhps_ths.py +15 -7
  261. akshare/stock_feature/stock_fund_flow.py +30 -22
  262. akshare/stock_feature/stock_gddh_em.py +19 -11
  263. akshare/stock_feature/stock_gdfx_em.py +226 -113
  264. akshare/stock_feature/stock_gdhs.py +75 -50
  265. akshare/stock_feature/stock_gdzjc_em.py +21 -10
  266. akshare/stock_feature/stock_gpzy_em.py +78 -46
  267. akshare/stock_feature/stock_gxl_lg.py +3 -2
  268. akshare/stock_feature/stock_hist_em.py +137 -234
  269. akshare/stock_feature/stock_hist_tx.py +13 -10
  270. akshare/stock_feature/stock_hk_valuation_baidu.py +20 -8
  271. akshare/stock_feature/stock_hot_xq.py +4 -6
  272. akshare/stock_feature/stock_hsgt_em.py +269 -97
  273. akshare/stock_feature/stock_hsgt_exchange_rate.py +115 -87
  274. akshare/stock_feature/stock_hsgt_min_em.py +13 -16
  275. akshare/stock_feature/stock_info.py +7 -80
  276. akshare/stock_feature/stock_inner_trade_xq.py +38 -31
  277. akshare/stock_feature/stock_jgdy_em.py +43 -40
  278. akshare/stock_feature/stock_lhb_em.py +119 -3
  279. akshare/stock_feature/stock_margin_em.py +0 -1
  280. akshare/stock_feature/stock_margin_sse.py +0 -2
  281. akshare/stock_feature/stock_pankou_em.py +71 -35
  282. akshare/stock_feature/stock_qsjy_em.py +13 -4
  283. akshare/stock_feature/stock_report_em.py +151 -7
  284. akshare/stock_feature/stock_research_report_em.py +55 -20
  285. akshare/stock_feature/stock_sy_em.py +20 -15
  286. akshare/stock_feature/stock_technology_ths.py +122 -77
  287. akshare/stock_feature/stock_tfp_em.py +2 -1
  288. akshare/stock_feature/stock_three_report_em.py +21 -5
  289. akshare/stock_feature/stock_ttm_lyr.py +18 -9
  290. akshare/stock_feature/stock_value_em.py +83 -0
  291. akshare/stock_feature/stock_yjbb_em.py +58 -32
  292. akshare/stock_feature/stock_yjyg_cninfo.py +6 -2
  293. akshare/stock_feature/stock_yjyg_em.py +1 -1
  294. akshare/stock_feature/stock_yzxdr_em.py +24 -22
  295. akshare/stock_feature/stock_zdhtmx_em.py +20 -6
  296. akshare/stock_feature/stock_zh_vote_baidu.py +4 -1
  297. akshare/stock_feature/stock_ztb_em.py +39 -24
  298. akshare/stock_fundamental/__init__.py +1 -1
  299. akshare/stock_fundamental/stock_basic_info_xq.py +119 -0
  300. akshare/stock_fundamental/{stock_finance_hk.py → stock_finance_hk_em.py} +23 -16
  301. akshare/stock_fundamental/{stock_finance.py → stock_finance_sina.py} +60 -7
  302. akshare/stock_fundamental/stock_finance_ths.py +524 -57
  303. akshare/stock_fundamental/stock_finance_us_em.py +268 -0
  304. akshare/stock_fundamental/stock_gbjg_em.py +80 -0
  305. akshare/stock_fundamental/stock_hold.py +26 -17
  306. akshare/stock_fundamental/stock_ipo_declare.py +1 -0
  307. akshare/stock_fundamental/stock_kcb_detail_sse.py +10 -10
  308. akshare/stock_fundamental/stock_kcb_sse.py +26 -25
  309. akshare/stock_fundamental/stock_notice.py +12 -3
  310. akshare/stock_fundamental/stock_profit_forecast_em.py +31 -13
  311. akshare/stock_fundamental/stock_profit_forecast_hk_etnet.py +64 -41
  312. akshare/stock_fundamental/stock_profit_forecast_ths.py +86 -35
  313. akshare/stock_fundamental/stock_recommend.py +20 -4
  314. akshare/stock_fundamental/stock_zygc.py +5 -62
  315. akshare/utils/context.py +43 -0
  316. akshare/utils/demjson.py +2009 -1338
  317. akshare/utils/func.py +49 -2
  318. akshare/utils/multi_decrypt.py +53 -0
  319. akshare/utils/token_process.py +6 -5
  320. {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info}/METADATA +54 -80
  321. akshare-1.17.99.dist-info/RECORD +409 -0
  322. {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info}/WHEEL +1 -1
  323. {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info/licenses}/LICENSE +1 -1
  324. tests/test_func.py +3 -5
  325. akshare/bond/bond_futures.py +0 -50
  326. akshare/bond/bond_investing.py +0 -139
  327. akshare/crypto/crypto_hist_investing.py +0 -249
  328. akshare/fund/fund_announcement.py +0 -56
  329. akshare/futures/futures_international.py +0 -170
  330. akshare/futures/futures_news_baidu.py +0 -54
  331. akshare/futures/inventory_data.py +0 -100
  332. akshare/futures_derivative/futures_index_price_nh.py +0 -61
  333. akshare/futures_derivative/futures_index_return_nh.py +0 -47
  334. akshare/futures_derivative/futures_index_volatility_nh.py +0 -53
  335. akshare/futures_derivative/futures_other_index_nh.py +0 -145
  336. akshare/index/index_fear_greed_funddb.py +0 -78
  337. akshare/index/index_investing.py +0 -232
  338. akshare/sport/__init__.py +0 -6
  339. akshare/sport/sport_olympic.py +0 -27
  340. akshare/stock_feature/stock_wencai.py +0 -104
  341. akshare/stock_fundamental/stock_mda_ym.py +0 -40
  342. akshare-1.14.49.dist-info/RECORD +0 -387
  343. {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info}/top_level.txt +0 -0
@@ -1,23 +1,26 @@
1
1
  # -*- coding:utf-8 -*-
2
2
  # !/usr/bin/env python
3
3
  """
4
- Date: 2022/12/13 14:18
4
+ Date: 2025/11/19 12:00
5
5
  Desc: 天天基金网-基金数据-分红送配
6
6
  https://fund.eastmoney.com/data/fundfenhong.html
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
  from tqdm import tqdm
11
12
 
12
13
 
13
- def fund_fh_em() -> pd.DataFrame:
14
+ def fund_fh_em(year: str = "2025") -> pd.DataFrame:
14
15
  """
15
16
  天天基金网-基金数据-分红送配-基金分红
16
17
  https://fund.eastmoney.com/data/fundfenhong.html#DJR,desc,1,,,
18
+ :param year: 查询年份
19
+ :type year: str
17
20
  :return: 基金分红
18
21
  :rtype: pandas.DataFrame
19
22
  """
20
- url = "http://fund.eastmoney.com/Data/funddataIndex_Interface.aspx"
23
+ url = "https://fund.eastmoney.com/Data/funddataIndex_Interface.aspx"
21
24
  params = {
22
25
  "dt": "8",
23
26
  "page": "1",
@@ -25,21 +28,21 @@ def fund_fh_em() -> pd.DataFrame:
25
28
  "sort": "asc",
26
29
  "gs": "",
27
30
  "ftype": "",
28
- "year": "",
31
+ "year": year,
29
32
  }
30
33
  r = requests.get(url, params=params)
31
34
  data_text = r.text
32
35
  total_page = eval(data_text[data_text.find("=") + 1: data_text.find(";")])[0]
33
36
  big_df = pd.DataFrame()
34
37
  for page in tqdm(range(1, total_page + 1), leave=False):
35
- params.update({"page": page})
38
+ params.update({"page": str(page)})
36
39
  r = requests.get(url, params=params)
37
40
  data_text = r.text
38
41
  temp_list = eval(
39
42
  data_text[data_text.find("[["): data_text.find(";var jjfh_jjgs")]
40
43
  )
41
44
  temp_df = pd.DataFrame(temp_list)
42
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
45
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
43
46
  big_df.reset_index(inplace=True)
44
47
  big_df["index"] = big_df.index + 1
45
48
  big_df.columns = [
@@ -52,22 +55,26 @@ def fund_fh_em() -> pd.DataFrame:
52
55
  "分红发放日",
53
56
  "-",
54
57
  ]
55
- big_df = big_df[["序号", "基金代码", "基金简称", "权益登记日", "除息日期", "分红", "分红发放日"]]
56
- big_df['权益登记日'] = pd.to_datetime(big_df['权益登记日']).dt.date
57
- big_df['除息日期'] = pd.to_datetime(big_df['除息日期']).dt.date
58
- big_df['分红发放日'] = pd.to_datetime(big_df['分红发放日']).dt.date
59
- big_df['分红'] = pd.to_numeric(big_df['分红'])
58
+ big_df = big_df[
59
+ ["序号", "基金代码", "基金简称", "权益登记日", "除息日期", "分红", "分红发放日"]
60
+ ]
61
+ big_df["权益登记日"] = pd.to_datetime(big_df["权益登记日"]).dt.date
62
+ big_df["除息日期"] = pd.to_datetime(big_df["除息日期"]).dt.date
63
+ big_df["分红发放日"] = pd.to_datetime(big_df["分红发放日"]).dt.date
64
+ big_df["分红"] = pd.to_numeric(big_df["分红"])
60
65
  return big_df
61
66
 
62
67
 
63
- def fund_cf_em() -> pd.DataFrame:
68
+ def fund_cf_em(year: str = "2025") -> pd.DataFrame:
64
69
  """
65
70
  天天基金网-基金数据-分红送配-基金拆分
66
71
  https://fund.eastmoney.com/data/fundchaifen.html#FSRQ,desc,1,,,
72
+ :param year: 查询年份
73
+ :type year: str
67
74
  :return: 基金拆分
68
75
  :rtype: pandas.DataFrame
69
76
  """
70
- url = "http://fund.eastmoney.com/Data/funddataIndex_Interface.aspx"
77
+ url = "https://fund.eastmoney.com/Data/funddataIndex_Interface.aspx"
71
78
  params = {
72
79
  "dt": "9",
73
80
  "page": "1",
@@ -75,24 +82,24 @@ def fund_cf_em() -> pd.DataFrame:
75
82
  "sort": "desc",
76
83
  "gs": "",
77
84
  "ftype": "",
78
- "year": "",
85
+ "year": year,
79
86
  }
80
87
  r = requests.get(url, params=params)
81
88
  data_text = r.text
82
89
  total_page = eval(data_text[data_text.find("=") + 1: data_text.find(";")])[0]
83
90
  big_df = pd.DataFrame()
84
91
  for page in tqdm(range(1, total_page + 1), leave=False):
85
- params.update({"page": page})
92
+ params.update({"page": str(page)})
86
93
  r = requests.get(url, params=params)
87
94
  data_text = r.text
88
95
  temp_str = data_text[data_text.find("[["): data_text.find(";var jjcf_jjgs")]
89
96
  if temp_str:
90
97
  temp_list = eval(temp_str)
91
98
  temp_df = pd.DataFrame(temp_list)
92
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
99
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
93
100
 
94
101
  big_df.reset_index(inplace=True)
95
- big_df.loc[:, 'index'] = big_df['index'] + 1
102
+ big_df.loc[:, "index"] = big_df["index"] + 1
96
103
  big_df.columns = [
97
104
  "序号",
98
105
  "基金代码",
@@ -102,9 +109,11 @@ def fund_cf_em() -> pd.DataFrame:
102
109
  "拆分折算",
103
110
  "-",
104
111
  ]
105
- big_df = big_df[["序号", "基金代码", "基金简称", "拆分折算日", "拆分类型", "拆分折算"]]
106
- big_df['拆分折算日'] = pd.to_datetime(big_df['拆分折算日']).dt.date
107
- big_df['拆分折算'] = pd.to_numeric(big_df['拆分折算'], errors="coerce")
112
+ big_df = big_df[
113
+ ["序号", "基金代码", "基金简称", "拆分折算日", "拆分类型", "拆分折算"]
114
+ ]
115
+ big_df["拆分折算日"] = pd.to_datetime(big_df["拆分折算日"]).dt.date
116
+ big_df["拆分折算"] = pd.to_numeric(big_df["拆分折算"], errors="coerce")
108
117
  return big_df
109
118
 
110
119
 
@@ -115,7 +124,7 @@ def fund_fh_rank_em() -> pd.DataFrame:
115
124
  :return: 基金分红排行
116
125
  :rtype: pandas.DataFrame
117
126
  """
118
- url = "http://fund.eastmoney.com/Data/funddataIndex_Interface.aspx"
127
+ url = "https://fund.eastmoney.com/Data/funddataIndex_Interface.aspx"
119
128
  params = {
120
129
  "dt": "10",
121
130
  "page": "1",
@@ -123,24 +132,23 @@ def fund_fh_rank_em() -> pd.DataFrame:
123
132
  "sort": "desc",
124
133
  "gs": "",
125
134
  "ftype": "",
126
- "year": "",
127
135
  }
128
136
  r = requests.get(url, params=params)
129
137
  data_text = r.text
130
138
  total_page = eval(data_text[data_text.find("=") + 1: data_text.find(";")])[0]
131
139
  big_df = pd.DataFrame()
132
140
  for page in tqdm(range(1, total_page + 1), leave=False):
133
- params.update({"page": page})
141
+ params.update({"page": str(page)})
134
142
  r = requests.get(url, params=params)
135
143
  data_text = r.text
136
144
  temp_list = eval(
137
145
  data_text[data_text.find("[["): data_text.find(";var fhph_jjgs")]
138
146
  )
139
147
  temp_df = pd.DataFrame(temp_list)
140
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
148
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
141
149
 
142
150
  big_df.reset_index(inplace=True)
143
- big_df.loc[:, "index"] = big_df.index + 1
151
+ big_df["index"] = big_df.index + 1
144
152
  big_df.columns = [
145
153
  "序号",
146
154
  "基金代码",
@@ -150,18 +158,20 @@ def fund_fh_rank_em() -> pd.DataFrame:
150
158
  "成立日期",
151
159
  "-",
152
160
  ]
153
- big_df = big_df[["序号", "基金代码", "基金简称", "累计分红", "累计次数", "成立日期"]]
154
- big_df['成立日期'] = pd.to_datetime(big_df['成立日期']).dt.date
155
- big_df['累计分红'] = pd.to_numeric(big_df['累计分红'], errors="coerce")
156
- big_df['累计次数'] = pd.to_numeric(big_df['累计次数'], errors="coerce")
161
+ big_df = big_df[
162
+ ["序号", "基金代码", "基金简称", "累计分红", "累计次数", "成立日期"]
163
+ ]
164
+ big_df["成立日期"] = pd.to_datetime(big_df["成立日期"]).dt.date
165
+ big_df["累计分红"] = pd.to_numeric(big_df["累计分红"], errors="coerce")
166
+ big_df["累计次数"] = pd.to_numeric(big_df["累计次数"], errors="coerce")
157
167
  return big_df
158
168
 
159
169
 
160
- if __name__ == '__main__':
161
- fund_fh_em_df = fund_fh_em()
170
+ if __name__ == "__main__":
171
+ fund_fh_em_df = fund_fh_em(year="2025")
162
172
  print(fund_fh_em_df)
163
173
 
164
- fund_cf_em_df = fund_cf_em()
174
+ fund_cf_em_df = fund_cf_em(year="2025")
165
175
  print(fund_cf_em_df)
166
176
 
167
177
  fund_fh_rank_em_df = fund_fh_rank_em()
@@ -5,6 +5,7 @@ Date: 2023/11/7 18:30
5
5
  Desc: 基金数据-新发基金-新成立基金
6
6
  https://fund.eastmoney.com/data/xinfound.html
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
 
@@ -67,11 +68,13 @@ def fund_new_found_em() -> pd.DataFrame:
67
68
  "优惠费率",
68
69
  ]
69
70
  ]
70
- temp_df['募集份额'] = pd.to_numeric(temp_df['募集份额'], errors="coerce")
71
- temp_df['成立日期'] = pd.to_datetime(temp_df['成立日期'], errors="coerce").dt.date
72
- temp_df['成立来涨幅'] = pd.to_numeric(temp_df['成立来涨幅'].str.replace(',', ''), errors="coerce")
73
- temp_df['优惠费率'] = temp_df['优惠费率'].str.strip("%")
74
- temp_df['优惠费率'] = pd.to_numeric(temp_df['优惠费率'], errors="coerce")
71
+ temp_df["募集份额"] = pd.to_numeric(temp_df["募集份额"], errors="coerce")
72
+ temp_df["成立日期"] = pd.to_datetime(temp_df["成立日期"], errors="coerce").dt.date
73
+ temp_df["成立来涨幅"] = pd.to_numeric(
74
+ temp_df["成立来涨幅"].str.replace(",", ""), errors="coerce"
75
+ )
76
+ temp_df["优惠费率"] = temp_df["优惠费率"].str.strip("%")
77
+ temp_df["优惠费率"] = pd.to_numeric(temp_df["优惠费率"], errors="coerce")
75
78
  return temp_df
76
79
 
77
80
 
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/3/20 15:00
4
+ Date: 2025/3/11 17:00
5
5
  Desc: 东方财富-LOF 行情
6
6
  https://quote.eastmoney.com/center/gridlist.html#fund_lof
7
7
  https://quote.eastmoney.com/sz166009.html
@@ -12,6 +12,8 @@ from functools import lru_cache
12
12
  import pandas as pd
13
13
  import requests
14
14
 
15
+ from akshare.utils.func import fetch_paginated_data
16
+
15
17
 
16
18
  @lru_cache()
17
19
  def _fund_lof_code_id_map_em() -> dict:
@@ -24,21 +26,18 @@ def _fund_lof_code_id_map_em() -> dict:
24
26
  url = "https://2.push2.eastmoney.com/api/qt/clist/get"
25
27
  params = {
26
28
  "pn": "1",
27
- "pz": "5000",
29
+ "pz": "100",
28
30
  "po": "1",
29
31
  "np": "1",
30
32
  "ut": "bd1d9ddb04089700cf9c27f6f7426281",
31
33
  "fltt": "2",
32
34
  "invt": "2",
33
35
  "wbp2u": "|0|0|0|web",
34
- "fid": "f3",
36
+ "fid": "f12",
35
37
  "fs": "b:MK0404,b:MK0405,b:MK0406,b:MK0407",
36
- "fields": "f12,f13",
37
- "_": "1672806290972",
38
+ "fields": "f3,f12,f13",
38
39
  }
39
- r = requests.get(url, params=params)
40
- data_json = r.json()
41
- temp_df = pd.DataFrame(data_json["data"]["diff"])
40
+ temp_df = fetch_paginated_data(url, params)
42
41
  temp_dict = dict(zip(temp_df["f12"], temp_df["f13"]))
43
42
  return temp_dict
44
43
 
@@ -53,7 +52,7 @@ def fund_lof_spot_em() -> pd.DataFrame:
53
52
  url = "https://88.push2.eastmoney.com/api/qt/clist/get"
54
53
  params = {
55
54
  "pn": "1",
56
- "pz": "5000",
55
+ "pz": "100",
57
56
  "po": "1",
58
57
  "np": "1",
59
58
  "ut": "bd1d9ddb04089700cf9c27f6f7426281",
@@ -64,11 +63,8 @@ def fund_lof_spot_em() -> pd.DataFrame:
64
63
  "fs": "b:MK0404,b:MK0405,b:MK0406,b:MK0407",
65
64
  "fields": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,"
66
65
  "f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152",
67
- "_": "1672806290972",
68
66
  }
69
- r = requests.get(url, params=params)
70
- data_json = r.json()
71
- temp_df = pd.DataFrame(data_json["data"]["diff"])
67
+ temp_df = fetch_paginated_data(url, params)
72
68
  temp_df.rename(
73
69
  columns={
74
70
  "f12": "代码",
@@ -157,7 +153,6 @@ def fund_lof_hist_em(
157
153
  "secid": f"{code_id_dict[symbol]}.{symbol}",
158
154
  "beg": start_date,
159
155
  "end": end_date,
160
- "_": "1623766962675",
161
156
  }
162
157
  r = requests.get(url, params=params)
163
158
  data_json = r.json()
@@ -230,7 +225,6 @@ def fund_lof_hist_min_em(
230
225
  "ndays": "5",
231
226
  "iscr": "0",
232
227
  "secid": f"{code_id_dict[symbol]}.{symbol}",
233
- "_": "1623766962675",
234
228
  }
235
229
  r = requests.get(url, params=params)
236
230
  data_json = r.json()
@@ -270,7 +264,6 @@ def fund_lof_hist_min_em(
270
264
  "secid": f"{code_id_dict[symbol]}.{symbol}",
271
265
  "beg": "0",
272
266
  "end": "20500000",
273
- "_": "1630930917857",
274
267
  }
275
268
  r = requests.get(url, params=params)
276
269
  data_json = r.json()
@@ -348,7 +341,7 @@ if __name__ == "__main__":
348
341
  symbol="166009",
349
342
  period="daily",
350
343
  start_date="20000101",
351
- end_date="20230703",
344
+ end_date="20250311",
352
345
  adjust="hfq",
353
346
  )
354
347
  print(fund_lof_hist_em_df)
@@ -357,7 +350,7 @@ if __name__ == "__main__":
357
350
  symbol="166009",
358
351
  period="1",
359
352
  adjust="",
360
- start_date="2024-03-20 09:30:00",
361
- end_date="2024-03-20 14:40:00",
353
+ start_date="2025-03-11 09:30:00",
354
+ end_date="2025-03-11 14:40:00",
362
355
  )
363
356
  print(fund_lof_hist_min_em_df)
@@ -1,15 +1,16 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/11/5 20:00
4
+ Date: 2025/9/14 18:00
5
5
  Desc: 基金经理大全
6
6
  https://fund.eastmoney.com/manager/default.html
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
- from tqdm import tqdm
11
11
 
12
12
  from akshare.utils import demjson
13
+ from akshare.utils.tqdm import get_tqdm
13
14
 
14
15
 
15
16
  def fund_manager_em() -> pd.DataFrame:
@@ -34,10 +35,13 @@ def fund_manager_em() -> pd.DataFrame:
34
35
  data_text = r.text
35
36
  data_json = demjson.decode(data_text.strip("var returnjson= "))
36
37
  total_page = data_json["pages"]
38
+ tqdm = get_tqdm()
37
39
  for page in tqdm(range(1, total_page + 1), leave=False):
38
- params.update({
39
- "pi": page,
40
- })
40
+ params.update(
41
+ {
42
+ "pi": page,
43
+ }
44
+ )
41
45
  r = requests.get(url, params=params)
42
46
  data_text = r.text
43
47
  data_json = demjson.decode(data_text.strip("var returnjson= "))
@@ -51,7 +55,7 @@ def fund_manager_em() -> pd.DataFrame:
51
55
  "姓名",
52
56
  "_",
53
57
  "所属公司",
54
- "_",
58
+ "现任基金代码",
55
59
  "现任基金",
56
60
  "累计从业时间",
57
61
  "现任基金最佳回报",
@@ -65,19 +69,29 @@ def fund_manager_em() -> pd.DataFrame:
65
69
  "序号",
66
70
  "姓名",
67
71
  "所属公司",
72
+ "现任基金代码",
68
73
  "现任基金",
69
74
  "累计从业时间",
70
75
  "现任基金资产总规模",
71
76
  "现任基金最佳回报",
72
77
  ]
73
78
  ]
74
- big_df["现任基金最佳回报"] = big_df["现任基金最佳回报"].str.split("%", expand=True).iloc[:, 0]
75
- big_df["现任基金资产总规模"] = big_df["现任基金资产总规模"].str.split("亿元", expand=True).iloc[:, 0]
79
+ big_df["现任基金最佳回报"] = (
80
+ big_df["现任基金最佳回报"].str.split("%", expand=True).iloc[:, 0]
81
+ )
82
+ big_df["现任基金资产总规模"] = (
83
+ big_df["现任基金资产总规模"].str.split("亿元", expand=True).iloc[:, 0]
84
+ )
76
85
  big_df["累计从业时间"] = pd.to_numeric(big_df["累计从业时间"], errors="coerce")
77
- big_df["现任基金最佳回报"] = pd.to_numeric(big_df["现任基金最佳回报"], errors="coerce")
78
- big_df["现任基金资产总规模"] = pd.to_numeric(big_df["现任基金资产总规模"], errors="coerce")
86
+ big_df["现任基金最佳回报"] = pd.to_numeric(
87
+ big_df["现任基金最佳回报"], errors="coerce"
88
+ )
89
+ big_df["现任基金资产总规模"] = pd.to_numeric(
90
+ big_df["现任基金资产总规模"], errors="coerce"
91
+ )
92
+ big_df["现任基金代码"] = big_df["现任基金代码"].apply(lambda x: x.split(","))
79
93
  big_df["现任基金"] = big_df["现任基金"].apply(lambda x: x.split(","))
80
- big_df = big_df.explode(column="现任基金")
94
+ big_df = big_df.explode(column=["现任基金代码", "现任基金"])
81
95
  big_df.reset_index(drop=True, inplace=True)
82
96
  return big_df
83
97
 
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ Date: 2025/9/16 21:00
5
+ Desc: 天天基金-基金档案
6
+ https://fundf10.eastmoney.com/jbgk_015641.html
7
+ """
8
+ from io import StringIO
9
+
10
+ import pandas as pd
11
+ import requests
12
+
13
+
14
+ def fund_overview_em(symbol: str = "015641") -> pd.DataFrame:
15
+ """
16
+ 天天基金-基金档案-基本概况
17
+ https://fundf10.eastmoney.com/jbgk_015641.html
18
+ :param symbol: 基金代码
19
+ :type symbol: str
20
+ :return: 基本概况
21
+ :rtype: pandas.DataFrame
22
+ """
23
+ url = f"https://fundf10.eastmoney.com/jbgk_{symbol}.html"
24
+ r = requests.get(url)
25
+ html_content = pd.read_html(StringIO(r.text))
26
+
27
+ if len(html_content) == 0:
28
+ temp_df = pd.DataFrame([])
29
+ else:
30
+ df_dict = {}
31
+ # 最后一个表格的数据是我们想要的,按照Key-Value的形式存储
32
+ for _, row in html_content[-1].iterrows():
33
+ df_dict[row[0]] = row[1]
34
+ df_dict[row[2]] = row[3]
35
+ temp_df = pd.DataFrame([df_dict])
36
+
37
+ return temp_df
38
+
39
+
40
+ if __name__ == "__main__":
41
+ fund_overview_em_df = fund_overview_em(symbol="015641")
42
+ print(fund_overview_em_df)
@@ -43,7 +43,18 @@ def fund_portfolio_hold_em(symbol: str = "000001", date: str = "2024") -> pd.Dat
43
43
  item.text.split("\xa0\xa0")[1]
44
44
  for item in soup.find_all(name="h4", attrs={"class": "t"})
45
45
  ]
46
- big_df = pd.DataFrame()
46
+
47
+ column_name = [
48
+ "序号",
49
+ "股票代码",
50
+ "股票名称",
51
+ "占净值比例",
52
+ "持股数",
53
+ "持仓市值",
54
+ "季度",
55
+ ]
56
+ big_df = pd.DataFrame(columns=column_name)
57
+
47
58
  for item in range(len(item_label)):
48
59
  temp_df = pd.read_html(
49
60
  StringIO(data_json["content"]), converters={"股票代码": str}
@@ -74,25 +85,17 @@ def fund_portfolio_hold_em(symbol: str = "000001", date: str = "2024") -> pd.Dat
74
85
  )
75
86
 
76
87
  temp_df["季度"] = item_label[item]
77
- temp_df = temp_df[
78
- [
79
- "序号",
80
- "股票代码",
81
- "股票名称",
82
- "占净值比例",
83
- "持股数",
84
- "持仓市值",
85
- "季度",
86
- ]
87
- ]
88
- big_df = pd.concat(objs=[temp_df, big_df], ignore_index=True)
89
- big_df["占净值比例"] = pd.to_numeric(big_df["占净值比例"], errors="coerce")
90
- big_df["持股数"] = pd.to_numeric(big_df["持股数"], errors="coerce")
91
- big_df["持仓市值"] = pd.to_numeric(big_df["持仓市值"], errors="coerce")
92
- del big_df["序号"]
93
- big_df.reset_index(inplace=True, drop=False)
94
- big_df["index"] = big_df["index"] + 1
95
- big_df.rename(columns={"index": "序号"}, inplace=True)
88
+ temp_df = temp_df[column_name]
89
+ big_df = pd.concat(objs=[temp_df, big_df], ignore_index=True) if not big_df.empty else temp_df
90
+
91
+ if not big_df.empty:
92
+ big_df["占净值比例"] = pd.to_numeric(big_df["占净值比例"], errors="coerce")
93
+ big_df["持股数"] = pd.to_numeric(big_df["持股数"], errors="coerce")
94
+ big_df["持仓市值"] = pd.to_numeric(big_df["持仓市值"], errors="coerce")
95
+ del big_df["序号"]
96
+ big_df.reset_index(inplace=True, drop=False)
97
+ big_df["index"] = big_df["index"] + 1
98
+ big_df.rename(columns={"index": "序号"}, inplace=True)
96
99
  return big_df
97
100
 
98
101
 
@@ -181,7 +184,6 @@ def fund_portfolio_industry_allocation_em(
181
184
  "fundCode": symbol,
182
185
  "year": date,
183
186
  "callback": "jQuery183006997159478989867_1648016188499",
184
- "_": "1648016377955",
185
187
  }
186
188
  r = requests.get(url, params=params, headers=headers)
187
189
  data_text = r.text
@@ -5,6 +5,7 @@ Date: 2023/4/5 22:05
5
5
  Desc: 乐咕乐股-基金仓位
6
6
  https://legulegu.com/stockdata/fund-position/pos-stock
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
 
@@ -20,11 +21,16 @@ def fund_stock_position_lg() -> pd.DataFrame:
20
21
  """
21
22
  url = "https://legulegu.com/api/stockdata/fund-position"
22
23
  token = get_token_lg()
23
- params = {"token": token, "type": "pos_stock", "category": "总仓位", "marketId": "5"}
24
+ params = {
25
+ "token": token,
26
+ "type": "pos_stock",
27
+ "category": "总仓位",
28
+ "marketId": "5",
29
+ }
24
30
  r = requests.get(
25
31
  url,
26
32
  params=params,
27
- **get_cookie_csrf(url="https://legulegu.com/stockdata/fund-position/pos-stock")
33
+ **get_cookie_csrf(url="https://legulegu.com/stockdata/fund-position/pos-stock"),
28
34
  )
29
35
  data_json = r.json()
30
36
  temp_df = pd.DataFrame(data_json)
@@ -36,7 +42,7 @@ def fund_stock_position_lg() -> pd.DataFrame:
36
42
  "position",
37
43
  ]
38
44
  ]
39
- temp_df['date'] = pd.to_datetime(temp_df['date']).dt.date
45
+ temp_df["date"] = pd.to_datetime(temp_df["date"]).dt.date
40
46
  temp_df["close"] = pd.to_numeric(temp_df["close"], errors="coerce")
41
47
  temp_df["position"] = pd.to_numeric(temp_df["position"], errors="coerce")
42
48
  return temp_df
@@ -62,7 +68,7 @@ def fund_balance_position_lg() -> pd.DataFrame:
62
68
  params=params,
63
69
  **get_cookie_csrf(
64
70
  url="https://legulegu.com/stockdata/fund-position/pos-pingheng"
65
- )
71
+ ),
66
72
  )
67
73
  data_json = r.json()
68
74
  temp_df = pd.DataFrame(data_json)
@@ -74,7 +80,7 @@ def fund_balance_position_lg() -> pd.DataFrame:
74
80
  "position",
75
81
  ]
76
82
  ]
77
- temp_df['date'] = pd.to_datetime(temp_df['date']).dt.date
83
+ temp_df["date"] = pd.to_datetime(temp_df["date"]).dt.date
78
84
  temp_df["close"] = pd.to_numeric(temp_df["close"], errors="coerce")
79
85
  temp_df["position"] = pd.to_numeric(temp_df["position"], errors="coerce")
80
86
  return temp_df
@@ -89,13 +95,18 @@ def fund_linghuo_position_lg() -> pd.DataFrame:
89
95
  """
90
96
  url = "https://legulegu.com/api/stockdata/fund-position"
91
97
  token = get_token_lg()
92
- params = {"token": token, "type": "pos_linghuo", "category": "总仓位", "marketId": "5"}
98
+ params = {
99
+ "token": token,
100
+ "type": "pos_linghuo",
101
+ "category": "总仓位",
102
+ "marketId": "5",
103
+ }
93
104
  r = requests.get(
94
105
  url,
95
106
  params=params,
96
107
  **get_cookie_csrf(
97
108
  url="https://legulegu.com/stockdata/fund-position/pos-linghuo"
98
- )
109
+ ),
99
110
  )
100
111
  data_json = r.json()
101
112
  temp_df = pd.DataFrame(data_json)
@@ -107,7 +118,7 @@ def fund_linghuo_position_lg() -> pd.DataFrame:
107
118
  "position",
108
119
  ]
109
120
  ]
110
- temp_df['date'] = pd.to_datetime(temp_df['date']).dt.date
121
+ temp_df["date"] = pd.to_datetime(temp_df["date"]).dt.date
111
122
  temp_df["close"] = pd.to_numeric(temp_df["close"], errors="coerce")
112
123
  temp_df["position"] = pd.to_numeric(temp_df["position"], errors="coerce")
113
124
  return temp_df
@@ -65,7 +65,7 @@ def fund_open_fund_rank_em(symbol: str = "全部") -> pd.DataFrame:
65
65
  "qdii": "",
66
66
  "tabSubtype": ",,,,,",
67
67
  "pi": "1",
68
- "pn": "20000",
68
+ "pn": "30000",
69
69
  "dx": "1",
70
70
  "v": "0.1591891419018292",
71
71
  }
@@ -165,7 +165,7 @@ def fund_exchange_rank_em() -> pd.DataFrame:
165
165
  "sc": "1nzf",
166
166
  "st": "desc",
167
167
  "pi": "1",
168
- "pn": "10000",
168
+ "pn": "30000",
169
169
  "v": "0.1591891419018292",
170
170
  }
171
171
  headers = {
@@ -259,7 +259,6 @@ def fund_money_rank_em() -> pd.DataFrame:
259
259
  "orderType": "desc",
260
260
  "pageIndex": "1",
261
261
  "pageSize": "10000",
262
- "_": "1603867224251",
263
262
  }
264
263
  headers = {
265
264
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
@@ -363,7 +362,6 @@ def fund_lcx_rank_em() -> pd.DataFrame:
363
362
  "pageSize": "50",
364
363
  "FBQ": "",
365
364
  "callback": "jQuery18303264654966943197_1603867158043",
366
- "_": "1603867224251",
367
365
  }
368
366
  headers = {
369
367
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
@@ -447,7 +445,6 @@ def fund_hk_rank_em() -> pd.DataFrame:
447
445
  "sortfield": "Y",
448
446
  "sorttype": "-1",
449
447
  "isbuy": "0",
450
- "_": "1610790553848",
451
448
  }
452
449
  headers = {
453
450
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "