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
@@ -0,0 +1,268 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ Date: 2025/3/27 14:00
5
+ Desc: 美股-基本面数据
6
+ https://emweb.eastmoney.com/PC_USF10/pages/index.html?code=TSLA&type=web&color=w#/cwfx
7
+ """
8
+
9
+ import pandas as pd
10
+ import requests
11
+
12
+ from akshare.utils.cons import headers
13
+
14
+
15
+ def __stock_financial_us_report_query_market_em(symbol: str = "TSLA") -> str:
16
+ """
17
+ 东方财富-美股-财务分析-三大报表-查询市场
18
+ https://emweb.eastmoney.com/PC_USF10/pages/index.html?code=TSLA&type=web&color=w#/cwfx
19
+ :param symbol: 股票代码
20
+ :type symbol: str
21
+ :return: 查询市场
22
+ :rtype: str
23
+ """
24
+ url = "https://datacenter.eastmoney.com/securities/api/data/v1/get"
25
+ params = {
26
+ "reportName": "RPT_USF10_INFO_ORGPROFILE",
27
+ "columns": "SECUCODE,SECURITY_CODE,ORG_CODE,SECURITY_INNER_CODE,ORG_NAME,ORG_EN_ABBR,BELONG_INDUSTRY,"
28
+ "FOUND_DATE,CHAIRMAN,REG_PLACE,ADDRESS,EMP_NUM,ORG_TEL,ORG_FAX,ORG_EMAIL,ORG_WEB,ORG_PROFILE",
29
+ "quoteColumns": "",
30
+ "filter": f'(SECURITY_CODE="{symbol}")',
31
+ "pageNumber": "1",
32
+ "pageSize": "200",
33
+ "sortTypes": "",
34
+ "sortColumns": "",
35
+ "source": "SECURITIES",
36
+ "client": "PC",
37
+ "v": "04406064331266868",
38
+ }
39
+ r = requests.get(url, params=params)
40
+ data_json = r.json()
41
+ stock_code = data_json["result"]["data"][0]["SECUCODE"]
42
+ return stock_code
43
+
44
+
45
+ def __stock_financial_us_report_em(
46
+ stock: str = "TSLA", symbol: str = "综合损益表", indicator: str = "年报"
47
+ ) -> str:
48
+ """
49
+ 东方财富-美股-财务分析-三大报表
50
+ https://emweb.eastmoney.com/PC_USF10/pages/index.html?code=TSLA&type=web&color=w#/cwfx
51
+ :param stock: 股票代码
52
+ :type stock: str
53
+ :param symbol: choice of {"资产负债表", "综合损益表", "现金流量表"}
54
+ :type symbol: str
55
+ :param indicator: choice of {"年报", "单季报", "累计季报"}
56
+ :type indicator: str
57
+ :return: 东方财富-美股-财务分析-三大报表
58
+ :rtype: str
59
+ """
60
+ url = "https://datacenter.eastmoney.com/securities/api/data/v1/get"
61
+ stock = __stock_financial_us_report_query_market_em(stock)
62
+ if symbol == "资产负债表":
63
+ report_name = "RPT_USF10_FN_BALANCE"
64
+ elif symbol == "综合损益表":
65
+ report_name = "RPT_USF10_FN_INCOME"
66
+ elif symbol == "现金流量表":
67
+ report_name = "RPT_USSK_FN_CASHFLOW"
68
+ else:
69
+ raise ValueError("请输入正确的 symbol 参数")
70
+ params = {
71
+ "reportName": report_name,
72
+ "columns": "SECUCODE,SECURITY_CODE,SECURITY_NAME_ABBR,REPORT,REPORT_DATE,FISCAL_YEAR,CURRENCY,"
73
+ "ACCOUNT_STANDARD,REPORT_TYPE,DATE_TYPE_CODE",
74
+ "quoteColumns": "",
75
+ "filter": f'(SECUCODE="{stock}")',
76
+ "pageNumber": "",
77
+ "pageSize": "",
78
+ "sortTypes": "-1",
79
+ "sortColumns": "REPORT_DATE",
80
+ "source": "SECURITIES",
81
+ "client": "PC",
82
+ "v": "09583551779242467",
83
+ }
84
+ r = requests.get(url, params=params, headers=headers)
85
+ data_json = r.json()
86
+ temp_df = pd.DataFrame(data_json["result"]["data"])
87
+ temp_tuple = tuple(set(temp_df["REPORT"].tolist()))
88
+ if indicator == "年报":
89
+ tuple_data = tuple(item.strip() for item in temp_tuple if "FY" in item)
90
+ elif indicator == "单季报":
91
+ tuple_data = tuple(item.strip() for item in temp_tuple if any(q in item for q in ["Q1", "Q2", "Q3", "Q4"]))
92
+ elif indicator == "累计季报":
93
+ tuple_data = tuple(
94
+ item.strip() for item in temp_tuple if "Q6" in item or "Q9" in item
95
+ )
96
+ else:
97
+ raise ValueError("请输入正确的 indicator 参数")
98
+ sorted_tuple = tuple(
99
+ sorted(tuple_data, key=lambda x: x.split("/")[0], reverse=True)
100
+ )
101
+ double_quotes_str = str(sorted_tuple).replace("'", '"')
102
+ double_quotes_str = double_quotes_str.replace(" ", "")
103
+ return double_quotes_str
104
+
105
+
106
+ def stock_financial_us_report_em(
107
+ stock: str = "TSLA", symbol: str = "资产负债表", indicator: str = "年报"
108
+ ) -> pd.DataFrame:
109
+ """
110
+ 东方财富-美股-财务分析-三大报表
111
+ https://emweb.eastmoney.com/PC_USF10/pages/index.html?code=TSLA&type=web&color=w#/cwfx
112
+ :param stock: 股票代码
113
+ :type stock: str
114
+ :param symbol: choice of {"资产负债表", "综合损益表", "现金流量表"}
115
+ :type symbol: str
116
+ :param indicator: choice of {"年报", "单季报", "累计季报"}
117
+ :type indicator: str
118
+ :return: 东方财富-美股-财务分析-三大报表
119
+ :rtype: pandas.DataFrame
120
+ """
121
+ url = "https://datacenter.eastmoney.com/securities/api/data/v1/get"
122
+ date_str = __stock_financial_us_report_em(
123
+ stock=stock, symbol=symbol, indicator=indicator
124
+ )
125
+ stock = __stock_financial_us_report_query_market_em(stock)
126
+ if symbol == "资产负债表":
127
+ report_name = "RPT_USF10_FN_BALANCE"
128
+ elif symbol == "综合损益表":
129
+ report_name = "RPT_USF10_FN_INCOME"
130
+ elif symbol == "现金流量表":
131
+ report_name = "RPT_USSK_FN_CASHFLOW"
132
+ else:
133
+ raise ValueError("请输入正确的 symbol 参数")
134
+ params = {
135
+ "reportName": report_name,
136
+ "columns": "SECUCODE,SECURITY_CODE,SECURITY_NAME_ABBR,REPORT_DATE,REPORT_TYPE,REPORT,"
137
+ "STD_ITEM_CODE,AMOUNT,ITEM_NAME",
138
+ "quoteColumns": "",
139
+ "filter": f'(SECUCODE="{stock}")(REPORT in ' + date_str + ")",
140
+ "pageNumber": "",
141
+ "pageSize": "",
142
+ "sortTypes": "1,-1",
143
+ "sortColumns": "STD_ITEM_CODE,REPORT_DATE",
144
+ "source": "SECURITIES",
145
+ "client": "PC",
146
+ "v": "09583551779242467",
147
+ }
148
+ r = requests.get(url, params=params, headers=headers)
149
+ data_json = r.json()
150
+ temp_df = pd.DataFrame(data_json["result"]["data"])
151
+ return temp_df
152
+
153
+
154
+ def stock_financial_us_analysis_indicator_em(
155
+ symbol: str = "TSLA", indicator: str = "年报"
156
+ ) -> pd.DataFrame:
157
+ """
158
+ 东方财富-美股-财务分析-主要指标
159
+ https://emweb.eastmoney.com/PC_USF10/pages/index.html?code=TSLA&type=web&color=w#/cwfx
160
+ :param symbol: 股票代码
161
+ :type symbol: str
162
+ :param indicator: choice of {"年报", "单季报", "累计季报"}
163
+ :type indicator: str
164
+ :return: 东方财富-美股-财务分析-主要指标
165
+ :rtype: pandas.DataFrame
166
+ """
167
+ url = "https://datacenter.eastmoney.com/securities/api/data/v1/get"
168
+ symbol = __stock_financial_us_report_query_market_em(symbol)
169
+ params = {
170
+ "reportName": "RPT_USF10_FN_GMAININDICATOR",
171
+ "columns": "USF10_FN_GMAININDICATOR",
172
+ "quoteColumns": "",
173
+ "pageNumber": "",
174
+ "pageSize": "",
175
+ "sortTypes": "-1",
176
+ "sortColumns": "REPORT_DATE",
177
+ "source": "SECURITIES",
178
+ "client": "PC",
179
+ }
180
+ if "_" in symbol:
181
+ params["reportName"] = "RPT_USF10_FN_IMAININDICATOR"
182
+ params["columns"] = ("ORG_CODE,SECURITY_CODE,SECUCODE,SECURITY_NAME_ABBR,SECURITY_INNER_CODE,"
183
+ "STD_REPORT_DATE,REPORT_DATE,DATE_TYPE,DATE_TYPE_CODE,REPORT_TYPE,REPORT_DATA_TYPE,"
184
+ "FISCAL_YEAR,START_DATE,NOTICE_DATE,ACCOUNT_STANDARD,ACCOUNT_STANDARD_NAME,CURRENCY,"
185
+ "CURRENCY_NAME,ORGTYPE,TOTAL_INCOME,TOTAL_INCOME_YOY,PREMIUM_INCOME,PREMIUM_INCOME_YOY,"
186
+ "PARENT_HOLDER_NETPROFIT,PARENT_HOLDER_NETPROFIT_YOY,BASIC_EPS_CS,BASIC_EPS_CS_YOY,"
187
+ "DILUTED_EPS_CS,PAYOUT_RATIO,CAPITIAL_RATIO,ROE,ROE_YOY,ROA,ROA_YOY,DEBT_RATIO,"
188
+ "DEBT_RATIO_YOY,EQUITY_RATIO")
189
+ if indicator == "年报":
190
+ params.update({"filter": f"""(SECUCODE="{symbol}")(DATE_TYPE_CODE="001")"""})
191
+ elif indicator == "单季报":
192
+ params.update(
193
+ {
194
+ "filter": f"""(SECUCODE="{symbol}")(DATE_TYPE_CODE in ("003","006","007","008"))"""
195
+ }
196
+ )
197
+ elif indicator == "累计季报":
198
+ params.update(
199
+ {"filter": f"""(SECUCODE="{symbol}")(DATE_TYPE_CODE in ("002","004"))"""}
200
+ )
201
+ else:
202
+ raise ValueError("请输入正确的 indicator 参数")
203
+ r = requests.get(url, params=params)
204
+ data_json = r.json()
205
+ temp_df = pd.DataFrame(data_json["result"]["data"])
206
+ return temp_df
207
+
208
+
209
+ if __name__ == "__main__":
210
+ stock_financial_us_analysis_indicator_em_df = (
211
+ stock_financial_us_analysis_indicator_em(symbol="BABA", indicator="年报")
212
+ )
213
+ print(stock_financial_us_analysis_indicator_em_df)
214
+
215
+ stock_financial_us_analysis_indicator_em_df = (
216
+ stock_financial_us_analysis_indicator_em(symbol="BRK_A", indicator="单季报")
217
+ )
218
+ print(stock_financial_us_analysis_indicator_em_df)
219
+
220
+ stock_financial_us_analysis_indicator_em_df = (
221
+ stock_financial_us_analysis_indicator_em(symbol="TSLA", indicator="累计季报")
222
+ )
223
+ print(stock_financial_us_analysis_indicator_em_df)
224
+
225
+ stock_financial_us_report_em_df = stock_financial_us_report_em(
226
+ stock="BRK", symbol="资产负债表", indicator="年报"
227
+ )
228
+ print(stock_financial_us_report_em_df)
229
+
230
+ stock_financial_us_report_em_df = stock_financial_us_report_em(
231
+ stock="TSLA", symbol="资产负债表", indicator="单季报"
232
+ )
233
+ print(stock_financial_us_report_em_df)
234
+
235
+ stock_financial_us_report_em_df = stock_financial_us_report_em(
236
+ stock="TSLA", symbol="资产负债表", indicator="累计季报"
237
+ )
238
+ print(stock_financial_us_report_em_df)
239
+
240
+ stock_financial_us_report_em_df = stock_financial_us_report_em(
241
+ stock="TSLA", symbol="综合损益表", indicator="年报"
242
+ )
243
+ print(stock_financial_us_report_em_df)
244
+
245
+ stock_financial_us_report_em_df = stock_financial_us_report_em(
246
+ stock="TSLA", symbol="综合损益表", indicator="单季报"
247
+ )
248
+ print(stock_financial_us_report_em_df)
249
+
250
+ stock_financial_us_report_em_df = stock_financial_us_report_em(
251
+ stock="TSLA", symbol="综合损益表", indicator="累计季报"
252
+ )
253
+ print(stock_financial_us_report_em_df)
254
+
255
+ stock_financial_us_report_em_df = stock_financial_us_report_em(
256
+ stock="TSLA", symbol="现金流量表", indicator="年报"
257
+ )
258
+ print(stock_financial_us_report_em_df)
259
+
260
+ stock_financial_us_report_em_df = stock_financial_us_report_em(
261
+ stock="TSLA", symbol="现金流量表", indicator="单季报"
262
+ )
263
+ print(stock_financial_us_report_em_df)
264
+
265
+ stock_financial_us_report_em_df = stock_financial_us_report_em(
266
+ stock="TSLA", symbol="现金流量表", indicator="累计季报"
267
+ )
268
+ print(stock_financial_us_report_em_df)
@@ -0,0 +1,80 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ Date: 2025/4/3 18:00
5
+ Desc: 东方财富-A股数据-股本结构
6
+ https://emweb.securities.eastmoney.com/pc_hsf10/pages/index.html?type=web&code=SH603392&color=b#/gbjg/gbjg
7
+ """
8
+
9
+ import requests
10
+ import pandas as pd
11
+
12
+
13
+ def stock_zh_a_gbjg_em(symbol: str = "603392.SH") -> pd.DataFrame:
14
+ """
15
+ 东方财富-A股数据-股本结构
16
+ https://emweb.securities.eastmoney.com/pc_hsf10/pages/index.html#/gbjg
17
+ :param symbol: 股票代码
18
+ :type symbol: str
19
+ :return: 股本结构
20
+ :rtype: pandas.DataFrame
21
+ """
22
+ url = "https://datacenter.eastmoney.com/securities/api/data/v1/get"
23
+ params = {
24
+ "reportName": "RPT_F10_EH_EQUITY",
25
+ "columns": "SECUCODE,SECURITY_CODE,END_DATE,TOTAL_SHARES,LIMITED_SHARES,LIMITED_OTHARS,"
26
+ "LIMITED_DOMESTIC_NATURAL,LIMITED_STATE_LEGAL,LIMITED_OVERSEAS_NOSTATE,LIMITED_OVERSEAS_NATURAL,"
27
+ "UNLIMITED_SHARES,LISTED_A_SHARES,B_FREE_SHARE,H_FREE_SHARE,FREE_SHARES,LIMITED_A_SHARES,"
28
+ "NON_FREE_SHARES,LIMITED_B_SHARES,OTHER_FREE_SHARES,LIMITED_STATE_SHARES,"
29
+ "LIMITED_DOMESTIC_NOSTATE,LOCK_SHARES,LIMITED_FOREIGN_SHARES,LIMITED_H_SHARES,"
30
+ "SPONSOR_SHARES,STATE_SPONSOR_SHARES,SPONSOR_SOCIAL_SHARES,RAISE_SHARES,"
31
+ "RAISE_STATE_SHARES,RAISE_DOMESTIC_SHARES,RAISE_OVERSEAS_SHARES,CHANGE_REASON",
32
+ "quoteColumns": "",
33
+ "filter": f'(SECUCODE="{symbol}")',
34
+ "pageNumber": "1",
35
+ "pageSize": "20",
36
+ "sortTypes": "-1",
37
+ "sortColumns": "END_DATE",
38
+ "source": "HSF10",
39
+ "client": "PC",
40
+ "v": "047483522105257925"
41
+ }
42
+ r = requests.get(url, params=params)
43
+ data_json = r.json()
44
+ temp_df = pd.DataFrame(data_json['result']['data'])
45
+ temp_df.rename(columns={
46
+ "END_DATE": "变更日期",
47
+ "TOTAL_SHARES": "总股本",
48
+ "LISTED_A_SHARES": "已上市流通A股",
49
+ "FREE_SHARES": "已流通股份",
50
+ "CHANGE_REASON": "变动原因",
51
+ "LIMITED_A_SHARES": "流通受限股份",
52
+ "LIMITED_OTHARS": "其他内资持股(受限)",
53
+ "LIMITED_DOMESTIC_NOSTATE": "境内法人持股(受限)",
54
+ "LIMITED_DOMESTIC_NATURAL": "境内自然人持股(受限)",
55
+ }, inplace=True)
56
+ temp_df = temp_df[[
57
+ "变更日期",
58
+ "总股本",
59
+ "流通受限股份",
60
+ "其他内资持股(受限)",
61
+ "境内法人持股(受限)",
62
+ "境内自然人持股(受限)",
63
+ "已流通股份",
64
+ "已上市流通A股",
65
+ "变动原因",
66
+ ]]
67
+ temp_df["变更日期"] = pd.to_datetime(temp_df["变更日期"], errors="coerce").dt.date
68
+ temp_df["总股本"] = pd.to_numeric(temp_df["总股本"], errors="coerce")
69
+ temp_df["流通受限股份"] = pd.to_numeric(temp_df["流通受限股份"], errors="coerce")
70
+ temp_df["其他内资持股(受限)"] = pd.to_numeric(temp_df["其他内资持股(受限)"], errors="coerce")
71
+ temp_df["境内法人持股(受限)"] = pd.to_numeric(temp_df["境内法人持股(受限)"], errors="coerce")
72
+ temp_df["境内自然人持股(受限)"] = pd.to_numeric(temp_df["境内自然人持股(受限)"], errors="coerce")
73
+ temp_df["已流通股份"] = pd.to_numeric(temp_df["已流通股份"], errors="coerce")
74
+ temp_df["已上市流通A股"] = pd.to_numeric(temp_df["已上市流通A股"], errors="coerce")
75
+ return temp_df
76
+
77
+
78
+ if __name__ == '__main__':
79
+ stock_zh_a_gbjg_em_df = stock_zh_a_gbjg_em(symbol="603392.SH")
80
+ print(stock_zh_a_gbjg_em_df)
@@ -5,6 +5,7 @@ Date: 2024/2/21 11:00
5
5
  Desc: 新浪财经-股票-机构持股
