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
@@ -5,6 +5,7 @@ Date: 2023/6/19 17:00
5
5
  Desc: 沐甜科技数据中心-中国食糖指数
6
6
  https://www.msweet.com.cn/mtkj/sjzx13/index.html
7
7
  """
8
+
8
9
  import requests
9
10
  import pandas as pd
10
11
 
@@ -93,12 +94,25 @@ def index_outer_quote_sugar_msweet() -> pd.DataFrame:
93
94
  temp_df = pd.concat(
94
95
  [pd.DataFrame(data_json["category"]), pd.DataFrame(data_json["data"])], axis=1
95
96
  )
96
- temp_df.columns = ["日期", "巴西糖进口成本", "泰国糖进口利润空间", "巴西糖进口利润空间", "泰国糖进口成本", "日照现货价"]
97
+ temp_df.columns = [
98
+ "日期",
99
+ "巴西糖进口成本",
100
+ "泰国糖进口利润空间",
101
+ "巴西糖进口利润空间",
102
+ "泰国糖进口成本",
103
+ "日照现货价",
104
+ ]
97
105
  temp_df["日期"] = temp_df["日期"].str.replace("/", "-")
98
106
  temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
99
- temp_df["巴西糖进口成本"] = pd.to_numeric(temp_df["巴西糖进口成本"], errors="coerce")
100
- temp_df["泰国糖进口利润空间"] = pd.to_numeric(temp_df["泰国糖进口利润空间"], errors="coerce")
101
- temp_df["巴西糖进口利润空间"] = pd.to_numeric(temp_df["巴西糖进口利润空间"], errors="coerce")
107
+ temp_df["巴西糖进口成本"] = pd.to_numeric(
108
+ temp_df["巴西糖进口成本"], errors="coerce"
109
+ )
110
+ temp_df["泰国糖进口利润空间"] = pd.to_numeric(
111
+ temp_df["泰国糖进口利润空间"], errors="coerce"
112
+ )
113
+ temp_df["巴西糖进口利润空间"] = pd.to_numeric(
114
+ temp_df["巴西糖进口利润空间"], errors="coerce"
115
+ )
102
116
  temp_df["泰国糖进口成本"] = pd.to_numeric(temp_df["泰国糖进口成本"])
103
117
  temp_df["日照现货价"] = pd.to_numeric(temp_df["日照现货价"], errors="coerce")
104
118
  return temp_df
akshare/index/index_sw.py CHANGED
@@ -95,6 +95,9 @@ def sw_index_second_info() -> pd.DataFrame:
95
95
  )
96
96
  code = [item.get_text() for item in code_raw]
97
97
  name = [item.get_text().split("(")[0] for item in name_raw]
98
+ parent_name = [
99
+ item.find("span").get_text().split("(")[0][1:-1] for item in name_raw
100
+ ]
98
101
  num = [item.get_text().split("(")[1].split(")")[0] for item in name_raw]
99
102
  num_1 = [
100
103
  item.find_all("span", attrs={"class": "value"})[0].get_text().strip()
@@ -112,10 +115,11 @@ def sw_index_second_info() -> pd.DataFrame:
112
115
  item.find_all("span", attrs={"class": "value"})[3].get_text().strip()
113
116
  for item in value_raw
114
117
  ]
115
- temp_df = pd.DataFrame([code, name, num, num_1, num_2, num_3, num_4]).T
118
+ temp_df = pd.DataFrame([code, name, parent_name, num, num_1, num_2, num_3, num_4]).T
116
119
  temp_df.columns = [
117
120
  "行业代码",
118
121
  "行业名称",
122
+ "上级行业",
119
123
  "成份个数",
120
124
  "静态市盈率",
121
125
  "TTM(滚动)市盈率",
@@ -153,6 +157,9 @@ def sw_index_third_info() -> pd.DataFrame:
153
157
  )
154
158
  code = [item.get_text() for item in code_raw]
155
159
  name = [item.get_text().split("(")[0] for item in name_raw]
160
+ parent_name = [
161
+ item.find("span").get_text().split("(")[0][1:-1] for item in name_raw
162
+ ]
156
163
  num = [item.get_text().split("(")[1].split(")")[0] for item in name_raw]
157
164
  num_1 = [
158
165
  item.find_all("span", attrs={"class": "value"})[0].get_text().strip()
@@ -170,10 +177,11 @@ def sw_index_third_info() -> pd.DataFrame:
170
177
  item.find_all("span", attrs={"class": "value"})[3].get_text().strip()
171
178
  for item in value_raw
172
179
  ]
173
- temp_df = pd.DataFrame([code, name, num, num_1, num_2, num_3, num_4]).T
180
+ temp_df = pd.DataFrame([code, name, parent_name, num, num_1, num_2, num_3, num_4]).T
174
181
  temp_df.columns = [
175
182
  "行业代码",
176
183
  "行业名称",
184
+ "上级行业",
177
185
  "成份个数",
178
186
  "静态市盈率",
179
187
  "TTM(滚动)市盈率",
akshare/index/index_yw.py CHANGED
@@ -1,14 +1,18 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/4/17 19:17
4
+ Date: 2025/5/3
5
5
  Desc: 义乌小商品指数
6
- https://www.ywindex.com/Home/Product/index/
6
+ 目前可以通过这些接口直接请求到 JSON 数据
7
+ 周价格指数:https://apiserver.chinagoods.com/yiwuindex/v1/active/industry/class/history/piweek?gcCode=
8
+ 月价格指数:https://apiserver.chinagoods.com/yiwuindex/v1/active/industry/class/history/month?gcCode=
9
+ 月景气指数:https://apiserver.chinagoods.com/yiwuindex/v1/active/industry/class/history/bi?gcCode=
10
+ 上涨:https://apiserver.chinagoods.com/yiwuindex/v1/active/industry/class/get/rise
11
+ 下跌:https://apiserver.chinagoods.com/yiwuindex/v1/active/industry/class/get/drop
7
12
  """
