akshare 1.13.46__py3-none-any.whl → 1.17.99__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (388) hide show
  1. akshare/__init__.py +757 -161
  2. akshare/air/air_hebei.py +79 -53
  3. akshare/air/air_zhenqi.py +3 -7
  4. akshare/air/cons.py +1 -0
  5. akshare/air/crypto.js +1 -1
  6. akshare/air/outcrypto.js +1 -1
  7. akshare/air/sunrise_tad.py +32 -17
  8. akshare/article/cons.py +1 -0
  9. akshare/article/epu_index.py +4 -3
  10. akshare/article/ff_factor.py +19 -8
  11. akshare/article/fred_md.py +4 -1
  12. akshare/article/risk_rv.py +3 -8
  13. akshare/bank/bank_cbirc_2020.py +11 -11
  14. akshare/bank/cons.py +7 -6
  15. akshare/bond/bond_buy_back_em.py +228 -0
  16. akshare/bond/bond_cb_sina.py +1 -0
  17. akshare/bond/bond_cb_ths.py +17 -9
  18. akshare/bond/bond_cbond.py +19 -14
  19. akshare/bond/bond_china.py +38 -39
  20. akshare/bond/bond_china_money.py +75 -48
  21. akshare/bond/bond_convert.py +10 -9
  22. akshare/bond/bond_em.py +37 -17
  23. akshare/bond/bond_info_cm.py +28 -8
  24. akshare/bond/bond_issue_cninfo.py +73 -30
  25. akshare/bond/bond_summary.py +38 -37
  26. akshare/bond/bond_zh_cov.py +31 -40
  27. akshare/bond/bond_zh_sina.py +61 -51
  28. akshare/bond/cons.py +14 -11
  29. akshare/cal/__init__.py +0 -0
  30. akshare/cal/rv.py +170 -0
  31. akshare/cost/cost_living.py +7 -5
  32. akshare/crypto/__init__.py +1 -1
  33. akshare/crypto/crypto_bitcoin_cme.py +9 -7
  34. akshare/crypto/crypto_hold.py +4 -2
  35. akshare/currency/currency.py +1 -0
  36. akshare/currency/currency_china_bank_sina.py +11 -6
  37. akshare/currency/currency_safe.py +7 -6
  38. akshare/data/__init__.py +1 -1
  39. akshare/data/cninfo.js +1 -1
  40. akshare/datasets.py +10 -21
  41. akshare/economic/cons.py +10 -3
  42. akshare/economic/macro_australia.py +74 -69
  43. akshare/economic/macro_bank.py +95 -653
  44. akshare/economic/macro_canada.py +92 -81
  45. akshare/economic/macro_china.py +163 -117
  46. akshare/economic/macro_china_hk.py +0 -1
  47. akshare/economic/macro_china_nbs.py +24 -7
  48. akshare/economic/macro_euro.py +103 -56
  49. akshare/economic/macro_finance_ths.py +135 -0
  50. akshare/economic/macro_germany.py +1 -1
  51. akshare/economic/macro_info_ws.py +100 -0
  52. akshare/economic/macro_japan.py +0 -1
  53. akshare/economic/macro_other.py +1 -6
  54. akshare/economic/macro_swiss.py +2 -3
  55. akshare/economic/macro_uk.py +1 -1
  56. akshare/economic/macro_usa.py +7 -9
  57. akshare/economic/marco_cnbs.py +11 -6
  58. akshare/energy/energy_carbon.py +94 -126
  59. akshare/energy/energy_oil_em.py +1 -2
  60. akshare/event/cons.py +1 -0
  61. akshare/event/migration.py +3 -2
  62. akshare/exceptions.py +43 -0
  63. akshare/file_fold/calendar.json +245 -2
  64. akshare/forex/__init__.py +0 -0
  65. akshare/forex/cons.py +192 -0
  66. akshare/forex/forex_em.py +149 -0
  67. akshare/fortune/fortune_500.py +15 -48
  68. akshare/fortune/fortune_bloomberg.py +6 -3
  69. akshare/fortune/fortune_forbes_500.py +3 -6
  70. akshare/fortune/fortune_hurun.py +2 -1
  71. akshare/fortune/fortune_xincaifu_500.py +17 -14
  72. akshare/fund/fund_amac.py +38 -15
  73. akshare/fund/fund_announcement_em.py +145 -0
  74. akshare/fund/fund_aum_em.py +49 -35
  75. akshare/fund/fund_em.py +251 -220
  76. akshare/fund/fund_etf_em.py +44 -35
  77. akshare/fund/fund_etf_sina.py +76 -27
  78. akshare/fund/fund_etf_ths.py +95 -0
  79. akshare/fund/fund_fee_em.py +172 -0
  80. akshare/fund/fund_fhsp_em.py +42 -32
  81. akshare/fund/fund_init_em.py +8 -5
  82. akshare/fund/fund_lof_em.py +12 -19
  83. akshare/fund/fund_manager.py +25 -11
  84. akshare/fund/fund_overview_em.py +42 -0
  85. akshare/fund/fund_portfolio_em.py +78 -66
  86. akshare/fund/fund_position_lg.py +19 -8
  87. akshare/fund/fund_rank_em.py +90 -84
  88. akshare/fund/fund_rating.py +33 -12
  89. akshare/fund/fund_report_cninfo.py +63 -48
  90. akshare/fund/fund_scale_em.py +24 -13
  91. akshare/fund/fund_scale_sina.py +20 -10
  92. akshare/fund/fund_xq.py +3 -2
  93. akshare/futures/cons.py +141 -46
  94. akshare/futures/cot.py +89 -88
  95. akshare/futures/futures_basis.py +99 -33
  96. akshare/futures/futures_comex_em.py +1 -0
  97. akshare/futures/futures_comm_ctp.py +13 -2
  98. akshare/futures/futures_contract_detail.py +59 -9
  99. akshare/futures/futures_daily_bar.py +75 -62
  100. akshare/futures/futures_foreign.py +14 -8
  101. akshare/futures/futures_hf_em.py +215 -61
  102. akshare/futures/futures_hist_em.py +191 -0
  103. akshare/futures/futures_hq_sina.py +79 -61
  104. akshare/futures/futures_index_ccidx.py +24 -82
  105. akshare/futures/futures_inventory_99.py +70 -272
  106. akshare/futures/futures_inventory_em.py +14 -11
  107. akshare/futures/futures_news_shmet.py +2 -2
  108. akshare/futures/futures_roll_yield.py +11 -24
  109. akshare/futures/futures_rule.py +7 -3
  110. akshare/futures/futures_rule_em.py +38 -0
  111. akshare/futures/futures_settlement_price_sgx.py +21 -6
  112. akshare/futures/futures_stock_js.py +1 -2
  113. akshare/futures/futures_to_spot.py +43 -39
  114. akshare/futures/futures_warehouse_receipt.py +53 -48
  115. akshare/futures/futures_zh_sina.py +4 -4
  116. akshare/futures/receipt.py +298 -165
  117. akshare/futures/requests_fun.py +16 -3
  118. akshare/futures/symbol_var.py +32 -13
  119. akshare/futures_derivative/cons.py +100 -103
  120. akshare/futures_derivative/futures_contract_info_cffex.py +55 -39
  121. akshare/futures_derivative/futures_contract_info_czce.py +2 -0
  122. akshare/futures_derivative/futures_contract_info_dce.py +43 -17
  123. akshare/futures_derivative/futures_contract_info_gfex.py +43 -31
  124. akshare/futures_derivative/futures_contract_info_ine.py +43 -34
  125. akshare/futures_derivative/futures_contract_info_shfe.py +7 -8
  126. akshare/futures_derivative/futures_cot_sina.py +28 -19
  127. akshare/futures_derivative/futures_index_sina.py +25 -13
  128. akshare/fx/cons.py +12 -7
  129. akshare/fx/currency_investing.py +19 -285
  130. akshare/fx/fx_c_swap_cm.py +62 -0
  131. akshare/fx/fx_quote.py +3 -2
  132. akshare/fx/fx_quote_baidu.py +2 -1
  133. akshare/hf/__init__.py +1 -1
  134. akshare/hf/hf_sp500.py +8 -7
  135. akshare/index/cons.py +132 -28
  136. akshare/index/index_cflp.py +29 -26
  137. akshare/index/index_cni.py +89 -91
  138. akshare/index/index_cons.py +26 -10
  139. akshare/index/index_csindex.py +68 -0
  140. akshare/index/index_cx.py +263 -62
  141. akshare/index/index_drewry.py +17 -16
  142. akshare/index/index_eri.py +1 -0
  143. akshare/index/index_global_em.py +167 -0
  144. akshare/index/index_global_sina.py +82 -0
  145. akshare/index/index_kq_fz.py +17 -14
  146. akshare/index/index_kq_ss.py +1 -0
  147. akshare/index/index_option_qvix.py +351 -16
  148. akshare/index/index_research_sw.py +38 -38
  149. akshare/index/index_spot.py +9 -5
  150. akshare/index/index_stock_hk.py +6 -10
  151. akshare/index/index_stock_us_sina.py +1 -1
  152. akshare/index/index_stock_zh.py +193 -101
  153. akshare/index/index_stock_zh_csindex.py +15 -369
  154. akshare/index/index_sugar.py +18 -4
  155. akshare/index/index_sw.py +62 -34
  156. akshare/index/index_yw.py +53 -75
  157. akshare/index/index_zh_em.py +15 -82
  158. akshare/interest_rate/interbank_rate_em.py +14 -10
  159. akshare/movie/artist_yien.py +32 -5
  160. akshare/movie/jm.js +0 -1
  161. akshare/movie/movie_yien.py +92 -18
  162. akshare/movie/video_yien.py +28 -5
  163. akshare/news/__init__.py +1 -1
  164. akshare/news/news_baidu.py +395 -220
  165. akshare/news/news_cctv.py +38 -38
  166. akshare/news/news_stock.py +49 -13
  167. akshare/nlp/nlp_interface.py +7 -8
  168. akshare/option/cons.py +12 -12
  169. akshare/option/option_comm_qihuo.py +86 -0
  170. akshare/option/option_commodity.py +355 -211
  171. akshare/option/option_commodity_sina.py +22 -26
  172. akshare/option/option_contract_info_ctp.py +63 -0
  173. akshare/option/option_current_sse.py +61 -0
  174. akshare/option/option_current_szse.py +84 -0
  175. akshare/option/option_czce.py +37 -9
  176. akshare/option/option_daily_stats_sse_szse.py +145 -0
  177. akshare/option/option_em.py +4 -8
  178. akshare/option/option_finance.py +60 -12
  179. akshare/option/option_finance_sina.py +28 -26
  180. akshare/option/option_lhb_em.py +62 -57
  181. akshare/option/option_margin.py +62 -0
  182. akshare/option/option_premium_analysis_em.py +58 -53
  183. akshare/option/option_risk_analysis_em.py +11 -8
  184. akshare/option/option_risk_indicator_sse.py +18 -16
  185. akshare/option/option_value_analysis_em.py +62 -55
  186. akshare/other/__init__.py +1 -1
  187. akshare/other/other_car_cpca.py +20 -20
  188. akshare/pro/__init__.py +0 -1
  189. akshare/pro/client.py +6 -4
  190. akshare/pro/cons.py +3 -2
  191. akshare/pro/data_pro.py +6 -5
  192. akshare/qdii/__init__.py +0 -0
  193. akshare/qdii/qdii_jsl.py +233 -0
  194. akshare/qhkc/__init__.py +1 -6
  195. akshare/qhkc/qhkc_api.py +64 -22
  196. akshare/qhkc_web/__init__.py +1 -6
  197. akshare/qhkc_web/qhkc_fund.py +10 -6
  198. akshare/qhkc_web/qhkc_index.py +28 -14
  199. akshare/qhkc_web/qhkc_tool.py +62 -59
  200. akshare/rate/__init__.py +1 -1
  201. akshare/rate/repo_rate.py +36 -32
  202. akshare/reits/__init__.py +1 -1
  203. akshare/reits/reits_basic.py +149 -13
  204. akshare/request.py +117 -0
  205. akshare/spot/__init__.py +1 -1
  206. akshare/spot/spot_hog_soozhu.py +232 -0
  207. akshare/spot/spot_price_qh.py +121 -0
  208. akshare/spot/spot_sge.py +70 -9
  209. akshare/stock/cons.py +60 -23
  210. akshare/stock/stock_allotment_cninfo.py +10 -9
  211. akshare/stock/stock_ask_bid_em.py +3 -78
  212. akshare/stock/stock_board_concept_em.py +160 -35
  213. akshare/stock/stock_board_industry_em.py +163 -70
  214. akshare/stock/stock_cg_equity_mortgage.py +15 -11
  215. akshare/stock/stock_cg_guarantee.py +41 -51
  216. akshare/stock/stock_cg_lawsuit.py +36 -35
  217. akshare/stock/stock_dividend_cninfo.py +36 -16
  218. akshare/stock/stock_dzjy_em.py +347 -260
  219. akshare/stock/stock_fund_em.py +73 -64
  220. akshare/stock/stock_fund_hold.py +1 -2
  221. akshare/stock/stock_gsrl_em.py +1 -0
  222. akshare/stock/stock_hk_comparison_em.py +175 -0
  223. akshare/stock/stock_hk_famous.py +107 -0
  224. akshare/stock/stock_hk_fhpx_ths.py +2 -1
  225. akshare/stock/stock_hk_hot_rank_em.py +1 -0
  226. akshare/stock/stock_hk_sina.py +91 -42
  227. akshare/stock/stock_hold_control_cninfo.py +100 -15
  228. akshare/stock/stock_hold_control_em.py +4 -5
  229. akshare/stock/stock_hold_num_cninfo.py +18 -12
  230. akshare/stock/stock_hot_rank_em.py +4 -1
  231. akshare/stock/stock_hot_search_baidu.py +32 -19
  232. akshare/stock/stock_hot_up_em.py +4 -1
  233. akshare/stock/stock_hsgt_em.py +155 -0
  234. akshare/stock/stock_industry.py +1 -0
  235. akshare/stock/stock_industry_cninfo.py +25 -20
  236. akshare/stock/stock_industry_pe_cninfo.py +45 -31
  237. akshare/stock/stock_industry_sw.py +5 -9
  238. akshare/stock/stock_info.py +31 -19
  239. akshare/stock/stock_info_em.py +17 -11
  240. akshare/stock/stock_intraday_em.py +9 -80
  241. akshare/stock/stock_intraday_sina.py +2 -2
  242. akshare/stock/stock_ipo_summary_cninfo.py +25 -10
  243. akshare/stock/stock_new_cninfo.py +32 -19
  244. akshare/stock/stock_news_cx.py +39 -0
  245. akshare/stock/stock_profile_cninfo.py +9 -8
  246. akshare/stock/stock_profile_em.py +302 -0
  247. akshare/stock/stock_rank_forecast.py +8 -6
  248. akshare/stock/stock_repurchase_em.py +7 -2
  249. akshare/stock/stock_share_changes_cninfo.py +18 -14
  250. akshare/stock/stock_share_hold.py +24 -20
  251. akshare/stock/stock_stop.py +6 -6
  252. akshare/stock/stock_summary.py +153 -417
  253. akshare/stock/stock_us_famous.py +19 -11
  254. akshare/stock/stock_us_js.py +3 -2
  255. akshare/stock/stock_us_pink.py +38 -27
  256. akshare/stock/stock_us_sina.py +15 -12
  257. akshare/stock/stock_weibo_nlp.py +18 -20
  258. akshare/stock/stock_xq.py +36 -9
  259. akshare/stock/stock_zh_a_sina.py +58 -80
  260. akshare/stock/stock_zh_a_special.py +240 -243
  261. akshare/stock/stock_zh_a_tick_tx.py +11 -3
  262. akshare/stock/stock_zh_ah_tx.py +23 -26
  263. akshare/stock/stock_zh_b_sina.py +32 -55
  264. akshare/stock/stock_zh_comparison_em.py +250 -0
  265. akshare/stock/stock_zh_kcb_report.py +11 -9
  266. akshare/stock/stock_zh_kcb_sina.py +67 -64
  267. akshare/stock_a/__init__.py +0 -0
  268. akshare/stock_a/stock_board_concept_name_em.py +170 -0
  269. akshare/stock_a/stock_individual_fund_flow_rank.py +258 -0
  270. akshare/stock_a/stock_zh_a_spot.py +212 -0
  271. akshare/stock_feature/cons.py +1 -0
  272. akshare/stock_feature/stock_a_below_net_asset_statistics.py +5 -2
  273. akshare/stock_feature/stock_a_high_low.py +5 -2
  274. akshare/stock_feature/stock_a_indicator.py +15 -57
  275. akshare/stock_feature/stock_a_pe_and_pb.py +39 -9
  276. akshare/stock_feature/stock_account_em.py +0 -1
  277. akshare/stock_feature/stock_all_pb.py +2 -1
  278. akshare/stock_feature/stock_analyst_em.py +36 -30
  279. akshare/stock_feature/stock_board_concept_ths.py +144 -252
  280. akshare/stock_feature/stock_board_industry_ths.py +137 -401
  281. akshare/stock_feature/stock_buffett_index_lg.py +10 -8
  282. akshare/stock_feature/stock_classify_sina.py +3 -6
  283. akshare/stock_feature/stock_comment_em.py +81 -144
  284. akshare/stock_feature/stock_concept_futu.py +183 -0
  285. akshare/stock_feature/stock_congestion_lg.py +2 -1
  286. akshare/stock_feature/stock_cyq_em.py +5 -11
  287. akshare/stock_feature/stock_disclosure_cninfo.py +20 -10
  288. akshare/stock_feature/stock_dxsyl_em.py +121 -74
  289. akshare/stock_feature/stock_ebs_lg.py +5 -4
  290. akshare/stock_feature/stock_esg_sina.py +33 -15
  291. akshare/stock_feature/stock_fhps_em.py +62 -26
  292. akshare/stock_feature/stock_fhps_ths.py +34 -7
  293. akshare/stock_feature/stock_fund_flow.py +38 -25
  294. akshare/stock_feature/stock_gddh_em.py +19 -11
  295. akshare/stock_feature/stock_gdfx_em.py +226 -113
  296. akshare/stock_feature/stock_gdhs.py +75 -50
  297. akshare/stock_feature/stock_gdzjc_em.py +21 -10
  298. akshare/stock_feature/stock_gpzy_em.py +78 -46
  299. akshare/stock_feature/stock_gxl_lg.py +3 -2
  300. akshare/stock_feature/stock_hist_em.py +158 -237
  301. akshare/stock_feature/stock_hist_tx.py +13 -10
  302. akshare/stock_feature/stock_hk_valuation_baidu.py +20 -8
  303. akshare/stock_feature/stock_hot_xq.py +4 -6
  304. akshare/stock_feature/stock_hsgt_em.py +269 -97
  305. akshare/stock_feature/stock_hsgt_exchange_rate.py +115 -87
  306. akshare/stock_feature/stock_hsgt_min_em.py +13 -16
  307. akshare/stock_feature/stock_info.py +8 -81
  308. akshare/stock_feature/stock_inner_trade_xq.py +38 -31
  309. akshare/stock_feature/stock_irm_cninfo.py +32 -9
  310. akshare/stock_feature/stock_jgdy_em.py +43 -40
  311. akshare/stock_feature/stock_lh_yybpm.py +36 -37
  312. akshare/stock_feature/stock_lhb_em.py +165 -35
  313. akshare/stock_feature/stock_lhb_sina.py +93 -46
  314. akshare/stock_feature/stock_margin_em.py +101 -0
  315. akshare/stock_feature/{stock_sse_margin.py → stock_margin_sse.py} +21 -17
  316. akshare/stock_feature/{stock_szse_margin.py → stock_margin_szse.py} +7 -7
  317. akshare/stock_feature/stock_market_legu.py +4 -2
  318. akshare/stock_feature/stock_pankou_em.py +71 -35
  319. akshare/stock_feature/stock_qsjy_em.py +13 -4
  320. akshare/stock_feature/stock_report_em.py +152 -8
  321. akshare/stock_feature/stock_research_report_em.py +55 -20
  322. akshare/stock_feature/stock_sns_sseinfo.py +15 -12
  323. akshare/stock_feature/stock_sy_em.py +20 -15
  324. akshare/stock_feature/stock_technology_ths.py +152 -120
  325. akshare/stock_feature/stock_tfp_em.py +37 -14
  326. akshare/stock_feature/stock_three_report_em.py +120 -78
  327. akshare/stock_feature/stock_ttm_lyr.py +18 -9
  328. akshare/stock_feature/stock_value_em.py +83 -0
  329. akshare/stock_feature/stock_yjbb_em.py +58 -32
  330. akshare/stock_feature/stock_yjyg_cninfo.py +6 -2
  331. akshare/stock_feature/stock_yjyg_em.py +1 -1
  332. akshare/stock_feature/stock_yzxdr_em.py +24 -22
  333. akshare/stock_feature/stock_zdhtmx_em.py +20 -6
  334. akshare/stock_feature/stock_zh_valuation_baidu.py +3 -2
  335. akshare/stock_feature/stock_zh_vote_baidu.py +4 -1
  336. akshare/stock_feature/stock_ztb_em.py +39 -24
  337. akshare/stock_fundamental/__init__.py +1 -1
  338. akshare/stock_fundamental/stock_basic_info_xq.py +119 -0
  339. akshare/stock_fundamental/{stock_finance_hk.py → stock_finance_hk_em.py} +23 -16
  340. akshare/stock_fundamental/{stock_finance.py → stock_finance_sina.py} +203 -59
  341. akshare/stock_fundamental/stock_finance_ths.py +524 -57
  342. akshare/stock_fundamental/stock_finance_us_em.py +268 -0
  343. akshare/stock_fundamental/stock_gbjg_em.py +80 -0
  344. akshare/stock_fundamental/stock_hold.py +26 -17
  345. akshare/stock_fundamental/stock_ipo_declare.py +1 -0
  346. akshare/stock_fundamental/stock_kcb_detail_sse.py +10 -10
  347. akshare/stock_fundamental/stock_kcb_sse.py +26 -25
  348. akshare/stock_fundamental/stock_notice.py +41 -18
  349. akshare/stock_fundamental/stock_profit_forecast_em.py +31 -13
  350. akshare/stock_fundamental/stock_profit_forecast_hk_etnet.py +64 -41
  351. akshare/stock_fundamental/stock_profit_forecast_ths.py +86 -35
  352. akshare/stock_fundamental/stock_recommend.py +20 -4
  353. akshare/stock_fundamental/stock_register_em.py +448 -0
  354. akshare/stock_fundamental/stock_zygc.py +5 -62
  355. akshare/tool/trade_date_hist.py +1 -1
  356. akshare/utils/context.py +43 -0
  357. akshare/utils/demjson.py +2009 -1338
  358. akshare/utils/func.py +49 -2
  359. akshare/utils/multi_decrypt.py +53 -0
  360. akshare/utils/token_process.py +6 -5
  361. akshare/utils/tqdm.py +13 -3
  362. {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info}/METADATA +56 -86
  363. akshare-1.17.99.dist-info/RECORD +409 -0
  364. {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info}/WHEEL +1 -1
  365. {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info/licenses}/LICENSE +1 -1
  366. tests/test_func.py +3 -5
  367. akshare/bond/bond_futures.py +0 -50
  368. akshare/bond/bond_investing.py +0 -139
  369. akshare/crypto/crypto_hist_investing.py +0 -249
  370. akshare/fortune/fortune_it_juzi.py +0 -123
  371. akshare/fund/fund_announcement.py +0 -56
  372. akshare/futures/futures_international.py +0 -170
  373. akshare/futures/futures_news_baidu.py +0 -54
  374. akshare/futures/inventory_data.py +0 -100
  375. akshare/futures_derivative/futures_index_price_nh.py +0 -61
  376. akshare/futures_derivative/futures_index_return_nh.py +0 -47
  377. akshare/futures_derivative/futures_index_volatility_nh.py +0 -51
  378. akshare/futures_derivative/futures_other_index_nh.py +0 -145
  379. akshare/index/index_fear_greed_funddb.py +0 -78
  380. akshare/index/index_investing.py +0 -232
  381. akshare/sport/__init__.py +0 -6
  382. akshare/sport/sport_olympic.py +0 -27
  383. akshare/sport/sport_olympic_winter.py +0 -39
  384. akshare/stock_feature/stock_wencai.py +0 -104
  385. akshare/stock_fundamental/stock_mda_ym.py +0 -40
  386. akshare/stock_fundamental/stock_register.py +0 -292
  387. akshare-1.13.46.dist-info/RECORD +0 -380
  388. {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info}/top_level.txt +0 -0