6
6
  https://vip.stock.finance.sina.com.cn/q/go.php/vComStockHold/kind/jgcg/index.phtml
7
7
  """
8
+
8
9
  from io import StringIO
9
10
 
10
11
  import pandas as pd
@@ -43,17 +44,19 @@ def stock_institute_hold(symbol: str = "20051") -> pd.DataFrame:
43
44
  "占流通股比例",
44
45
  "占流通股比例增幅",
45
46
  ]
46
- temp_df['机构数'] = pd.to_numeric(temp_df['机构数'], errors="coerce")
47
- temp_df['机构数变化'] = pd.to_numeric(temp_df['机构数变化'], errors="coerce")
48
- temp_df['持股比例'] = pd.to_numeric(temp_df['持股比例'], errors="coerce")
49
- temp_df['持股比例增幅'] = pd.to_numeric(temp_df['持股比例增幅'], errors="coerce")
50
- temp_df['占流通股比例'] = pd.to_numeric(temp_df['占流通股比例'], errors="coerce")
51
- temp_df['占流通股比例增幅'] = pd.to_numeric(temp_df['占流通股比例增幅'], errors="coerce")
47
+ temp_df["机构数"] = pd.to_numeric(temp_df["机构数"], errors="coerce")
48
+ temp_df["机构数变化"] = pd.to_numeric(temp_df["机构数变化"], errors="coerce")
49
+ temp_df["持股比例"] = pd.to_numeric(temp_df["持股比例"], errors="coerce")
50
+ temp_df["持股比例增幅"] = pd.to_numeric(temp_df["持股比例增幅"], errors="coerce")
51
+ temp_df["占流通股比例"] = pd.to_numeric(temp_df["占流通股比例"], errors="coerce")
52
+ temp_df["占流通股比例增幅"] = pd.to_numeric(
53
+ temp_df["占流通股比例增幅"], errors="coerce"
54
+ )
52
55
  return temp_df
53
56
 
54
57
 
55
58
  def stock_institute_hold_detail(
56
- stock: str = "600433", quarter: str = "20201"
59
+ stock: str = "600433", quarter: str = "20201"
57
60
  ) -> pd.DataFrame:
58
61
  """