8
13
 
9
14
  import pandas as pd
10
15
  import requests
11
- from bs4 import BeautifulSoup
12
16
 
13
17
 
14
18
  def index_yw(symbol: str = "月景气指数") -> pd.DataFrame:
@@ -21,85 +25,58 @@ def index_yw(symbol: str = "月景气指数") -> pd.DataFrame:
21
25
  :rtype: pandas.DataFrame
22
26
  """
23
27
  import urllib3
24
-
25
- # 禁用InsecureRequestWarning
26
28
  urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
27
- name_num_dict = {
28
- "周价格指数": 1,
29
- "月价格指数": 3,
30
- "月景气指数": 5,
31
- }
32
- url = "https://www.ywindex.com/Home/Product/index/"
33
- res = requests.get(url, verify=False)
34
- soup = BeautifulSoup(res.text, features="lxml")
35
- table_name = (
36
- soup.find_all(attrs={"class": "tablex"})[name_num_dict[symbol]]
37
- .get_text()
38
- .split("\n\n\n\n\n")[2]
39
- .split("\n")
40
- )
41
- table_content = (
42
- soup.find_all(attrs={"class": "tablex"})[name_num_dict[symbol]]
43
- .get_text()
44
- .split("\n\n\n\n\n")[3]
45
- .split("\n\n")
46
- )
29
+
47
30
  if symbol == "月景气指数":
48
- table_df = pd.DataFrame([item.split("\n") for item in table_content]).iloc[
49
- :, :5
50
- ]
51
- table_df.columns = ["期数", "景气指数", "规模指数", "效益指数", "市场信心指数"]
52
- table_df["期数"] = pd.to_datetime(table_df["期数"], errors="coerce").dt.date
53
- table_df["景气指数"] = pd.to_numeric(table_df["景气指数"], errors="coerce")
54
- table_df["规模指数"] = pd.to_numeric(table_df["规模指数"], errors="coerce")
55
- table_df["效益指数"] = pd.to_numeric(table_df["效益指数"], errors="coerce")
56
- table_df["市场信心指数"] = pd.to_numeric(
57
- table_df["市场信心指数"], errors="coerce"
58
- )
59
- table_df.sort_values(["期数"], inplace=True, ignore_index=True)
60
- return table_df
61
- elif symbol == "周价格指数":
62
- table_df = pd.DataFrame([item.split("\n") for item in table_content]).iloc[
63
- :, :6
64
- ]
65
- table_df.columns = table_name
66
- table_df["期数"] = pd.to_datetime(table_df["期数"], errors="coerce").dt.date
67
- table_df["价格指数"] = pd.to_numeric(table_df["价格指数"], errors="coerce")
68
- table_df["场内价格指数"] = pd.to_numeric(
69
- table_df["场内价格指数"], errors="coerce"
70
- )
71
- table_df["网上价格指数"] = pd.to_numeric(
72
- table_df["网上价格指数"], errors="coerce"
73
- )
74
- table_df["订单价格指数"] = pd.to_numeric(
75
- table_df["订单价格指数"], errors="coerce"
76
- )
77
- table_df["出口价格指数"] = pd.to_numeric(
78
- table_df["出口价格指数"], errors="coerce"
31
+ url = "https://apiserver.chinagoods.com/yiwuindex/v1/active/industry/class/history/bi?gcCode="
32
+ r = requests.get(url, verify=False)
33
+ data_json = r.json()
34
+ temp_df = pd.DataFrame(data_json["data"])
35
+ temp_df = temp_df[["indextimeno", "totalindex", "scopeindex", "benifitindex", "confidentindex"]]
36
+ temp_df.columns = ["期数", "景气指数", "规模指数", "效益指数", "市场信心指数"]
37
+ temp_df["期数"] = pd.to_datetime(temp_df["期数"], errors="coerce").dt.date
38
+ temp_df["景气指数"] = pd.to_numeric(temp_df["景气指数"], errors="coerce")
39
+ temp_df["规模指数"] = pd.to_numeric(temp_df["规模指数"], errors="coerce")
40
+ temp_df["效益指数"] = pd.to_numeric(temp_df["效益指数"], errors="coerce")
41
+ temp_df["市场信心指数"] = pd.to_numeric(
42
+ temp_df["市场信心指数"], errors="coerce"
79
43
  )
80
- table_df.sort_values(["期数"], inplace=True, ignore_index=True)
81
- return table_df
82
- elif symbol == "月价格指数":
83
- table_df = pd.DataFrame([item.split("\n") for item in table_content]).iloc[
84
- :, :6
85
- ]
86
- table_df.columns = table_name
87
- table_df["期数"] = pd.to_datetime(table_df["期数"], errors="coerce").dt.date
88
- table_df["价格指数"] = pd.to_numeric(table_df["价格指数"], errors="coerce")
89
- table_df["场内价格指数"] = pd.to_numeric(
90
- table_df["场内价格指数"], errors="coerce"
44
+ temp_df.sort_values(["期数"], inplace=True, ignore_index=True)
45
+ return temp_df
46
+ else:
47
+ symbol_map = {
48
+ "周价格指数": "piweek",
49
+ "月价格指数": "month"
50
+ }
51
+ url = f"https://apiserver.chinagoods.com/yiwuindex/v1/active/industry/class/history/{symbol_map[symbol]}?gcCode="
52
+ r = requests.get(url, verify=False)
53
+ data_json = r.json()
54
+ columns_name = {
55
+ "indextimeno": "期数",
56
+ "totalpriceindex": "价格指数",
57
+ "stockdealpriceindex": "场内价格指数",
58
+ "netdealpriceindex": "网上价格指数",
59
+ "orderdealpriceindex": "订单价格指数",
60
+ "outdealpriceindex": "出口价格指数",
61
+ }
62
+ temp_df = pd.DataFrame(data_json["data"])
63
+ temp_df.columns = [columns_name[name] for name in temp_df.columns]
64
+ temp_df["期数"] = pd.to_datetime(temp_df["期数"], errors="coerce").dt.date
65
+ temp_df["价格指数"] = pd.to_numeric(temp_df["价格指数"], errors="coerce")
66
+ temp_df["场内价格指数"] = pd.to_numeric(
67
+ temp_df["场内价格指数"], errors="coerce"
91
68
  )
92
- table_df["网上价格指数"] = pd.to_numeric(
93
- table_df["网上价格指数"], errors="coerce"
69
+ temp_df["网上价格指数"] = pd.to_numeric(
70
+ temp_df["网上价格指数"], errors="coerce"
94
71
  )
95
- table_df["订单价格指数"] = pd.to_numeric(
96
- table_df["订单价格指数"], errors="coerce"
72
+ temp_df["订单价格指数"] = pd.to_numeric(
73
+ temp_df["订单价格指数"], errors="coerce"
97
74
  )
98
- table_df["出口价格指数"] = pd.to_numeric(
99
- table_df["出口价格指数"], errors="coerce"
75
+ temp_df["出口价格指数"] = pd.to_numeric(
76
+ temp_df["出口价格指数"], errors="coerce"
100
77
  )
101
- table_df.sort_values(["期数"], inplace=True, ignore_index=True)
102
- return table_df
78
+ temp_df.sort_values(by=["期数"], inplace=True, ignore_index=True)
79
+ return temp_df
103
80
 
104
81
 
105
82
  if __name__ == "__main__":
@@ -111,3 +88,4 @@ if __name__ == "__main__":
111
88
 
112
89
  index_yw_df = index_yw(symbol="月景气指数")
113
90
  print(index_yw_df)
91
+
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/12/11 20:20
4
+ Date: 2025/3/11 17:00
5
5
  Desc: 东方财富网-指数行情数据
6
6
  """