akshare/air/air_hebei.py CHANGED
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2022/3/5 12:33
4
+ Date: 2024/4/25 17:20
5
5
  Desc: 河北省空气质量预报信息发布系统
6
- http://110.249.223.67/publish/
6
+ https://110.249.223.67/publish
7
7
  每日 17 时发布
8
8
  等级划分
9
9
  1. 空气污染指数为0-50,空气质量级别为一级,空气质量状况属于优。此时,空气质量令人满意,基本无空气污染,各类人群可正常活动。
@@ -14,68 +14,94 @@ http://110.249.223.67/publish/
14
14
  6. 空气污染指数大于300,空气质量级别为六级,空气质量状况属于严重污染。此时,健康人群运动耐受力降低,有明显强烈症状,提前出现某些疾病,建议儿童、老年人和病人应当留在室内,避免体力消耗,一般人群应避免户外活动。
15
15
  发布单位:河北省环境应急与重污染天气预警中心 技术支持:中国科学院大气物理研究所 中科三清科技有限公司
16
16
  """
17
- from datetime import datetime
18
17
 
19
18
  import pandas as pd
20
19
  import requests
21
- from tqdm import tqdm
20
+ from bs4 import BeautifulSoup
22
21
 
23
22
 
24
- def air_quality_hebei(symbol: str = "唐山市") -> pd.DataFrame:
23
+ def air_quality_hebei() -> pd.DataFrame:
25
24
  """