59
62
  新浪财经-股票-机构持股详情
@@ -72,7 +75,7 @@ def stock_institute_hold_detail(
72
75
  }
73
76
  r = requests.get(url, params=params)
74
77
  text_data = r.text
75
- json_data = demjson.decode(text_data[text_data.find("{"): -2])
78
+ json_data = demjson.decode(text_data[text_data.find("{") : -2])
76
79
  big_df = pd.DataFrame()
77
80
  for item in json_data["data"].keys():
78
81
  inner_temp_df = pd.DataFrame(json_data["data"][item]).T.iloc[:-1, :]
@@ -97,18 +100,24 @@ def stock_institute_hold_detail(
97
100
  "占流通股比例增幅",
98
101
  ]
99
102
  big_df["持股机构类型"] = big_df["持股机构类型"].str.replace("fund", "基金")
100
- big_df["持股机构类型"] = big_df["持股机构类型"].str.replace("socialSecurity", "全国社保")
103
+ big_df["持股机构类型"] = big_df["持股机构类型"].str.replace(
104
+ "socialSecurity", "全国社保"
105
+ )
101
106
  big_df["持股机构类型"] = big_df["持股机构类型"].str.replace("qfii", "QFII")
102
107
  big_df["持股机构类型"] = big_df["持股机构类型"].str.replace("insurance", "保险")
