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,139 +0,0 @@
1
- #!/usr/bin/env python
2
- # -*- coding:utf-8 -*-
3
- """
4
- Date: 2021/5/7 13:50
5
- Desc: 英为财情-利率国债-全球政府债券行情与收益率
6
- https://cn.investing.com/rates-bonds/
7
- """
8
- import re
9
-
10
- import pandas as pd
11
- import requests
12
- from bs4 import BeautifulSoup
13
-
14
- from akshare.index.cons import short_headers, long_headers
15
-
16
-
17
- def _get_global_country_name_url() -> dict:
18
- """
19
- 指数数据国家对应的 URL
20
- https://cn.investing.com/rates-bonds/
21
- :return: 指数数据国家对应的 URL
22
- :rtype: dict
23
- """
24
- url = "https://cn.investing.com/rates-bonds/"
25
- res = requests.get(url, headers=short_headers, timeout=30)
26
- soup = BeautifulSoup(res.text, "lxml")
27
- name_url_option_list = soup.find("select", attrs={"name": "country"}).find_all(
28
- "option"
29
- )[1:]
30
- url_list = [item["value"] for item in name_url_option_list]
31
- name_list = [item.get_text() for item in name_url_option_list]
32
- name_code_map_dict = {}
33
- name_code_map_dict.update(zip(name_list, url_list))
34
- return name_code_map_dict
35
-
36
-
37
- def bond_investing_global_country_name_url(country: str = "中国") -> dict:
38
- """
39
- 参考网页: https://cn.investing.com/rates-bonds/
40
- 获取选择国家对应的: 主要指数, 主要行业, 附加指数, 其他指数
41
- :param country: str 中文国家名称, 对应 get_global_country_name_url 函数返回的国家名称
42
- :return: dict
43
- """
44
- name_url_dict = _get_global_country_name_url()
45
- url = f"https://cn.investing.com{name_url_dict[country]}"
46
- res = requests.get(url, headers=short_headers, timeout=30)
47
- soup = BeautifulSoup(res.text, "lxml")
48
- url_list = [
49
- item.find("a")["href"] for item in soup.find_all(attrs={"class": "plusIconTd"})
50
- ]
51
- name_list = [
52
- item.find("a").get_text()
53
- for item in soup.find_all(attrs={"class": "plusIconTd"})
54
- ]
55
- name_code_map_dict = {}
56
- name_code_map_dict.update(zip(name_list, url_list))
57
- return name_code_map_dict
58
-
59
-
60
- def bond_investing_global(
61
- country: str = "中国",
62
- index_name: str = "中国1年期国债",
63
- period: str = "每日",
64
- start_date: str = "20000101",
65
- end_date: str = "20191017",
66
- ) -> pd.DataFrame:
67
- """
68
- 具体国家的具体指数的从 start_date 到 end_date 期间的数据
69
- https://cn.investing.com/rates-bonds/
70
- :param country: 对应函数中的国家名称
71
- :type country: str
72
- :param index_name: 对应函数中的指数名称
73
- :type index_name: str
74
- :param period: choice of {"每日", "每周", "每月"}
75
- :type period: str
76
- :param start_date: '2000-01-01', 注意格式
77
- :type start_date: str
78
- :param end_date: '2019-10-17', 注意格式
79
- :type end_date: str
80
- :return: 指定参数的数据
81
- :rtype: pandas.DataFrame
82
- """
83
- start_date = "/".join([start_date[:4], start_date[4:6], start_date[6:]])
84
- end_date = "/".join([end_date[:4], end_date[4:6], end_date[6:]])
85
- period_map = {"每日": "Daily", "每周": "Weekly", "每月": "Monthly"}
86
- name_code_dict = bond_investing_global_country_name_url(country)
87
- temp_url = f"https://cn.investing.com/{name_code_dict[index_name]}-historical-data"
88
- res = requests.get(temp_url, headers=short_headers, timeout=30)
89
- soup = BeautifulSoup(res.text, "lxml")
90
- title = soup.find("h2", attrs={"class": "float_lang_base_1"}).get_text()
91
- data = soup.find_all(text=re.compile("window.histDataExcessInfo"))[0].strip()
92
- para_data = re.findall(r"\d+", data)
93
- payload = {
94
- "curr_id": para_data[0],
95
- "smlID": para_data[1],
96
- "header": title,
97
- "st_date": start_date,
98
- "end_date": end_date,
99
- "interval_sec": period_map[period],
100
- "sort_col": "date",
101
- "sort_ord": "DESC",
102
- "action": "historical_data",
103
- }
104
- url = "https://cn.investing.com/instruments/HistoricalDataAjax"
105
- res = requests.post(url, data=payload, headers=long_headers, timeout=60)
106
- df_data = pd.read_html(res.text)[0]
107
- df_data.columns = [
108
- "日期",
109
- "收盘",
110
- "开盘",
111
- "高",
112
- "低",
113
- "涨跌幅",
114
- ]
115
- if period == "每月":
116
- df_data.index = pd.to_datetime(df_data["日期"], format="%Y年%m月")
117
- else:
118
- df_data.index = pd.to_datetime(df_data["日期"], format="%Y年%m月%d日")
119
- df_data = df_data[["收盘", "开盘", "高", "低", "涨跌幅"]]
120
- df_data["涨跌幅"] = df_data["涨跌幅"].str.replace("%", "")
121
- df_data["涨跌幅"] = df_data["涨跌幅"].str.replace(",", "")
122
- df_data = df_data.astype(float)
123
- return df_data
124
-
125
-
126
- if __name__ == "__main__":
127
- bond_investing_global_country_name_url_df = bond_investing_global_country_name_url(
128
- "中国"
129
- )
130
- print(bond_investing_global_country_name_url_df)
131
-
132
- bond_investing_global_df = bond_investing_global(
133
- country="中国",
134
- index_name="中国10年期国债",
135
- period="每日",
136
- start_date="20100101",
137
- end_date="20210318",
138
- )
139
- print(bond_investing_global_df)
@@ -1,249 +0,0 @@
1
- #!/usr/bin/env python
2
- # -*- coding:utf-8 -*-
3
- """
4
- Date: 2022/5/11 17:52
5
- Desc: 加密货币
6
- https://cn.investing.com/crypto/currencies
7
- 高频数据
8
- https://bitcoincharts.com/about/markets-api/
9
- """
10
- import math
11
-
12
- import pandas as pd
13
- import requests
14
- from tqdm import tqdm
15
-
16
- from akshare.datasets import get_crypto_info_csv
17
-
18
-
19
- def crypto_name_url_table(symbol: str = "web") -> pd.DataFrame:
20
- """
21
- 加密货币名称、代码和 ID,每次更新较慢
22
- https://cn.investing.com/crypto/ethereum/historical-data
23
- :param symbol: choice of {"web", "local"}; web 表示从网页获取最新,local 表示利用本地本文件
24
- :type symbol: str
25
- :return: 加密货币名称、代码和 ID
26
- :rtype: pandas.DataFrame
27
- """
28
- if symbol == "web":
29
- headers = {
30
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36",
31
- "X-Requested-With": "XMLHttpRequest",
32
- }
33
- url = "https://cn.investing.com/crypto/Service/LoadCryptoCurrencies"
34
- payload = {
35
- 'draw': '14',
36
- 'columns[0][data]': 'currencies_order',
37
- 'columns[0][name]': 'currencies_order',
38
- 'columns[0][searchable]': 'true',
39
- 'columns[0][orderable]': 'true',
40
- 'columns[0][search][value]': '',
41
- 'columns[0][search][regex]': 'false',
42
- 'columns[1][data]': 'function',
43
- 'columns[1][name]': 'crypto_id',
44
- 'columns[1][searchable]': 'true',
45
- 'columns[1][orderable]': 'false',
46
- 'columns[1][search][value]': '',
47
- 'columns[1][search][regex]': 'false',
48
- 'columns[2][data]': 'function',
49
- 'columns[2][name]': 'name',
50
- 'columns[2][searchable]': 'true',
51
- 'columns[2][orderable]': 'true',
52
- 'columns[2][search][value]': '',
53
- 'columns[2][search][regex]': 'false',
54
- 'columns[3][data]': 'symbol',
55
- 'columns[3][name]': 'symbol',
56
- 'columns[3][searchable]': 'true',
57
- 'columns[3][orderable]': 'true',
58
- 'columns[3][search][value]': '',
59
- 'columns[3][search][regex]': 'false',
60
- 'columns[4][data]': 'function',
61
- 'columns[4][name]': 'price_usd',
62
- 'columns[4][searchable]': 'true',
63
- 'columns[4][orderable]': 'true',
64
- 'columns[4][search][value]': '',
65
- 'columns[4][search][regex]': 'false',
66
- 'columns[5][data]': 'market_cap_formatted',
67
- 'columns[5][name]': 'market_cap_usd',
68
- 'columns[5][searchable]': 'true',
69
- 'columns[5][orderable]': 'true',
70
- 'columns[5][search][value]': '',
71
- 'columns[5][search][regex]': 'false',
72
- 'columns[6][data]': '24h_volume_formatted',
73
- 'columns[6][name]': '24h_volume_usd',
74
- 'columns[6][searchable]': 'true',
75
- 'columns[6][orderable]': 'true',
76
- 'columns[6][search][value]': '',
77
- 'columns[6][search][regex]': 'false',
78
- 'columns[7][data]': 'total_volume',
79
- 'columns[7][name]': 'total_volume',
80
- 'columns[7][searchable]': 'true',
81
- 'columns[7][orderable]': 'true',
82
- 'columns[7][search][value]': '',
83
- 'columns[7][search][regex]': 'false',
84
- 'columns[8][data]': 'change_percent_formatted',
85
- 'columns[8][name]': 'change_percent',
86
- 'columns[8][searchable]': 'true',
87
- 'columns[8][orderable]': 'true',
88
- 'columns[8][search][value]': '',
89
- 'columns[8][search][regex]': 'false',
90
- 'columns[9][data]': 'percent_change_7d_formatted',
91
- 'columns[9][name]': 'percent_change_7d',
92
- 'columns[9][searchable]': 'true',
93
- 'columns[9][orderable]': 'true',
94
- 'columns[9][search][value]': '',
95
- 'columns[9][search][regex]': 'false',
96
- 'order[0][column]': 'currencies_order',
97
- 'order[0][dir]': 'asc',
98
- 'start': '0',
99
- 'length': '100',
100
- 'search[value]': '',
101
- 'search[regex]': 'false',
102
- 'currencyId': '12',
103
- }
104
- r = requests.post(url, data=payload, headers=headers)
105
- data_json = r.json()
106
- total_page = math.ceil(int(data_json['recordsTotal']) / 100)
107
- big_df = pd.DataFrame()
108
- for page in tqdm(range(1, total_page+1), leave=False):
109
- payload.update({
110
- "start": (page-1)*100,
111
- 'length': 100
112
- })
113
- r = requests.post(url, data=payload, headers=headers)
114
- data_json = r.json()
115
- temp_df = pd.DataFrame(data_json['data'])
116
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
117
- big_df = big_df[[
118
- 'symbol',
119
- 'name',
120
- 'name_trans',
121
- 'sml_id',
122
- 'related_pair_ID',
123
- ]]
124
- return big_df
125
- else:
126
- get_crypto_info_csv_path = get_crypto_info_csv()
127
- name_url_df = pd.read_csv(get_crypto_info_csv_path)
128
- return name_url_df
129
-
130
-
131
- def crypto_hist(
132
- symbol: str = "BTC",
133
- period: str = "每日",
134
- start_date: str = "20191020",
135
- end_date: str = "20201020",
136
- ):
137
- """
138
- 加密货币历史数据
139
- https://cn.investing.com/crypto/ethereum/historical-data
140
- :param symbol: 货币名称
141
- :type symbol: str
142
- :param period: choice of {"每日", "每周", "每月"}
143
- :type period: str
144
- :param start_date: '20151020', 注意格式
145
- :type start_date: str
146
- :param end_date: '20201020', 注意格式
147
- :type end_date: str
148
- :return: 加密货币历史数据获取
149
- :rtype: pandas.DataFrame
150
- """
151
- import warnings
152
- warnings.filterwarnings('ignore')
153
- headers = {
154
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36",
155
- "X-Requested-With": "XMLHttpRequest",
156
- }
157
- period_map = {"每日": "Daily", "每周": "Weekly", "每月": "Monthly"}
158
- start_date = "/".join([start_date[:4], start_date[4:6], start_date[6:]])
159
- end_date = "/".join([end_date[:4], end_date[4:6], end_date[6:]])
160
- name_url_df = crypto_name_url_table(symbol='local')
161
- curr_id = name_url_df[name_url_df["symbol"] == symbol]["related_pair_ID"].values[0]
162
- sml_id = name_url_df[name_url_df["symbol"] == symbol]["sml_id"].values[0]
163
- url = "https://cn.investing.com/instruments/HistoricalDataAjax"
164
- payload = {
165
- "curr_id": curr_id,
166
- "smlID": sml_id,
167
- "header": "null",
168
- "st_date": start_date,
169
- "end_date": end_date,
170
- "interval_sec": period_map[period],
171
- "sort_col": "date",
172
- "sort_ord": "DESC",
173
- "action": "historical_data",
174
- }
175
- r = requests.post(url, data=payload, headers=headers)
176
-
177
- temp_df = pd.read_html(r.text)[0]
178
- df_data = temp_df.copy()
179
- if period == "每月":
180
- df_data.index = pd.to_datetime(df_data["日期"], format="%Y年%m月")
181
- else:
182
- df_data.index = pd.to_datetime(df_data["日期"], format="%Y年%m月%d日")
183
- if any(df_data["交易量"].astype(str).str.contains("-")):
184
- df_data["交易量"][df_data["交易量"].str.contains("-")] = df_data["交易量"][
185
- df_data["交易量"].str.contains("-")
186
- ].replace("-", 0)
187
- if any(df_data["交易量"].astype(str).str.contains("B")):
188
- df_data["交易量"][df_data["交易量"].str.contains("B").fillna(False)] = (
189
- df_data["交易量"][df_data["交易量"].str.contains("B").fillna(False)]
190
- .str.replace("B", "")
191
- .str.replace(",", "")
192
- .astype(float)
193
- * 1000000000
194
- )
195
- if any(df_data["交易量"].astype(str).str.contains("M")):
196
- df_data["交易量"][df_data["交易量"].str.contains("M").fillna(False)] = (
197
- df_data["交易量"][df_data["交易量"].str.contains("M").fillna(False)]
198
- .str.replace("M", "")
199
- .str.replace(",", "")
200
- .astype(float)
201
- * 1000000
202
- )
203
- if any(df_data["交易量"].astype(str).str.contains("K")):
204
- df_data["交易量"][df_data["交易量"].str.contains("K").fillna(False)] = (
205
- df_data["交易量"][df_data["交易量"].str.contains("K").fillna(False)]
206
- .str.replace("K", "")
207
- .str.replace(",", "")
208
- .astype(float)
209
- * 1000
210
- )
211
- df_data["交易量"] = df_data["交易量"].astype(float)
212
- df_data["涨跌幅"] = pd.DataFrame(
213
- round(
214
- df_data["涨跌幅"].str.replace(",", "").str.replace("%", "").astype(float)
215
- / 100,
216
- 6,
217
- )
218
- )
219
- del df_data["日期"]
220
- df_data.reset_index(inplace=True)
221
- df_data = df_data[[
222
- "日期",
223
- "收盘",
224
- "开盘",
225
- "高",
226
- "低",
227
- "交易量",
228
- "涨跌幅",
229
- ]]
230
- df_data['日期'] = pd.to_datetime(df_data['日期']).dt.date
231
- df_data['收盘'] = pd.to_numeric(df_data['收盘'])
232
- df_data['开盘'] = pd.to_numeric(df_data['开盘'])
233
- df_data['高'] = pd.to_numeric(df_data['高'])
234
- df_data['低'] = pd.to_numeric(df_data['低'])
235
- df_data['交易量'] = pd.to_numeric(df_data['交易量'])
236
- df_data['涨跌幅'] = pd.to_numeric(df_data['涨跌幅'])
237
- df_data.sort_values('日期', inplace=True)
238
- df_data.reset_index(inplace=True, drop=True)
239
- return df_data
240
-
241
-
242
- if __name__ == "__main__":
243
- crypto_name_url_table_df = crypto_name_url_table(symbol="local")
244
- print(crypto_name_url_table_df)
245
-
246
- crypto_hist_df = crypto_hist(
247
- symbol="BTC", period="每日", start_date="20201020", end_date="20220511"
248
- )
249
- print(crypto_hist_df)
@@ -1,56 +0,0 @@
1
- #!/usr/bin/env python
2
- # -*- coding:utf-8 -*-
3
- """
4
- Date: 2023/7/19 17:40
5
- Desc: 东方财富网站-天天基金网-基金档案-基金公告-人事调整
6
- https://fundf10.eastmoney.com/jjgg_000001.html
7
- """
8
- import time
9
-
10
- import pandas as pd
11
- import requests
12
-
13
-
14
- def fund_announcement_personnel_em(symbol: str = "000001") -> pd.DataFrame:
15
- """
16
- 东方财富网站-天天基金网-基金档案-基金公告-人事调整
17
- https://fundf10.eastmoney.com/jjgg_000001_4.html
18
- :param symbol: 基金代码; 可以通过调用 ak.fund_name_em() 接口获取
19
- :type symbol: str
20
- :return: 人事调整-公告列表
21
- :rtype: pandas.DataFrame
22
- """
23
- url = "http://api.fund.eastmoney.com/f10/JJGG"
24
- headers = {
25
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36",
26
- "Referer": f"http://fundf10.eastmoney.com/jjgg_{symbol}_4.html",
27
- }
28
- params = {
29
- "fundcode": symbol,
30
- "pageIndex": "1",
31
- "pageSize": "1000",
32
- "type": "4",
33
- "_": round(time.time() * 1000),
34
- }
35
- r = requests.get(url, params=params, headers=headers)
36
- data_json = r.json()
37
- temp_df = pd.DataFrame(data_json["Data"])
38
- temp_df.columns = [
39
- "基金代码",
40
- "公告标题",
41
- "基金名称",
42
- "_",
43
- "_",
44
- "公告日期",
45
- "_",
46
- "报告ID",
47
- ]
48
- temp_df = temp_df[["基金代码", "公告标题", "基金名称", "公告日期", "报告ID"]]
49
- temp_df.sort_values(["公告日期"], inplace=True, ignore_index=True)
50
- temp_df["公告日期"] = pd.to_datetime(temp_df["公告日期"]).dt.date
51
- return temp_df
52
-
53
-
54
- if __name__ == "__main__":
55
- fund_announcement_personnel_em_df = fund_announcement_personnel_em(symbol="000001")
56
- print(fund_announcement_personnel_em_df)
@@ -1,170 +0,0 @@
1
- #!/usr/bin/env python
2
- # -*- coding:utf-8 -*-
3
- """
4
- Date: 2021/5/10 17:06
5
- Desc: 提供英为财情-国际大宗商品期货
6
- https://cn.investing.com/commodities/brent-oil-historical-data
7
- """
8
- import re
9
-
10
- import pandas as pd
11
- import requests
12
- from bs4 import BeautifulSoup
13
-
14
- from akshare.index.cons import short_headers, long_headers
15
-
16
-
17
- def get_sector_symbol_name_url() -> dict:
18
- """
19
- 期货所对应板块的 URL
20
- :return: dict
21
- {'能源': '/commodities/energy',
22
- '金属': '/commodities/metals',
23
- '农业': '/commodities/softs',
24
- '商品指数': '/indices/commodities-indices'}
25
- """
26
- url = "https://cn.investing.com/commodities/"
27
- res = requests.get(url, headers=short_headers)
28
- soup = BeautifulSoup(res.text, "lxml")
29
- name_url_option_list = soup.find_all(attrs={"class": "linkTitle"}) # 去掉-所有国家及地区
30
- url_list = [item.find("a")["href"] for item in name_url_option_list]
31
- name_list = [item.get_text() for item in name_url_option_list]
32
- name_code_map_dict = {}
33
- name_code_map_dict.update(zip(name_list, url_list))
34
- return name_code_map_dict
35
-
36
-
37
- def futures_global_commodity_name_url_map(sector: str = "能源") -> dict:
38
- """
39
- 参考网页: https://cn.investing.com/commodities/
40
- 获取选择板块对应的: 具体期货品种的 url 地址
41
- :param sector: 板块, 对应 get_global_country_name_url 品种名称
42
- :type sector: str
43
- :return: dict of name-url
44
- :rtype: dict
45
- {'伦敦布伦特原油': '/commodities/brent-oil',
46
- 'WTI原油': '/commodities/crude-oil',
47
- '伦敦汽油': '/commodities/london-gas-oil',
48
- '天然气': '/commodities/natural-gas?cid=49787',
49
- '燃料油': '/commodities/heating-oil',
50
- '碳排放': '/commodities/carbon-emissions',
51
- 'RBOB汽油': '/commodities/gasoline-rbob',
52
- '布伦特原油': '/commodities/brent-oil?cid=49769',
53
- '原油': '/commodities/crude-oil?cid=49774'}
54
- """
55
- name_url_dict = get_sector_symbol_name_url()
56
- url = f"https://cn.investing.com{name_url_dict[sector]}"
57
- res = requests.post(url, headers=short_headers)
58
- soup = BeautifulSoup(res.text, "lxml")
59
- url_list = [
60
- item.find("a")["href"].split("?")[0]
61
- for item in soup.find_all(attrs={"class": "plusIconTd"})
62
- ]
63
- name_list = [
64
- item.find("a").get_text()
65
- for item in soup.find_all(attrs={"class": "plusIconTd"})
66
- ]
67
- name_code_map_dict = {}
68
- name_code_map_dict.update(zip(name_list, url_list))
69
- return name_code_map_dict
70
-
71
-
72
- def futures_global_commodity_hist(
73
- sector: str = "能源",
74
- symbol: str = "伦敦布伦特原油",
75
- start_date: str = "20000101",
76
- end_date: str = "20191017",
77
- ) -> pd.DataFrame:
78
- """
79
- 国际大宗商品的历史量价数据
80
- https://cn.investing.com/commodities
81
- :param sector: 板块名称; 调用 futures_global_commodity_name_url_map 函数获取
82
- :type sector: str
83
- :param symbol: 品种名称; 通过访问网站查询
84
- :type symbol: str
85
- :param start_date: 开始日期
86
- :type start_date: str
87
- :param end_date: 结束日期
88
- :type end_date: str
89
- :return: 国际大宗商品的历史量价数据
90
- :rtype: pandas.DataFrame
91
- """
92
- start_date = "/".join([start_date[:4], start_date[4:6], start_date[6:]])
93
- end_date = "/".join([end_date[:4], end_date[4:6], end_date[6:]])
94
- name_code_dict = futures_global_commodity_name_url_map(sector)
95
- temp_url = f"https://cn.investing.com/{name_code_dict[symbol]}-historical-data"
96
- res = requests.post(temp_url, headers=short_headers)
97
- soup = BeautifulSoup(res.text, "lxml")
98
- title = soup.find("h2", attrs={"class": "float_lang_base_1"}).get_text()
99
- res = requests.post(temp_url, headers=short_headers)
100
- soup = BeautifulSoup(res.text, "lxml")
101
- data = soup.find_all(text=re.compile("window.histDataExcessInfo"))[0].strip()
102
- para_data = re.findall(r"\d+", data)
103
- payload = {
104
- "curr_id": para_data[0],
105
- "smlID": para_data[1],
106
- "header": title,
107
- "st_date": start_date,
108
- "end_date": end_date,
109
- "interval_sec": "Daily",
110
- "sort_col": "date",
111
- "sort_ord": "DESC",
112
- "action": "historical_data",
113
- }
114
- url = "https://cn.investing.com/instruments/HistoricalDataAjax"
115
- r = requests.post(url, data=payload, headers=long_headers)
116
- temp_df = pd.read_html(r.text)[0]
117
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], format="%Y年%m月%d日")
118
- if any(temp_df["交易量"].astype(str).str.contains("-")):
119
- temp_df["交易量"][temp_df["交易量"].str.contains("-")] = temp_df["交易量"][
120
- temp_df["交易量"].str.contains("-")
121
- ].replace("-", 0)
122
- if any(temp_df["交易量"].astype(str).str.contains("B")):
123
- temp_df["交易量"][temp_df["交易量"].str.contains("B").fillna(False)] = (
124
- temp_df["交易量"][temp_df["交易量"].str.contains("B").fillna(False)]
125
- .str.replace("B", "")
126
- .astype(float)
127
- * 1000000000
128
- )
129
- if any(temp_df["交易量"].astype(str).str.contains("M")):
130
- temp_df["交易量"][temp_df["交易量"].str.contains("M").fillna(False)] = (
131
- temp_df["交易量"][temp_df["交易量"].str.contains("M").fillna(False)]
132
- .str.replace("M", "")
133
- .astype(float)
134
- * 1000000
135
- )
136
- if any(temp_df["交易量"].astype(str).str.contains("K")):
137
- temp_df["交易量"][temp_df["交易量"].str.contains("K").fillna(False)] = (
138
- temp_df["交易量"][temp_df["交易量"].str.contains("K").fillna(False)]
139
- .str.replace("K", "")
140
- .astype(float)
141
- * 1000
142
- )
143
- temp_df["交易量"] = temp_df["交易量"].astype(float)
144
- temp_df["涨跌幅"] = pd.DataFrame(
145
- round(temp_df["涨跌幅"].str.replace("%", "").astype(float) / 100, 6)
146
- )
147
- temp_df.name = title
148
- temp_df.columns.name = None
149
- temp_df.sort_values(["日期"], ascending=False, inplace=True)
150
- return temp_df
151
-
152
-
153
- if __name__ == "__main__":
154
- temp_dict = futures_global_commodity_name_url_map(sector="能源")
155
- print(temp_dict)
156
-
157
- futures_global_commodity_hist_df = futures_global_commodity_hist(
158
- sector="能源", symbol="伦敦布伦特原油", start_date="19700101", end_date="20210510"
159
- )
160
- print(futures_global_commodity_hist_df)
161
-
162
- # futures_global_commodity_hist_df = futures_global_commodity_hist(
163
- # sector="能源", symbol="伦敦布伦特原油", start_date="1970/01/01", end_date="2021/05/10"
164
- # )
165
- # print(futures_global_commodity_hist_df.to_csv("伦敦布伦特原油_19880627_20080319.csv", encoding="gb2312"))
166
- #
167
- # futures_global_commodity_hist_df = futures_global_commodity_hist(
168
- # sector="能源", symbol="伦敦布伦特原油", start_date="2008/03/19", end_date="2021/05/10"
169
- # )
170
- # print(futures_global_commodity_hist_df.to_csv("伦敦布伦特原油_20080319_20210510.csv", encoding="gb2312"))
@@ -1,54 +0,0 @@
1
- #!/usr/bin/env python
2
- # -*- coding:utf-8 -*-
3
- """
4
- Date: 2023/7/2 16:00
5
- Desc: 百度股市通-期货-新闻
6
- https://gushitong.baidu.com/futures/ab-CJ888
7
- """
8
- import pandas as pd
9
- import requests
10
-
11
-
12
- def futures_news_baidu(symbol: str = "AL") -> pd.DataFrame:
13
- """
14
- 百度股市通-期货-新闻
15
- https://gushitong.baidu.com/futures/ab-CJ888
16
- :param symbol: 期货品种代码;大写
17
- :type symbol: str
18
- :return: 新闻
19
- :rtype: pandas.DataFrame
20
- """
21
- url = "https://finance.pae.baidu.com/vapi/getfuturesnews"
22
- params = {"code": f"{symbol}888", "pn": "0", "rn": "2000", "finClientType": "pc"}
23
- r = requests.get(url, params=params)
24
- data_json = r.json()
25
- temp_df = pd.DataFrame(data_json["Result"])
26
- temp_df.rename(
27
- columns={
28
- "loc": "-",
29
- "provider": "-",
30
- "source": "-",
31
- "publish_time": "发布时间",
32
- "third_url": "新闻链接",
33
- "title": "标题",
34
- "is_self_build": "-",
35
- "news_id": "-",
36
- "locate_url": "-",
37
- },
38
- inplace=True,
39
- )
40
- temp_df = temp_df[
41
- [
42
- "标题",
43
- "发布时间",
44
- "新闻链接",
45
- ]
46
- ]
47
- temp_df["发布时间"] = pd.to_datetime(pd.to_numeric(temp_df["发布时间"]), unit="s").dt.date
48
- temp_df.sort_values(["发布时间"], inplace=True, ignore_index=True)
49
- return temp_df
50
-
51
-
52
- if __name__ == "__main__":
53
- futures_news_baidu_df = futures_news_baidu(symbol="AL")
54
- print(futures_news_baidu_df)