26
25
  河北省空气质量预报信息发布系统-空气质量预报, 未来 6 天
27
- http://110.249.223.67/publish/
28
- :param symbol: choice of {'石家庄市', '唐山市', '秦皇岛市', '邯郸市', '邢台市', '保定市', '张家口市', '承德市', '沧州市', '廊坊市', '衡水市', '辛集市', '定州市'}
29
- :type symbol: str
26
+ http://218.11.10.130:8080/#/application/home
30
27
  :return: city = "", 返回所有地区的数据; city="唐山市", 返回唐山市的数据
31
28
  :rtype: pandas.DataFrame
32
29
  """
33
- url = "http://110.249.223.67/server/api/CityPublishInfo/GetProvinceAndCityPublishData"
34
- params = {"publishDate": f"{datetime.today().strftime('%Y-%m-%d')} 16:00:00"}
35
- r = requests.get(url, params=params)
36
- json_data = r.json()
37
- city_list = pd.DataFrame.from_dict(json_data["cityPublishDatas"], orient="columns")[
38
- "CityName"
39
- ].tolist()
40
- outer_df = pd.DataFrame()
41
- for i in tqdm(range(1, 7), leave=False):
42
- inner_df = pd.DataFrame(
43
- [item[f"Date{i}"] for item in json_data["cityPublishDatas"]],
44
- index=city_list,
45
- )
46
- outer_df = pd.concat([outer_df, inner_df])
47
- if symbol == "":
48
- temp_df = outer_df.reset_index()
49
- temp_df.columns = [
50
- 'city',
51
- 'date',
52
- 'pollutant',
53
- 'minAQI',
54
- 'maxAQI',
55
- 'level',
56
- ]
57
- temp_df['date'] = pd.to_datetime(temp_df['date']).dt.date
58
- temp_df['minaqi'] = pd.to_numeric(temp_df['minaqi'])
59
- temp_df['maxaqi'] = pd.to_numeric(temp_df['maxaqi'])
60
- return temp_df
61
- else:
62
- temp_df = outer_df.reset_index()
63
- temp_df.columns = [
64
- 'city',
65
- 'date',
66
- 'pollutant',
67
- 'minaqi',
68
- 'maxaqi',
69
- 'level',
70
- ]
71
- temp_df['date'] = pd.to_datetime(temp_df['date']).dt.date
72
- temp_df['minaqi'] = pd.to_numeric(temp_df['minaqi'])
73
- temp_df['maxaqi'] = pd.to_numeric(temp_df['maxaqi'])
74
- temp_df = temp_df[temp_df['city'] == symbol]
75
- temp_df.reset_index(inplace=True, drop=True)
76
- return temp_df
30
+ url = "http://218.11.10.130:8080/api/hour/130000.xml"
31
+ r = requests.get(url)
32
+ soup = BeautifulSoup(r.content, features="xml")
33
+ data = []
34
+ cities = soup.find_all("City")
35
+ for city in cities:
36
+ pointers = city.find_all("Pointer")
37
+ for pointer in pointers:
38
+ row = {
39
+ "City": city.Name.text if city.Name else None,
40
+ "Region": pointer.Region.text if pointer.Region else None,
41
+ "Station": pointer.Name.text if pointer.Name else None,
42
+ "DateTime": pointer.DataTime.text if pointer.DataTime else None,
43
+ "AQI": pointer.AQI.text if pointer.AQI else None,
44
+ "Level": pointer.Level.text if pointer.Level else None,
45
+ "MaxPoll": pointer.MaxPoll.text if pointer.MaxPoll else None,
46
+ "Longitude": pointer.CLng.text if pointer.CLng else None,
47
+ "Latitude": pointer.CLat.text if pointer.CLat else None,
48
+ }
49
+ polls = pointer.find_all("Poll")
50
+ for poll in polls:
51
+ poll_name = poll.Name.text if poll.Name else None
52
+ poll_value = poll.Value.text if poll.Value else None
53
+ row[f"{poll_name}_Value"] = poll_value
54
+ row[f"{poll_name}_IAQI"] = poll.IAQI.text if poll.IAQI else None
55
+ data.append(row)
56
+
57
+ df = pd.DataFrame(data)
58
+ numeric_columns = ["AQI", "Longitude", "Latitude"] + [
59
+ col for col in df.columns if col.endswith("_Value") or col.endswith("_IAQI")
60
+ ]
61
+ for col in numeric_columns:
62
+ df[col] = pd.to_numeric(df[col], errors="coerce")
63
+
64
+ column_names = {
65
+ "City": "城市",
66
+ "Region": "区域",
67
+ "Station": "监测点",
68
+ "DateTime": "时间",
69
+ "Level": "空气质量等级",
70
+ "MaxPoll": "首要污染物",
71
+ "Longitude": "经度",
72
+ "Latitude": "纬度",
73
+ "SO2_Value": "二氧化硫_浓度",
74
+ "SO2_IAQI": "二氧化硫_IAQI",
75
+ "CO_Value": "一氧化碳_浓度",
76
+ "CO_IAQI": "一氧化碳_IAQI",
77
+ "NO2_Value": "二氧化氮_浓度",
78
+ "NO2_IAQI": "二氧化氮_IAQI",
79
+ "O3-1H_Value": "臭氧1小时_浓度",
80
+ "O3-1H_IAQI": "臭氧1小时_IAQI",
81
+ "O3-8H_Value": "臭氧8小时_浓度",
82
+ "O3-8H_IAQI": "臭氧8小时_IAQI",
83
+ "PM2.5_Value": "PM2.5_浓度",
84
+ "PM2.5_IAQI": "PM2.5_IAQI",
85
+ "PM10_Value": "PM10_浓度",
86
+ "PM10_IAQI": "PM10_IAQI",
87
+ }
88
+ df = df.rename(columns=column_names)
89
+ basic_columns = [
90
+ "城市",
91
+ "区域",
92
+ "监测点",
93
+ "时间",
94
+ "AQI",
95
+ "空气质量等级",
96
+ "首要污染物",
97
+ "经度",
98
+ "纬度",
99
+ ]
100
+ pollutant_columns = [col for col in df.columns if col not in basic_columns]
101
+ df = df[basic_columns + sorted(pollutant_columns)]
102
+ return df
77
103
 
78
104
 
79
105
  if __name__ == "__main__":
80
- air_quality_hebei_df = air_quality_hebei(symbol="定州市")
106
+ air_quality_hebei_df = air_quality_hebei()
81
107
  print(air_quality_hebei_df)
akshare/air/air_zhenqi.py CHANGED
@@ -15,7 +15,7 @@ from io import StringIO
15
15
 
16
16
  import pandas as pd
17
17
  import requests
18
- from py_mini_racer import py_mini_racer
18
+ from py_mini_racer import MiniRacer
19
19
 
20
20
  from akshare.utils import demjson
21
21
 
@@ -116,14 +116,10 @@ def air_quality_watch_point(
116
116
  end_date = "-".join([end_date[:4], end_date[4:6], end_date[6:]])
117
117
  url = "https://www.zq12369.com/api/zhenqiapi.php"
118
118
  file_data = _get_file_content(file_name="crypto.js")
119
- ctx = py_mini_racer.MiniRacer()
119
+ ctx = MiniRacer()
120
120
  ctx.eval(file_data)
121
121
  method = "GETCITYPOINTAVG"
122
- ctx.call("encode_param", method)
123
- ctx.call("encode_param", start_date)
124
- ctx.call("encode_param", end_date)
125
122
  city_param = ctx.call("encode_param", city)
126
- ctx.call("encode_secret", method, city_param, start_date, end_date)
127
123
  payload = {
128
124
  "appId": "a01901d3caba1f362d69474674ce477f",
129
125
  "method": ctx.call("encode_param", method),
@@ -167,7 +163,7 @@ def air_quality_hist(
167
163
  end_date = "-".join([end_date[:4], end_date[4:6], end_date[6:]])
168
164
  url = "https://www.zq12369.com/api/newzhenqiapi.php"
169
165
  file_data = _get_file_content(file_name="outcrypto.js")
170
- ctx = py_mini_racer.MiniRacer()
166
+ ctx = MiniRacer()
171
167
  ctx.eval(file_data)
172
168
  app_id = "4f0e3a273d547ce6b7147bfa7ceb4b6e"
173
169
  method = "CETCITYPERIOD"
akshare/air/cons.py CHANGED
@@ -4,6 +4,7 @@
4
4
  Date: 2019/11/25 20:45
5
5
  Desc: 空气质量接口配置文件
6
6
  """