103
108
 
104
- big_df['持股数'] = pd.to_numeric(big_df['持股数'], errors="coerce")
105
- big_df['最新持股数'] = pd.to_numeric(big_df['最新持股数'], errors="coerce")
106
- big_df['持股比例'] = pd.to_numeric(big_df['持股比例'], errors="coerce")
107
- big_df['最新持股比例'] = pd.to_numeric(big_df['最新持股比例'], errors="coerce")
108
- big_df['占流通股比例'] = pd.to_numeric(big_df['占流通股比例'], errors="coerce")
109
- big_df['最新占流通股比例'] = pd.to_numeric(big_df['最新占流通股比例'], errors="coerce")
110
- big_df['持股比例增幅'] = pd.to_numeric(big_df['持股比例增幅'], errors="coerce")
111
- big_df['占流通股比例增幅'] = pd.to_numeric(big_df['占流通股比例增幅'], errors="coerce")
109
+ big_df["持股数"] = pd.to_numeric(big_df["持股数"], errors="coerce")
110
+ big_df["最新持股数"] = pd.to_numeric(big_df["最新持股数"], errors="coerce")
111
+ big_df["持股比例"] = pd.to_numeric(big_df["持股比例"], errors="coerce")
112
+ big_df["最新持股比例"] = pd.to_numeric(big_df["最新持股比例"], errors="coerce")
113
+ big_df["占流通股比例"] = pd.to_numeric(big_df["占流通股比例"], errors="coerce")
114
+ big_df["最新占流通股比例"] = pd.to_numeric(
115
+ big_df["最新占流通股比例"], errors="coerce"
116
+ )
117
+ big_df["持股比例增幅"] = pd.to_numeric(big_df["持股比例增幅"], errors="coerce")
118
+ big_df["占流通股比例增幅"] = pd.to_numeric(
119
+ big_df["占流通股比例增幅"], errors="coerce"
120
+ )
112
121
  return big_df