7
7
 
@@ -10,6 +10,8 @@ from functools import lru_cache
10
10
  import pandas as pd
11
11
  import requests
12
12
 
13
+ from akshare.utils.func import fetch_paginated_data
14
+
13
15
 
14
16
  @lru_cache()
15
17
  def index_code_id_map_em() -> dict:
@@ -22,69 +24,18 @@ def index_code_id_map_em() -> dict:
22
24
  url = "https://80.push2.eastmoney.com/api/qt/clist/get"
23
25
  params = {
24
26
  "pn": "1",
25
- "pz": "10000",
26
- "po": "1",
27
- "np": "1",
28
- "ut": "bd1d9ddb04089700cf9c27f6f7426281",
29
- "fltt": "2",
30
- "invt": "2",
31
- "fid": "f3",
32
- "fs": "m:1 t:2,m:1 t:23",
33
- "fields": "f12",
34
- "_": "1623833739532",
35
- }
36
- r = requests.get(url, params=params)
37
- data_json = r.json()
38
- if not data_json["data"]["diff"]:
39
- return dict()
40
- temp_df = pd.DataFrame(data_json["data"]["diff"])
41
- temp_df["market_id"] = 1
42
- temp_df.columns = ["sh_code", "sh_id"]
43
- code_id_dict = dict(zip(temp_df["sh_code"], temp_df["sh_id"]))
44
- params = {
45
- "pn": "1",
46
- "pz": "10000",
47
- "po": "1",
48
- "np": "1",
49
- "ut": "bd1d9ddb04089700cf9c27f6f7426281",
50
- "fltt": "2",
51
- "invt": "2",
52
- "fid": "f3",
53
- "fs": "m:0 t:6,m:0 t:80",
54
- "fields": "f12",
55
- "_": "1623833739532",
56
- }
57
- r = requests.get(url, params=params)
58
- data_json = r.json()
59
- if not data_json["data"]["diff"]:
60
- return dict()
61
- temp_df_sz = pd.DataFrame(data_json["data"]["diff"])
62
- temp_df_sz["sz_id"] = 0
63
- code_id_dict.update(dict(zip(temp_df_sz["f12"], temp_df_sz["sz_id"])))
64
- params = {
65
- "pn": "1",
66
- "pz": "10000",
27
+ "pz": "100",
67
28
  "po": "1",
68
29
  "np": "1",
69
30
  "ut": "bd1d9ddb04089700cf9c27f6f7426281",
70
31
  "fltt": "2",
71
32
  "invt": "2",
72
33
  "fid": "f3",
73
- "fs": "m:0 t:81 s:2048",
74
- "fields": "f12",
75
- "_": "1623833739532",
76
- }
77
- r = requests.get(url, params=params)
78
- data_json = r.json()
79
- if not data_json["data"]["diff"]:
80
- return dict()
81
- temp_df_sz = pd.DataFrame(data_json["data"]["diff"])
82
- temp_df_sz["bj_id"] = 0
83
- code_id_dict.update(dict(zip(temp_df_sz["f12"], temp_df_sz["bj_id"])))
84
- code_id_dict = {
85
- key: value - 1 if value == 1 else value + 1
86
- for key, value in code_id_dict.items()
34
+ "fs": "b:MK0010,m:1+t:1,m:0 t:5,m:1+s:3,m:0+t:5,m:2",
35
+ "fields": "f3,f12,f13",
87
36
  }