7
+
7
8
  city_chinese_list = [
8
9
  "北京",
9
10
  "重庆",
akshare/air/crypto.js CHANGED
@@ -136,4 +136,4 @@ function decode_result(a) {
136
136
  var hexcase = 0,
137
137
  b64pad = "",
138
138
  chrsz = 8,
139
- appId = "a01901d3caba1f362d69474674ce477f";
139
+ appId = "a01901d3caba1f362d69474674ce477f";
akshare/air/outcrypto.js CHANGED
@@ -4897,4 +4897,4 @@ CryptoJS.mode.ECB = function() {
4897
4897
  blockSize: 2
4898
4898
  });
4899
4899
  h.TripleDES = e._6(g)
4900
- })();
4900
+ })();
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/1/24 15:00
4
+ Date: 2024/4/29 16:00
5
5
  Desc: 日出和日落数据
6
6
  https://www.timeanddate.com
7
7
  """
8
+
8
9
  from io import StringIO
9
10
 
10
11
  import pandas as pd
11
- import pypinyin
12
12
  import requests
13
13
 
14
14
 
@@ -31,11 +31,13 @@ def sunrise_city_list() -> list:
31
31
  city_list.extend([item.lower() for item in china_city_two_df.iloc[:, 1].tolist()])
32
32
  city_list.extend([item.lower() for item in china_city_two_df.iloc[:, 2].tolist()])
33
33
  city_list.extend([item.lower() for item in china_city_two_df.iloc[:, 3].tolist()])
34
- city_list.extend([item.lower() for item in china_city_two_df.iloc[:, 4].dropna().tolist()])
34
+ city_list.extend(
35
+ [item.lower() for item in china_city_two_df.iloc[:, 4].dropna().tolist()]
36
+ )
35
37
  return city_list
36
38
 
37
39
 
38
- def sunrise_daily(date: str = "20200428", city: str = "北京") -> pd.DataFrame:
40
+ def sunrise_daily(date: str = "20240428", city: str = "beijing") -> pd.DataFrame:
39
41
  """