113
122
  else:
114
123
  return pd.DataFrame()
@@ -5,6 +5,7 @@ Date: 2022/1/7 17:02
5
5
  Desc: 东方财富网-数据中心-新股申购-首发申报信息-首发申报企业信息
6
6
  https://data.eastmoney.com/xg/xg/sbqy.html
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
 
@@ -4,6 +4,7 @@
4
4
  Date: 2022/4/7 17:36
5
5
  Desc: http://kcb.sse.com.cn/renewal/xmxq/index.shtml?auditId=926&anchor_type=0
6
6
  """
7
+
7
8
  import requests
8
9
  import pandas as pd
9
10
 
@@ -13,20 +14,19 @@ import pandas as pd
13
14
  def stock_kcb_detail_renewal():
14
15
  url = "http://query.sse.com.cn/commonSoaQuery.do"
15
16
  params = {
16
- 'isPagination': 'true',
17
- 'sqlId': 'SH_XM_LB',
18
- 'stockAuditNum': '926', # 每次更新该字段就可以
19
- '_': '1649324745607',
17
+ "isPagination": "true",
18
+ "sqlId": "SH_XM_LB",
19
+ "stockAuditNum": "926", # 每次更新该字段就可以
20
+ "_": "1649324745607",
20
21
  }
21
22
  headers = {
22
- 'Host': 'query.sse.com.cn',
23
- 'Pragma': 'no-cache',
24
- 'Referer': 'http://kcb.sse.com.cn/',
25
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36'
23
+ "Host": "query.sse.com.cn",
24
+ "Pragma": "no-cache",
25
+ "Referer": "http://kcb.sse.com.cn/",
26
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36",
26
27
  }
27
28
  r = requests.get(url, params=params, headers=headers)
28
29
  data_json = r.json()
29
- temp_df = pd.DataFrame(data_json['result'])
30
+ temp_df = pd.DataFrame(data_json["result"])
30
31
  # 处理下 temp_df 里面的字段就可以了
31
32
  print(temp_df)
32
-
@@ -4,6 +4,7 @@
4
4
  Date: 2022/4/7 17:36
5
5
  Desc: http://kcb.sse.com.cn/renewal/#
6
6
  """