37
+ temp_df = fetch_paginated_data(url, params)
38
+ code_id_dict = dict(zip(temp_df["f12"], temp_df["f13"]))
88
39
  return code_id_dict
89
40
 
90
41
 
@@ -121,7 +72,6 @@ def index_zh_a_hist(
121
72
  "fqt": "0",
122
73
  "beg": "0",
123
74
  "end": "20500000",
124
- "_": "1623766962675",
125
75
  }
126
76
  except KeyError:
127
77
  params = {
@@ -133,7 +83,6 @@ def index_zh_a_hist(
133
83
  "fqt": "0",
134
84
  "beg": "0",
135
85
  "end": "20500000",
136
- "_": "1623766962675",
137
86
  }
138
87
  r = requests.get(url, params=params)
139
88
  data_json = r.json()
@@ -147,7 +96,6 @@ def index_zh_a_hist(
147
96
  "fqt": "0",
148
97
  "beg": "0",
149
98
  "end": "20500000",
150
- "_": "1623766962675",
151
99
  }
152
100
  r = requests.get(url, params=params)
153
101
  data_json = r.json()
@@ -161,7 +109,6 @@ def index_zh_a_hist(
161
109
  "fqt": "0",
162
110
  "beg": "0",
163
111
  "end": "20500000",
164
- "_": "1623766962675",
165
112
  }
166
113
  r = requests.get(url, params=params)
167
114
  data_json = r.json()
@@ -175,7 +122,6 @@ def index_zh_a_hist(
175
122
  "fqt": "0",
176
123
  "beg": "0",
177
124
  "end": "20500000",
178
- "_": "1623766962675",
179
125
  }
180
126
  r = requests.get(url, params=params)
181
127
  data_json = r.json()
@@ -194,7 +140,6 @@ def index_zh_a_hist(
194
140
  "fqt": "0",
195
141
  "beg": "0",
196
142
  "end": "20500000",
197
- "_": "1623766962675",
198
143
  }
199
144
  r = requests.get(url, params=params)
200
145
  data_json = r.json()
@@ -257,21 +202,17 @@ def index_zh_a_hist_min_em(
257
202
  params = {
258
203
  "fields1": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13",
259
204
  "fields2": "f51,f52,f53,f54,f55,f56,f57,f58",
260
- "ut": "fa5fd1943c7b386f172d6893dbfba10b",
261
205
  "iscr": "0",
262
206
  "ndays": "5",
263
207
  "secid": f"{code_id_dict[symbol]}.{symbol}",
264
- "_": "1623766962675",
265
208
  }
266
209
  except KeyError:
267
210
  params = {
268
211
  "fields1": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13",
269
212
  "fields2": "f51,f52,f53,f54,f55,f56,f57,f58",
270
- "ut": "fa5fd1943c7b386f172d6893dbfba10b",
271
213
  "iscr": "0",
272
214
  "ndays": "5",
273
215
  "secid": f"1.{symbol}",
274
- "_": "1623766962675",
275
216
  }
276
217
  r = requests.get(url, params=params)
277
218
  data_json = r.json()
@@ -279,11 +220,9 @@ def index_zh_a_hist_min_em(
279
220
  params = {
280
221
  "fields1": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13",
281
222
  "fields2": "f51,f52,f53,f54,f55,f56,f57,f58",
282
- "ut": "fa5fd1943c7b386f172d6893dbfba10b",
283
223
  "iscr": "0",
284
224
  "ndays": "5",
285
225
  "secid": f"0.{symbol}",
286
- "_": "1623766962675",
287
226
  }
288
227
  r = requests.get(url, params=params)
289
228
  data_json = r.json()
@@ -291,11 +230,9 @@ def index_zh_a_hist_min_em(
291
230
  params = {
292
231
  "fields1": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13",
293
232
  "fields2": "f51,f52,f53,f54,f55,f56,f57,f58",
294
- "ut": "fa5fd1943c7b386f172d6893dbfba10b",
295
233
  "iscr": "0",
296
234
  "ndays": "5",
297
235
  "secid": f"47.{symbol}",
298
- "_": "1623766962675",
299
236
  }
300
237
  r = requests.get(url, params=params)
301
238
  data_json = r.json()
@@ -310,7 +247,7 @@ def index_zh_a_hist_min_em(
310
247
  "最低",
311
248
  "成交量",
312
249
  "成交额",
313
- "最新价",
250
+ "均价",
314
251
  ]
315
252
  temp_df.index = pd.to_datetime(temp_df["时间"], errors="coerce")
316
253
  temp_df = temp_df[start_date:end_date]
@@ -321,11 +258,11 @@ def index_zh_a_hist_min_em(
321
258
  temp_df["最低"] = pd.to_numeric(temp_df["最低"], errors="coerce")
322
259
  temp_df["成交量"] = pd.to_numeric(temp_df["成交量"], errors="coerce")
323
260
  temp_df["成交额"] = pd.to_numeric(temp_df["成交额"], errors="coerce")
324
- temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce")
261
+ temp_df["均价"] = pd.to_numeric(temp_df["均价"], errors="coerce")
325
262
  temp_df["时间"] = pd.to_datetime(temp_df["时间"]).astype(str)
326
263
  return temp_df
327
264
  else:
328
- url = "http://push2his.eastmoney.com/api/qt/stock/kline/get"
265
+ url = "https://push2his.eastmoney.com/api/qt/stock/kline/get"
329
266
  try:
330
267
  params = {
331
268
  "secid": f"{code_id_dict[symbol]}.{symbol}",
@@ -336,7 +273,6 @@ def index_zh_a_hist_min_em(
336
273
  "fqt": "1",
337
274
  "beg": "0",
338
275
  "end": "20500000",
339
- "_": "1630930917857",
340
276
  }
341
277
  except: # noqa: E722
342
278
  params = {
@@ -348,7 +284,6 @@ def index_zh_a_hist_min_em(
348
284
  "fqt": "1",
349
285
  "beg": "0",
350
286
  "end": "20500000",
351
- "_": "1630930917857",
352
287
  }
353
288
  r = requests.get(url, params=params)
354
289
  data_json = r.json()
@@ -362,7 +297,6 @@ def index_zh_a_hist_min_em(
362
297
  "fqt": "1",
363
298
  "beg": "0",
364
299
  "end": "20500000",
365
- "_": "1630930917857",
366
300
  }
367
301
  r = requests.get(url, params=params)
368
302
  data_json = r.json()
@@ -376,7 +310,6 @@ def index_zh_a_hist_min_em(
376
310
  "fqt": "1",
377
311
  "beg": "0",
378
312
  "end": "20500000",
379
- "_": "1630930917857",
380
313
  }
381
314
  r = requests.get(url, params=params)
382
315
  data_json = r.json()
@@ -430,7 +363,7 @@ def index_zh_a_hist_min_em(
430
363
 
431
364
  if __name__ == "__main__":
432
365
  index_zh_a_hist_df = index_zh_a_hist(
433
- symbol="800000",
366
+ symbol="932000",
434
367
  period="daily",
435
368
  start_date="19700101",
436
369
  end_date="22220101",
@@ -438,9 +371,9 @@ if __name__ == "__main__":
438
371
  print(index_zh_a_hist_df)
439
372
 
440
373
  index_zh_a_hist_min_em_df = index_zh_a_hist_min_em(
441
- symbol="000001",
374
+ symbol="000003",
442
375
  period="1",
443
- start_date="2024-03-20 09:30:00",
444
- end_date="2024-03-20 19:00:00",
376
+ start_date="2025-03-17 09:30:00",
377
+ end_date="2025-03-17 19:00:00",
445
378
  )
446
379
  print(index_zh_a_hist_min_em_df)
@@ -85,7 +85,6 @@ def rate_interbank(
85
85
  "p": "1",
86
86
  "pageNo": "1",
87
87
  "pageNum": "1",
88
- "_": "1653376974939",
89
88
  }
90
89
  r = requests.get(url, params=params)
91
90
  data_json = r.json()
akshare/movie/jm.js CHANGED
@@ -2254,4 +2254,3 @@ var webDES = function() {
2254
2254
  ;
2255
2255
  }
2256
2256
  , webInstace = new webDES();
2257
-
akshare/news/__init__.py CHANGED
@@ -2,5 +2,5 @@
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
4
  Date: 2020/10/18 12:54
5
- Desc:
5
+ Desc:
6
6
  """