40
42
  每日日出日落数据
41
43
  https://www.timeanddate.com/astronomy/china/shaoxing
@@ -46,24 +48,29 @@ def sunrise_daily(date: str = "20200428", city: str = "北京") -> pd.DataFrame:
46
48
  :return: 返回指定日期指定地区的日出日落数据
47
49
  :rtype: pandas.DataFrame
48
50
  """
49
- if pypinyin.slug(city, separator='') in sunrise_city_list():
51
+ import urllib3
52
+
53
+ urllib3.disable_warnings()
54
+ if city in sunrise_city_list():
50
55
  year = date[:4]
51
56
  month = date[4:6]
52
- url = f"https://www.timeanddate.com/sun/china/{pypinyin.slug(city, separator='')}?month={month}&year={year}"
53
- r = requests.get(url)
57
+ url = f"https://www.timeanddate.com/sun/china/{city}?month={month}&year={year}"
58
+ r = requests.get(url, verify=False)
54
59
  table = pd.read_html(StringIO(r.text), header=2)[1]
55
- month_df = table.iloc[:-1, ]
56
- day_df = month_df[month_df.iloc[:, 0].astype(str).str.zfill(2) == date[6:]].copy()
60
+ month_df = table.iloc[:-1,]
61
+ day_df = month_df[
62
+ month_df.iloc[:, 0].astype(str).str.zfill(2) == date[6:]
63
+ ].copy()
57
64
  day_df.index = pd.to_datetime([date] * len(day_df), format="%Y%m%d")
58
65
  day_df.reset_index(inplace=True)
59
66
  day_df.rename(columns={"index": "date"}, inplace=True)
60
- day_df['date'] = pd.to_datetime(day_df['date']).dt.date
67
+ day_df["date"] = pd.to_datetime(day_df["date"]).dt.date
61
68
  return day_df
62
69
  else:
63
70
  raise "请输入正确的城市名称"
64
71
 
65
72
 
66
- def sunrise_monthly(date: str = "20190801", city: str = "北京") -> pd.DataFrame:
73
+ def sunrise_monthly(date: str = "20240428", city: str = "beijing") -> pd.DataFrame:
67
74
  """