7
+
7
8
  import requests
8
9
  import pandas as pd
9
10
 
@@ -13,43 +14,43 @@ import pandas as pd
13
14
  def stock_kcb_renewal():
14
15
  url = "http://query.sse.com.cn/statusAction.do"
15
16
  params = {
16
- 'isPagination': 'true',
17
- 'sqlId': 'SH_XM_LB',
18
- 'pageHelp.pageSize': '20',
19
- 'offerType': '',
20
- 'commitiResult': '',
21
- 'registeResult': '',
22
- 'province': '',
23
- 'csrcCode': '',
24
- 'currStatus': '',
25
- 'order': 'updateDate|desc,stockAuditNum|desc',
26
- 'keyword': '',
27
- 'auditApplyDateBegin': '',
28
- 'auditApplyDateEnd': '',
29
- 'pageHelp.pageNo': '1',
30
- 'pageHelp.beginPage': '1',
31
- 'pageHelp.endPage': '1',
32
- '_': '1649322742207',
17
+ "isPagination": "true",
18
+ "sqlId": "SH_XM_LB",
19
+ "pageHelp.pageSize": "20",
20
+ "offerType": "",
21
+ "commitiResult": "",
22
+ "registeResult": "",
23
+ "province": "",
24
+ "csrcCode": "",
25
+ "currStatus": "",
26
+ "order": "updateDate|desc,stockAuditNum|desc",
27
+ "keyword": "",
28
+ "auditApplyDateBegin": "",
29
+ "auditApplyDateEnd": "",
30
+ "pageHelp.pageNo": "1",
31
+ "pageHelp.beginPage": "1",
32
+ "pageHelp.endPage": "1",
33
+ "_": "1649322742207",
33
34
  }