68
75
  每个指定 date 所在月份的每日日出日落数据, 如果当前月份未到月底, 则以预测值填充
69
76
  https://www.timeanddate.com/astronomy/china/shaoxing
@@ -74,24 +81,32 @@ def sunrise_monthly(date: str = "20190801", city: str = "北京") -> pd.DataFram
74
81
  :return: 指定 date 所在月份的每日日出日落数据
75
82
  :rtype: pandas.DataFrame
76
83
  """
77
- if pypinyin.slug(city, separator='') in sunrise_city_list():
84
+ import urllib3
85
+
86
+ urllib3.disable_warnings()
87
+ if city in sunrise_city_list():
78
88
  year = date[:4]
79
89
  month = date[4:6]
80
- url = f"https://www.timeanddate.com/sun/china/{pypinyin.slug(city, separator='')}?month={month}&year={year}"
90
+ url = f"https://www.timeanddate.com/sun/china/{city}?month={month}&year={year}"
81
91
  r = requests.get(url)
82
92
  table = pd.read_html(StringIO(r.text), header=2)[1]
83
- month_df = table.iloc[:-1, ].copy()
93
+ month_df = table.iloc[:-1,].copy()
84
94
  month_df.index = [date[:-2]] * len(month_df)
85
95
  month_df.reset_index(inplace=True)
86
- month_df.rename(columns={"index": "date", }, inplace=True)
96
+ month_df.rename(
97
+ columns={
98
+ "index": "date",
99
+ },
100
+ inplace=True,
101
+ )
87
102
  return month_df
88
103
  else:
89
104
  raise "请输入正确的城市名称"
90
105
 
91
106
 
92
107
  if __name__ == "__main__":
93
- sunrise_daily_df = sunrise_daily(date="20230220", city="北京")
108
+ sunrise_daily_df = sunrise_daily(date="20240428", city="beijing")
94
109
  print(sunrise_daily_df)
95
110
 
96
- sunrise_monthly_df = sunrise_monthly(date="20230220", city="北京")
111
+ sunrise_monthly_df = sunrise_monthly(date="20240428", city="beijing")
97
112
  print(sunrise_monthly_df)
akshare/article/cons.py CHANGED
@@ -4,6 +4,7 @@
4
4
  Date: 2019/11/14 20:32
5
5
  Desc: 学术板块配置文件
6
6
  """
7
+
7
8
  # EPU
8
9
  epu_home_url = "http://www.policyuncertainty.com/index.html"
9
10
 
@@ -5,6 +5,7 @@ Date: 2024/1/20 22:00
5
5
  Desc: 经济政策不确定性指数
6
6
  https://www.policyuncertainty.com/index.html
7
7
  """
8
+
8
9
  import pandas as pd
9
10
 
10
11
 
@@ -28,7 +29,7 @@ def article_epu_index(symbol: str = "China") -> pd.DataFrame:
28
29
  symbol = "HK"
29
30
  epu_df = pd.read_excel(
30
31
  io=f"http://www.policyuncertainty.com/media/{symbol}_EPU_Data_Annotated.xlsx",
31
- engine="openpyxl"
32
+ engine="openpyxl",
32
33
  )
33
34
  return epu_df
34
35
  if symbol in ["Germany", "France", "Italy"]: # 欧洲
@@ -40,13 +41,13 @@ def article_epu_index(symbol: str = "China") -> pd.DataFrame:
40
41
  if symbol in ["Ireland", "Chile", "Colombia", "Netherlands", "Singapore", "Sweden"]:
41
42
  epu_df = pd.read_excel(
42
43
  io=f"http://www.policyuncertainty.com/media/{symbol}_Policy_Uncertainty_Data.xlsx",
43
- engine="openpyxl"
44
+ engine="openpyxl",
44
45
  )
45
46
  return epu_df
46
47
  if symbol == "Greece":
47
48
  epu_df = pd.read_excel(
48
49
  io=f"http://www.policyuncertainty.com/media/FKT_{symbol}_Policy_Uncertainty_Data.xlsx",
49
- engine="openpyxl"
50
+ engine="openpyxl",
50
51
  )
51
52
  return epu_df
52
53
  url = f"http://www.policyuncertainty.com/media/{symbol}_Policy_Uncertainty_Data.csv"
@@ -5,6 +5,7 @@ Date: 2024/1/20 22:30
5
5
  Desc: FF-data-library
6
6
  https://mba.tuck.dartmouth.edu/pages/faculty/ken.french/data_library.html
7
7
  """
8
+
8
9
  from io import StringIO
9
10
 
10
11
  import pandas as pd
@@ -23,26 +24,31 @@ def article_ff_crr() -> pd.DataFrame:
23
24
  res = requests.get(ff_home_url)
24
25
  # first table
25
26
  list_index = (
26
- pd.read_html(StringIO(res.text), header=0, index_col=0)[4].iloc[2, :].index.tolist()
27
+ pd.read_html(StringIO(res.text), header=0, index_col=0)[4]
28
+ .iloc[2, :]
29
+ .index.tolist()
27
30
  )
28
31
  list_0 = [
29
32
  item
30
33
  for item in pd.read_html(StringIO(res.text), header=0, index_col=0)[4]
31
- .iloc[0, :].iloc[0]
34
+ .iloc[0, :]
35
+ .iloc[0]
32
36
  .split(" ")
33
37
  if item != ""
34
38
  ]
35
39
  list_1 = [
36
40
  item
37
41
  for item in pd.read_html(StringIO(res.text), header=0, index_col=0)[4]
38
- .iloc[0, :].iloc[1]
42
+ .iloc[0, :]
43
+ .iloc[1]
39
44
  .split(" ")
40
45
  if item != ""
41
46
  ]
42
47
  list_2 = [
43
48
  item
44
49
  for item in pd.read_html(StringIO(res.text), header=0, index_col=0)[4]
45
- .iloc[0, :].iloc[2]
50
+ .iloc[0, :]
51
+ .iloc[2]
46
52
  .split(" ")
47
53
  if item != ""
48
54
  ]
@@ -63,26 +69,31 @@ def article_ff_crr() -> pd.DataFrame:
63
69
 
64
70
  # second table
65
71
  list_index = (
66
- pd.read_html(StringIO(res.text), header=0, index_col=0)[4].iloc[1, :].index.tolist()
72
+ pd.read_html(StringIO(res.text), header=0, index_col=0)[4]
73
+ .iloc[1, :]
74
+ .index.tolist()
67
75
  )
68
76
  list_0 = [
69
77
  item
70
78
  for item in pd.read_html(StringIO(res.text), header=0, index_col=0)[4]
71
- .iloc[1, :].iloc[0]
79
+ .iloc[1, :]
80
+ .iloc[0]
72
81
  .split(" ")
73
82
  if item != ""
74
83
  ]
75
84
  list_1 = [
76
85
  item
77
86
  for item in pd.read_html(StringIO(res.text), header=0, index_col=0)[4]
78
- .iloc[1, :].iloc[1]
87
+ .iloc[1, :]
88
+ .iloc[1]
79
89
  .split(" ")
80
90
  if item != ""
81
91
  ]
82
92
  list_2 = [
83
93
  item
84
94
  for item in pd.read_html(StringIO(res.text), header=0, index_col=0)[4]
85
- .iloc[1, :].iloc[2]
95
+ .iloc[1, :]
96
+ .iloc[2]
86
97
  .split(" ")
87
98
  if item != ""
88
99
  ]
@@ -6,6 +6,7 @@ Desc: Economic Research from Federal Reserve Bank of St. Louis
6
6
  https://research.stlouisfed.org/econ/mccracken/fred-databases/
7
7
  FRED-MD and FRED-QD are large macroeconomic databases designed for the empirical analysis of “big data.” The datasets of monthly and quarterly observations mimic the coverage of datasets already used in the literature, but they add three appealing features. They are updated in real-time through the FRED database. They are publicly accessible, facilitating the replication of empirical work. And they relieve the researcher of the task of incorporating data changes and revisions (a task accomplished by the data desk at the Federal Reserve Bank of St. Louis).
8
8
  """
9
+
9
10
  import pandas as pd
10
11
 
11
12
 
@@ -17,7 +18,9 @@ def fred_md(date: str = "2020-01") -> pd.DataFrame:
17
18
  :return: Monthly Data
18
19
  :rtype: pandas.DataFrame
19
20
  """
20
- url = f"https://s3.amazonaws.com/files.fred.stlouisfed.org/fred-md/monthly/{date}.csv"
21
+ url = (
22
+ f"https://s3.amazonaws.com/files.fred.stlouisfed.org/fred-md/monthly/{date}.csv"
23
+ )
21
24
  temp_df = pd.read_csv(url)
22
25
  return temp_df
23
26
 
@@ -4,6 +4,7 @@
4
4
  Date: 2024/1/20 20:51
5
5
  Desc: 修大成主页-Risk Lab-Realized Volatility; Oxford-Man Institute of Quantitative Finance Realized Library
6
6
  """
7
+
7
8
  import json
8
9
 
9
10
  import pandas as pd
@@ -64,11 +65,8 @@ def article_oman_rv(symbol: str = "FTSE", index: str = "rk_th2") -> pd.DataFrame
64
65
  res = requests.get(url)
65
66
  soup = BeautifulSoup(res.text, "lxml")
66
67
  soup_text = soup.find("p").get_text()
67
- data_json = json.loads(soup_text[soup_text.find("{"): soup_text.rfind("};") + 1])
68
+ data_json = json.loads(soup_text[soup_text.find("{") : soup_text.rfind("};") + 1])
68
69
  date_list = data_json[f".{symbol}"]["dates"]
69
- title_fore = data_json[f".{symbol}"][index]["name"]
70
- title_last = data_json[f".{symbol}"][index]["measure"]
71
- title_list = title_fore + "-" + title_last
72
70
  temp_df = pd.DataFrame([date_list, data_json[f".{symbol}"][index]["data"]]).T
73
71
  temp_df.index = pd.to_datetime(temp_df.iloc[:, 0], unit="ms")
74
72
  temp_df = temp_df.iloc[:, 1]
@@ -107,10 +105,7 @@ def article_oman_rv_short(symbol: str = "FTSE") -> pd.DataFrame:
107
105
  res = requests.get(url, headers=headers, verify=False)
108
106
  soup = BeautifulSoup(res.text, "lxml")
109
107
  soup_text = soup.find("p").get_text()
110
- data_json = json.loads(soup_text[soup_text.find("{"): soup_text.rfind("}") + 1])
111
- title_fore = data_json[f".{symbol}"]["name"]
112
- title_last = data_json[f".{symbol}"]["measure"]
113
- title_list = title_fore + "-" + title_last
108
+ data_json = json.loads(soup_text[soup_text.find("{") : soup_text.rfind("}") + 1])
114
109
  temp_df = pd.DataFrame(data_json[f".{symbol}"]["data"])
115
110
  temp_df.index = pd.to_datetime(temp_df.iloc[:, 0], unit="ms")
116
111
  temp_df = temp_df.iloc[:, 1]
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/2/18 12:00
4
+ Date: 2025/2/4 23:00
5
5
  Desc: 中国银行保险监督管理委员会-首页-政务信息-行政处罚-银保监分局本级-XXXX行政处罚信息公开表
6
- https://www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=923&itemId=4115&itemUrl=ItemListRightList.html&itemName=%E9%93%B6%E4%BF%9D%E7%9B%91%E5%88%86%E5%B1%80%E6%9C%AC%E7%BA%A7&itemsubPId=931&itemsubPName=%E8%A1%8C%E6%94%BF%E5%A4%84%E7%BD%9A#2
6
+ https://www.nfra.gov.cn/cn/view/pages/ItemList.html?itemPId=923&itemId=4115&itemUrl=ItemListRightList.html&itemName=%E9%93%B6%E4%BF%9D%E7%9B%91%E5%88%86%E5%B1%80%E6%9C%AC%E7%BA%A7&itemsubPId=931&itemsubPName=%E8%A1%8C%E6%94%BF%E5%A4%84%E7%BD%9A#2
7
7
  提取 具体页面 html 页面的 json 接口
8
- https://www.cbirc.gov.cn/cn/static/data/DocInfo/SelectByDocId/data_docId=881446.json
8
+ https://www.nfra.gov.cn/cn/static/data/DocInfo/SelectByDocId/data_docId=881446.json
9
9
  2020 新接口
10
10
  """
11
11
 
@@ -22,7 +22,7 @@ from akshare.bank.cons import cbirc_headers_without_cookie_2020
22
22
  def bank_fjcf_total_num(item: str = "分局本级") -> int:
23
23
  """
24
24
  首页-政务信息-行政处罚-银保监分局本级 总页数
25
- https://www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=923&itemId=4115&itemUrl=ItemListRightList.html&itemName=%E9%93%B6%E4%BF%9D%E7%9B%91%E5%88%86%E5%B1%80%E6%9C%AC%E7%BA%A7&itemsubPId=931
25
+ https://www.nfra.gov.cn/cn/view/pages/ItemList.html?itemPId=923&itemId=4115&itemUrl=ItemListRightList.html&itemName=%E9%93%B6%E4%BF%9D%E7%9B%91%E5%88%86%E5%B1%80%E6%9C%AC%E7%BA%A7&itemsubPId=931
26
26
  :param item: choice of {"机关", "本级", "分局本级"}
27
27
  :type item: str
28
28
  :return: 总页数
@@ -34,7 +34,7 @@ def bank_fjcf_total_num(item: str = "分局本级") -> int:
34
34
  "分局本级": "4115",
35
35
  }
36
36
  cbirc_headers = cbirc_headers_without_cookie_2020.copy()
37
- main_url = "https://www.cbirc.gov.cn/cbircweb/DocInfo/SelectDocByItemIdAndChild"
37
+ main_url = "https://www.nfra.gov.cn/cbircweb/DocInfo/SelectDocByItemIdAndChild"
38
38
  params = {
39
39
  "itemId": item_id_list[item],
40
40
  "pageSize": "18",
@@ -47,7 +47,7 @@ def bank_fjcf_total_num(item: str = "分局本级") -> int:
47
47
  def bank_fjcf_total_page(item: str = "分局本级", begin: int = 1) -> int:
48
48
  """
49
49
  获取首页-政务信息-行政处罚-银保监分局本级的总页数
50
- https://www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=923&itemId=4115&itemUrl=ItemListRightList.html&itemName=%E9%93%B6%E4%BF%9D%E7%9B%91%E5%88%86%E5%B1%80%E6%9C%AC%E7%BA%A7&itemsubPId=931
50
+ https://www.nfra.gov.cn/cn/view/pages/ItemList.html?itemPId=923&itemId=4115&itemUrl=ItemListRightList.html&itemName=%E9%93%B6%E4%BF%9D%E7%9B%91%E5%88%86%E5%B1%80%E6%9C%AC%E7%BA%A7&itemsubPId=931
51
51
  :param item: choice of {"机关", "本级", "分局本级"}
52
52
  :type item: str
53
53
  :param begin: 开始页数
@@ -61,7 +61,7 @@ def bank_fjcf_total_page(item: str = "分局本级", begin: int = 1) -> int:
61
61
  "分局本级": "4115",
62
62
  }
63
63
  cbirc_headers = cbirc_headers_without_cookie_2020.copy()
64
- main_url = "https://www.cbirc.gov.cn/cbircweb/DocInfo/SelectDocByItemIdAndChild"
64
+ main_url = "https://www.nfra.gov.cn/cbircweb/DocInfo/SelectDocByItemIdAndChild"
65
65
  params = {
66
66
  "itemId": item_id_list[item],
67
67
  "pageSize": "18",
@@ -93,7 +93,7 @@ def bank_fjcf_page_url(
93
93
  "分局本级": "4115",
94
94
  }
95
95
  cbirc_headers = cbirc_headers_without_cookie_2020.copy()
96
- main_url = "https://www.cbirc.gov.cn/cbircweb/DocInfo/SelectDocByItemIdAndChild"
96
+ main_url = "https://www.nfra.gov.cn/cbircweb/DocInfo/SelectDocByItemIdAndChild"
97
97
  temp_df = pd.DataFrame()
98
98
  for i_page in tqdm(range(begin, page + begin), leave=False):
99
99
  params = {
@@ -125,7 +125,7 @@ def bank_fjcf_table_detail(
125
125
  id_list = bank_fjcf_page_url(page=page, item=item, begin=begin)["docId"]
126
126
  big_df = pd.DataFrame()
127
127
  for item in id_list:
128
- url = f"https://www.cbirc.gov.cn/cn/static/data/DocInfo/SelectByDocId/data_docId={item}.json"
128
+ url = f"https://www.nfra.gov.cn/cn/static/data/DocInfo/SelectByDocId/data_docId={item}.json"
129
129
  res = requests.get(url)
130
130
  try:
131
131
  table_list = pd.read_html(StringIO(res.json()["data"]["docClob"]))[0]
@@ -148,7 +148,7 @@ def bank_fjcf_table_detail(
148
148
  table_list.insert(2, pd.NA)
149
149
  else:
150
150
  print(
151
- f"{item} 异常,请通过 https://www.cbirc.gov.cn/cn/view/pages/ItemDetail.html?docId={item} 查看"
151
+ f"{item} 异常,请通过 https://www.nfra.gov.cn/cn/view/pages/ItemDetail.html?docId={item} 查看"
152
152
  )
153
153
  continue
154
154
 
@@ -170,7 +170,7 @@ def bank_fjcf_table_detail(
170
170
  big_df.columns = [
171
171
  "行政处罚决定书文号",
172
172
  "姓名",
173
- "单位", # 20200108新增
173
+ "单位", # 20200108 新增
174
174
  "单位名称",
175
175
  "主要负责人姓名",
176
176
  "主要违法违规事实(案由)",
akshare/bank/cons.py CHANGED
@@ -4,17 +4,18 @@
4
4
  Date: 2023/4/3 21:06
5
5
  Desc: 银保监会配置文件
6
6
  """
7
+
7
8
  cbirc_headers_without_cookie_2020 = {
8
9
  "Accept": "*/*",
9
10
  "Accept-Encoding": "gzip, deflate",
10
11
  "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
11
12
  "Cache-Control": "no-cache",
12
13
  "Connection": "keep-alive",
13
- "Host": "www.cbirc.gov.cn",
14
+ "Host": "www.nfra.gov.cn",
14
15
  "Pragma": "no-cache",
15
- "Referer": "http://www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=923&itemId=4115&itemUrl=ItemListRightList.html&itemName=%E9%93%B6%E4%BF%9D%E7%9B%91%E5%88%86%E5%B1%80%E6%9C%AC%E7%BA%A7&itemsubPId=931&itemsubPName=%E8%A1%8C%E6%94%BF%E5%A4%84%E7%BD%9A",
16
+ "Referer": "http://www.nfra.gov.cn/cn/view/pages/ItemList.html?itemPId=923&itemId=4115&itemUrl=ItemListRightList.html&itemName=%E9%93%B6%E4%BF%9D%E7%9B%91%E5%88%86%E5%B1%80%E6%9C%AC%E7%BA%A7&itemsubPId=931&itemsubPName=%E8%A1%8C%E6%94%BF%E5%A4%84%E7%BD%9A",
16
17
  "X-Requested-With": "XMLHttpRequest",
17
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
18
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36",
18
19
  }
19
20
 
20
21
  cbirc_headers_without_cookie_2019 = {
@@ -23,9 +24,9 @@ cbirc_headers_without_cookie_2019 = {
23
24
  "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
24
25
  "Cache-Control": "no-cache",
25
26
  "Connection": "keep-alive",
26
- "Host": "www.cbirc.gov.cn",
27
+ "Host": "www.nfra.gov.cn",
27
28
  "Pragma": "no-cache",
28
- "Referer": "http://www.cbirc.gov.cn/cn/list/9103/910305/ybjjcf/1.html",
29
+ "Referer": "http://www.nfra.gov.cn/cn/list/9103/910305/ybjjcf/1.html",
29
30
  "Upgrade-Insecure-Requests": "1",
30
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
31
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36",
31
32
  }