34
35
  headers = {
35
- 'Host': 'query.sse.com.cn',
36
- 'Pragma': 'no-cache',
37
- 'Referer': 'http://kcb.sse.com.cn/',
38
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36'
36
+ "Host": "query.sse.com.cn",
37
+ "Pragma": "no-cache",
38
+ "Referer": "http://kcb.sse.com.cn/",
39
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36",
39
40
  }
40
41
 
41
42
  for page in range(1, 37):
42
43
  print(page)
43
44
  params.update(
44
45
  {
45
- 'pageHelp.pageNo': page,
46
- 'pageHelp.beginPage': page,
47
- 'pageHelp.endPage': page,
46
+ "pageHelp.pageNo": page,
47
+ "pageHelp.beginPage": page,
48
+ "pageHelp.endPage": page,
48
49
  }
49
50
  )
50
51
  r = requests.get(url, params=params, headers=headers)
51
52
  data_json = r.json()
52
- temp_df = pd.DataFrame(data_json['result'])
53
+ temp_df = pd.DataFrame(data_json["result"])
53
54
  # 处理下 temp_df 里面的字段就可以了
54
55
  print(temp_df)
55
56
  break
@@ -61,9 +61,18 @@ def stock_notice_report(symbol: str = "全部", date: str = "20220511") -> pd.Da
61
61
  r = requests.get(url, params=params)
62
62
  data_json = r.json()
63
63
  temp_df = pd.DataFrame(data_json["data"]["list"])
64
- temp_codes_df = pd.DataFrame(
65
- [item["codes"][0] for item in data_json["data"]["list"]]
66
- )
64
+
65
+ temp_code_list = []
66
+ for item in data_json["data"]["list"]:
67
+ if len(item["codes"]) == 1:
68
+ temp_code_list.append(item["codes"][0])
69
+ else:
70
+ for code in item["codes"]:
71
+ if code["ann_type"].startswith("A"):
72
+ temp_code_list.append(code)
73
+ break
74
+ temp_codes_df = pd.DataFrame(temp_code_list)
75
+
67
76
  try:
68
77
  temp_columns_df = pd.DataFrame(
69
78
  [item["columns"][0] for item in data_json["data"]["list"]]