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
@@ -1,16 +1,17 @@
1
1
  # -*- coding:utf-8 -*-
2
2
  # !/usr/bin/env python
3
3
  """
4
- Date: 2024/2/7 23:00
4
+ Date: 2024/9/21 19:00
5
5
  Desc: 同花顺-数据中心-技术选股
6
6
  https://data.10jqka.com.cn/rank/cxg/
7
7
  """
8
+
8
9
  from io import StringIO
9
10
 
10
11
  import pandas as pd
12
+ import py_mini_racer
11
13
  import requests
12
14
  from bs4 import BeautifulSoup
13
- from py_mini_racer import py_mini_racer
14
15
 
15
16
  from akshare.datasets import get_ths_js
16
17
  from akshare.utils.tqdm import get_tqdm
@@ -25,7 +26,7 @@ def _get_file_content_ths(file: str = "ths.js") -> str:
25
26
  :rtype: str
26
27
  """
27
28
  setting_file_path = get_ths_js(file)
28
- with open(setting_file_path) as f:
29
+ with open(setting_file_path, encoding="utf-8") as f:
29
30
  file_data = f.read()
30
31
  return file_data
31
32
 
@@ -50,30 +51,38 @@ def stock_rank_cxg_ths(symbol: str = "创月新高") -> pd.DataFrame:
50
51
  js_code.eval(js_content)
51
52
  v_code = js_code.call("v")
52
53
  headers = {
53
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
54
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
55
+ "(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
54
56
  "Cookie": f"v={v_code}",
55
57
  }
56
- url = f"http://data.10jqka.com.cn/rank/cxg/board/{symbol_map[symbol]}/field/stockcode/order/asc/page/1/ajax/1/free/1/"
58
+ url = (
59
+ f"http://data.10jqka.com.cn/rank/cxg/board/{symbol_map[symbol]}/field/"
60
+ f"stockcode/order/asc/page/1/ajax/1/free/1/"
61
+ )
57
62
  r = requests.get(url, headers=headers)
58
- soup = BeautifulSoup(r.text, "lxml")
63
+ soup = BeautifulSoup(r.text, features="lxml")
59
64
  try:
60
- total_page = soup.find(
61
- "span", attrs={"class": "page_info"}
62
- ).text.split("/")[1]
63
- except AttributeError as e:
65
+ total_page = soup.find(name="span", attrs={"class": "page_info"}).text.split(
66
+ "/"
67
+ )[1]
68
+ except AttributeError:
64
69
  total_page = 1
65
70
  big_df = pd.DataFrame()
66
71
  tqdm = get_tqdm()
67
72
  for page in tqdm(range(1, int(total_page) + 1), leave=False):
68
73
  v_code = js_code.call("v")
69
74
  headers = {
70
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
75
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
76
+ "(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
71
77
  "Cookie": f"v={v_code}",
72
78
  }
73
- url = f"http://data.10jqka.com.cn/rank/cxg/board/{symbol_map[symbol]}/field/stockcode/order/asc/page/{page}/ajax/1/free/1/"
79
+ url = (
80
+ f"http://data.10jqka.com.cn/rank/cxg/board/{symbol_map[symbol]}/field/stockcode/"
81
+ f"order/asc/page/{page}/ajax/1/free/1/"
82
+ )
74
83
  r = requests.get(url, headers=headers)
75
84
  temp_df = pd.read_html(StringIO(r.text))[0]
76
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
85
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
77
86
  big_df.columns = [
78
87
  "序号",
79
88
  "股票代码",
@@ -87,7 +96,9 @@ def stock_rank_cxg_ths(symbol: str = "创月新高") -> pd.DataFrame:
87
96
  big_df["股票代码"] = big_df["股票代码"].astype(str).str.zfill(6)
88
97
  big_df["涨跌幅"] = big_df["涨跌幅"].str.strip("%")
89
98
  big_df["换手率"] = big_df["换手率"].str.strip("%")
90
- big_df["前期高点日期"] = pd.to_datetime(big_df["前期高点日期"], errors="coerce").dt.date
99
+ big_df["前期高点日期"] = pd.to_datetime(
100
+ big_df["前期高点日期"], errors="coerce"
101
+ ).dt.date
91
102
  big_df["涨跌幅"] = pd.to_numeric(big_df["涨跌幅"], errors="coerce")
92
103
  big_df["换手率"] = pd.to_numeric(big_df["换手率"], errors="coerce")
93
104
  big_df["最新价"] = pd.to_numeric(big_df["最新价"], errors="coerce")
@@ -115,30 +126,38 @@ def stock_rank_cxd_ths(symbol: str = "创月新低") -> pd.DataFrame:
115
126
  js_code.eval(js_content)
116
127
  v_code = js_code.call("v")
117
128
  headers = {
118
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
129
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
130
+ "(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
119
131
  "Cookie": f"v={v_code}",
120
132
  }
121
- url = f"http://data.10jqka.com.cn/rank/cxd/board/{symbol_map[symbol]}/field/stockcode/order/asc/page/1/ajax/1/free/1/"
133
+ url = (
134
+ f"http://data.10jqka.com.cn/rank/cxd/board/{symbol_map[symbol]}/field/"
135
+ f"stockcode/order/asc/page/1/ajax/1/free/1/"
136
+ )
122
137
  r = requests.get(url, headers=headers)
123
- soup = BeautifulSoup(r.text, "lxml")
138
+ soup = BeautifulSoup(r.text, features="lxml")
124
139
  try:
125
- total_page = soup.find(
126
- "span", attrs={"class": "page_info"}
127
- ).text.split("/")[1]
128
- except AttributeError as e:
140
+ total_page = soup.find(name="span", attrs={"class": "page_info"}).text.split(
141
+ "/"
142
+ )[1]
143
+ except AttributeError:
129
144
  total_page = 1
130
145
  big_df = pd.DataFrame()
131
146
  tqdm = get_tqdm()
132
147
  for page in tqdm(range(1, int(total_page) + 1), leave=False):
133
148
  v_code = js_code.call("v")
134
149
  headers = {
135
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
150
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
151
+ "(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
136
152
  "Cookie": f"v={v_code}",
137
153
  }
138
- url = f"http://data.10jqka.com.cn/rank/cxd/board/{symbol_map[symbol]}/field/stockcode/order/asc/page/{page}/ajax/1/free/1/"
154
+ url = (
155
+ f"http://data.10jqka.com.cn/rank/cxd/board/{symbol_map[symbol]}/field/"
156
+ f"stockcode/order/asc/page/{page}/ajax/1/free/1/"
157
+ )
139
158
  r = requests.get(url, headers=headers)
140
159
  temp_df = pd.read_html(StringIO(r.text))[0]
141
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
160
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
142
161
  big_df.columns = [
143
162
  "序号",
144
163
  "股票代码",
@@ -152,7 +171,9 @@ def stock_rank_cxd_ths(symbol: str = "创月新低") -> pd.DataFrame:
152
171
  big_df["股票代码"] = big_df["股票代码"].astype(str).str.zfill(6)
153
172
  big_df["涨跌幅"] = big_df["涨跌幅"].str.strip("%")
154
173
  big_df["换手率"] = big_df["换手率"].str.strip("%")
155
- big_df["前期低点日期"] = pd.to_datetime(big_df["前期低点日期"], errors="coerce").dt.date
174
+ big_df["前期低点日期"] = pd.to_datetime(
175
+ big_df["前期低点日期"], errors="coerce"
176
+ ).dt.date
156
177
  big_df["涨跌幅"] = pd.to_numeric(big_df["涨跌幅"], errors="coerce")
157
178
  big_df["换手率"] = pd.to_numeric(big_df["换手率"], errors="coerce")
158
179
  big_df["最新价"] = pd.to_numeric(big_df["最新价"], errors="coerce")
@@ -172,30 +193,32 @@ def stock_rank_lxsz_ths() -> pd.DataFrame:
172
193
  js_code.eval(js_content)
173
194
  v_code = js_code.call("v")
174
195
  headers = {
175
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
196
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
197
+ "(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
176
198
  "Cookie": f"v={v_code}",
177
199
  }
178
- url = f"http://data.10jqka.com.cn/rank/lxsz/field/lxts/order/desc/page/1/ajax/1/free/1/"
200
+ url = "http://data.10jqka.com.cn/rank/lxsz/field/lxts/order/desc/page/1/ajax/1/free/1/"
179
201
  r = requests.get(url, headers=headers)
180
- soup = BeautifulSoup(r.text, "lxml")
202
+ soup = BeautifulSoup(r.text, features="lxml")
181
203
  try:
182
- total_page = soup.find(
183
- "span", attrs={"class": "page_info"}
184
- ).text.split("/")[1]
185
- except AttributeError as e:
204
+ total_page = soup.find(name="span", attrs={"class": "page_info"}).text.split(
205
+ "/"
206
+ )[1]
207
+ except AttributeError:
186
208
  total_page = 1
187
209
  big_df = pd.DataFrame()
188
210
  tqdm = get_tqdm()
189
211
  for page in tqdm(range(1, int(total_page) + 1), leave=False):
190
212
  v_code = js_code.call("v")
191
213
  headers = {
192
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
214
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
215
+ "(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
193
216
  "Cookie": f"v={v_code}",
194
217
  }
195
218
  url = f"http://data.10jqka.com.cn/rank/lxsz/field/lxts/order/desc/page/{page}/ajax/1/free/1/"
196
219
  r = requests.get(url, headers=headers)
197
220
  temp_df = pd.read_html(StringIO(r.text), converters={"股票代码": str})[0]
198
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
221
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
199
222
  big_df.columns = [
200
223
  "序号",
201
224
  "股票代码",
@@ -231,30 +254,32 @@ def stock_rank_lxxd_ths() -> pd.DataFrame:
231
254
  js_code.eval(js_content)
232
255
  v_code = js_code.call("v")
233
256
  headers = {
234
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
257
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
258
+ "(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
235
259
  "Cookie": f"v={v_code}",
236
260
  }
237
- url = f"http://data.10jqka.com.cn/rank/lxxd/field/lxts/order/desc/page/1/ajax/1/free/1/"
261
+ url = "http://data.10jqka.com.cn/rank/lxxd/field/lxts/order/desc/page/1/ajax/1/free/1/"
238
262
  r = requests.get(url, headers=headers)
239
- soup = BeautifulSoup(r.text, "lxml")
263
+ soup = BeautifulSoup(r.text, features="lxml")
240
264
  try:
241
- total_page = soup.find(
242
- "span", attrs={"class": "page_info"}
243
- ).text.split("/")[1]
244
- except AttributeError as e:
265
+ total_page = soup.find(name="span", attrs={"class": "page_info"}).text.split(
266
+ "/"
267
+ )[1]
268
+ except AttributeError:
245
269
  total_page = 1
246
270
  big_df = pd.DataFrame()
247
271
  tqdm = get_tqdm()
248
272
  for page in tqdm(range(1, int(total_page) + 1), leave=False):
249
273
  v_code = js_code.call("v")
250
274
  headers = {
251
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
275
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
276
+ "(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
252
277
  "Cookie": f"v={v_code}",
253
278
  }
254
279
  url = f"http://data.10jqka.com.cn/rank/lxxd/field/lxts/order/desc/page/{page}/ajax/1/free/1/"
255
280
  r = requests.get(url, headers=headers)
256
281
  temp_df = pd.read_html(StringIO(r.text), converters={"股票代码": str})[0]
257
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
282
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
258
283
  big_df.columns = [
259
284
  "序号",
260
285
  "股票代码",
@@ -290,30 +315,32 @@ def stock_rank_cxfl_ths() -> pd.DataFrame:
290
315
  js_code.eval(js_content)
291
316
  v_code = js_code.call("v")
292
317
  headers = {
293
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
318
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
319
+ "(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
294
320
  "Cookie": f"v={v_code}",
295
321
  }
296
- url = f"http://data.10jqka.com.cn/rank/cxfl/field/count/order/desc/ajax/1/free/1/page/1/free/1/"
322
+ url = "http://data.10jqka.com.cn/rank/cxfl/field/count/order/desc/ajax/1/free/1/page/1/free/1/"
297
323
  r = requests.get(url, headers=headers)
298
- soup = BeautifulSoup(r.text, "lxml")
324
+ soup = BeautifulSoup(r.text, features="lxml")
299
325
  try:
300
- total_page = soup.find(
301
- "span", attrs={"class": "page_info"}
302
- ).text.split("/")[1]
303
- except AttributeError as e:
326
+ total_page = soup.find(name="span", attrs={"class": "page_info"}).text.split(
327
+ "/"
328
+ )[1]
329
+ except AttributeError:
304
330
  total_page = 1
305
331
  big_df = pd.DataFrame()
306
332
  tqdm = get_tqdm()
307
333
  for page in tqdm(range(1, int(total_page) + 1), leave=False):
308
334
  v_code = js_code.call("v")
309
335
  headers = {
310
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
336
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
337
+ "(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
311
338
  "Cookie": f"v={v_code}",
312
339
  }
313
340
  url = f"http://data.10jqka.com.cn/rank/cxfl/field/count/order/desc/ajax/1/free/1/page/{page}/free/1/"
314
341
  r = requests.get(url, headers=headers)
315
342
  temp_df = pd.read_html(StringIO(r.text), converters={"股票代码": str})[0]
316
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
343
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
317
344
  big_df.columns = [
318
345
  "序号",
319
346
  "股票代码",
@@ -348,30 +375,32 @@ def stock_rank_cxsl_ths() -> pd.DataFrame:
348
375
  js_code.eval(js_content)
349
376
  v_code = js_code.call("v")
350
377
  headers = {
351
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
378
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
379
+ "(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
352
380
  "Cookie": f"v={v_code}",
353
381
  }
354
- url = f"http://data.10jqka.com.cn/rank/cxsl/field/count/order/desc/ajax/1/free/1/page/1/free/1/"
382
+ url = "http://data.10jqka.com.cn/rank/cxsl/field/count/order/desc/ajax/1/free/1/page/1/free/1/"
355
383
  r = requests.get(url, headers=headers)
356
- soup = BeautifulSoup(r.text, "lxml")
384
+ soup = BeautifulSoup(r.text, features="lxml")
357
385
  try:
358
- total_page = soup.find(
359
- "span", attrs={"class": "page_info"}
360
- ).text.split("/")[1]
361
- except AttributeError as e:
386
+ total_page = soup.find(name="span", attrs={"class": "page_info"}).text.split(
387
+ "/"
388
+ )[1]
389
+ except AttributeError:
362
390
  total_page = 1
363
391
  big_df = pd.DataFrame()
364
392
  tqdm = get_tqdm()
365
393
  for page in tqdm(range(1, int(total_page) + 1), leave=False):
366
394
  v_code = js_code.call("v")
367
395
  headers = {
368
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
396
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
397
+ "(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
369
398
  "Cookie": f"v={v_code}",
370
399
  }
371
400
  url = f"http://data.10jqka.com.cn/rank/cxsl/field/count/order/desc/ajax/1/free/1/page/{page}/free/1/"
372
401
  r = requests.get(url, headers=headers)
373
402
  temp_df = pd.read_html(StringIO(r.text), converters={"股票代码": str})[0]
374
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
403
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
375
404
  big_df.columns = [
376
405
  "序号",
377
406
  "股票代码",
@@ -418,30 +447,35 @@ def stock_rank_xstp_ths(symbol: str = "500日均线") -> pd.DataFrame:
418
447
  js_code.eval(js_content)
419
448
  v_code = js_code.call("v")
420
449
  headers = {
421
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
450
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
451
+ "(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
422
452
  "Cookie": f"v={v_code}",
423
453
  }
424
454
  url = f"http://data.10jqka.com.cn/rank/xstp/board/{symbol_map[symbol]}/order/asc/ajax/1/free/1/page/1/free/1/"
425
455
  r = requests.get(url, headers=headers)
426
- soup = BeautifulSoup(r.text, "lxml")
456
+ soup = BeautifulSoup(r.text, features="lxml")
427
457
  try:
428
- total_page = soup.find(
429
- "span", attrs={"class": "page_info"}
430
- ).text.split("/")[1]
431
- except AttributeError as e:
458
+ total_page = soup.find(name="span", attrs={"class": "page_info"}).text.split(
459
+ "/"
460
+ )[1]
461
+ except AttributeError:
432
462
  total_page = 1
433
463
  big_df = pd.DataFrame()
434
464
  tqdm = get_tqdm()
435
465
  for page in tqdm(range(1, int(total_page) + 1), leave=False):
436
466
  v_code = js_code.call("v")
437
467
  headers = {
438
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
468
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
469
+ "(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
439
470
  "Cookie": f"v={v_code}",
440
471
  }
441
- url = f"http://data.10jqka.com.cn/rank/xstp/board/{symbol_map[symbol]}/order/asc/ajax/1/free/1/page/{page}/free/1/"
472
+ url = (
473
+ f"http://data.10jqka.com.cn/rank/xstp/board/{symbol_map[symbol]}/order/"
474
+ f"asc/ajax/1/free/1/page/{page}/free/1/"
475
+ )
442
476
  r = requests.get(url, headers=headers)
443
477
  temp_df = pd.read_html(StringIO(r.text), converters={"股票代码": str})[0]
444
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
478
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
445
479
  big_df.columns = [
446
480
  "序号",
447
481
  "股票代码",
@@ -485,30 +519,35 @@ def stock_rank_xxtp_ths(symbol: str = "500日均线") -> pd.DataFrame:
485
519
  js_code.eval(js_content)
486
520
  v_code = js_code.call("v")
487
521
  headers = {
488
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
522
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
523
+ "(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
489
524
  "Cookie": f"v={v_code}",
490
525
  }
491
526
  url = f"http://data.10jqka.com.cn/rank/xxtp/board/{symbol_map[symbol]}/order/asc/ajax/1/free/1/page/1/free/1/"
492
527
  r = requests.get(url, headers=headers)
493
- soup = BeautifulSoup(r.text, "lxml")
528
+ soup = BeautifulSoup(r.text, features="lxml")
494
529
  try:
495
- total_page = soup.find(
496
- "span", attrs={"class": "page_info"}
497
- ).text.split("/")[1]
498
- except AttributeError as e:
530
+ total_page = soup.find(name="span", attrs={"class": "page_info"}).text.split(
531
+ "/"
532
+ )[1]
533
+ except AttributeError:
499
534
  total_page = 1
500
535
  big_df = pd.DataFrame()
501
536
  tqdm = get_tqdm()
502
537
  for page in tqdm(range(1, int(total_page) + 1), leave=False):
503
538
  v_code = js_code.call("v")
504
539
  headers = {
505
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
540
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
541
+ "(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
506
542
  "Cookie": f"v={v_code}",
507
543
  }
508
- url = f"http://data.10jqka.com.cn/rank/xxtp/board/{symbol_map[symbol]}/order/asc/ajax/1/free/1/page/{page}/free/1/"
544
+ url = (
545
+ f"http://data.10jqka.com.cn/rank/xxtp/board/{symbol_map[symbol]}/order/"
546
+ f"asc/ajax/1/free/1/page/{page}/free/1/"
547
+ )
509
548
  r = requests.get(url, headers=headers)
510
549
  temp_df = pd.read_html(StringIO(r.text), converters={"股票代码": str})[0]
511
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
550
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
512
551
  big_df.columns = [
513
552
  "序号",
514
553
  "股票代码",
@@ -540,30 +579,32 @@ def stock_rank_ljqs_ths() -> pd.DataFrame:
540
579
  js_code.eval(js_content)
541
580
  v_code = js_code.call("v")
542
581
  headers = {
543
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
582
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
583
+ "(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
544
584
  "Cookie": f"v={v_code}",
545
585
  }
546
- url = f"http://data.10jqka.com.cn/rank/ljqs/field/count/order/desc/ajax/1/free/1/page/1/free/1/"
586
+ url = "http://data.10jqka.com.cn/rank/ljqs/field/count/order/desc/ajax/1/free/1/page/1/free/1/"
547
587
  r = requests.get(url, headers=headers)
548
- soup = BeautifulSoup(r.text, "lxml")
588
+ soup = BeautifulSoup(r.text, features="lxml")
549
589
  try:
550
- total_page = soup.find(
551
- "span", attrs={"class": "page_info"}
552
- ).text.split("/")[1]
553
- except AttributeError as e:
590
+ total_page = soup.find(name="span", attrs={"class": "page_info"}).text.split(
591
+ "/"
592
+ )[1]
593
+ except AttributeError:
554
594
  total_page = 1
555
595
  big_df = pd.DataFrame()
556
596
  tqdm = get_tqdm()
557
597
  for page in tqdm(range(1, int(total_page) + 1), leave=False):
558
598
  v_code = js_code.call("v")
559
599
  headers = {
560
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
600
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
601
+ "(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
561
602
  "Cookie": f"v={v_code}",
562
603
  }
563
604
  url = f"http://data.10jqka.com.cn/rank/ljqs/field/count/order/desc/ajax/1/free/1/page/{page}/free/1/"
564
605
  r = requests.get(url, headers=headers)
565
606
  temp_df = pd.read_html(StringIO(r.text), converters={"股票代码": str})[0]
566
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
607
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
567
608
  big_df.columns = [
568
609
  "序号",
569
610
  "股票代码",
@@ -596,30 +637,32 @@ def stock_rank_ljqd_ths() -> pd.DataFrame:
596
637
  js_code.eval(js_content)
597
638
  v_code = js_code.call("v")
598
639
  headers = {
599
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
640
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
641
+ "(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
600
642
  "Cookie": f"v={v_code}",
601
643
  }
602
- url = f"http://data.10jqka.com.cn/rank/ljqd/field/count/order/desc/ajax/1/free/1/page/1/free/1/"
644
+ url = "http://data.10jqka.com.cn/rank/ljqd/field/count/order/desc/ajax/1/free/1/page/1/free/1/"
603
645
  r = requests.get(url, headers=headers)
604
- soup = BeautifulSoup(r.text, "lxml")
646
+ soup = BeautifulSoup(r.text, features="lxml")
605
647
  try:
606
- total_page = soup.find(
607
- "span", attrs={"class": "page_info"}
608
- ).text.split("/")[1]
609
- except AttributeError as e:
648
+ total_page = soup.find(name="span", attrs={"class": "page_info"}).text.split(
649
+ "/"
650
+ )[1]
651
+ except AttributeError:
610
652
  total_page = 1
611
653
  big_df = pd.DataFrame()
612
654
  tqdm = get_tqdm()
613
655
  for page in tqdm(range(1, int(total_page) + 1), leave=False):
614
656
  v_code = js_code.call("v")
615
657
  headers = {
616
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
658
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
659
+ "(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
617
660
  "Cookie": f"v={v_code}",
618
661
  }
619
662
  url = f"http://data.10jqka.com.cn/rank/ljqd/field/count/order/desc/ajax/1/free/1/page/{page}/free/1/"
620
663
  r = requests.get(url, headers=headers)
621
664
  temp_df = pd.read_html(StringIO(r.text), converters={"股票代码": str})[0]
622
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
665
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
623
666
  big_df.columns = [
624
667
  "序号",
625
668
  "股票代码",
@@ -650,32 +693,17 @@ def stock_rank_xzjp_ths() -> pd.DataFrame:
650
693
  js_code = py_mini_racer.MiniRacer()
651
694
  js_content = _get_file_content_ths("ths.js")
652
695
  js_code.eval(js_content)
696
+ big_df = pd.DataFrame()
653
697
  v_code = js_code.call("v")
654
698
  headers = {
655
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
699
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
700
+ "(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
656
701
  "Cookie": f"v={v_code}",
657
702
  }
658
- url = f"http://data.10jqka.com.cn/ajax/xzjp/field/DECLAREDATE/order/desc/ajax/1/free/1/"
703
+ url = "http://data.10jqka.com.cn/ajax/xzjp/field/DECLAREDATE/order/desc/ajax/1/free/1/"
659
704
  r = requests.get(url, headers=headers)
660
- soup = BeautifulSoup(r.text, "lxml")
661
- try:
662
- total_page = soup.find(
663
- "span", attrs={"class": "page_info"}
664
- ).text.split("/")[1]
665
- except AttributeError as e:
666
- total_page = 1
667
- big_df = pd.DataFrame()
668
- tqdm = get_tqdm()
669
- for page in tqdm(range(1, int(total_page) + 1), leave=False):
670
- v_code = js_code.call("v")
671
- headers = {
672
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
673
- "Cookie": f"v={v_code}",
674
- }
675
- url = f"http://data.10jqka.com.cn/ajax/xzjp/field/DECLAREDATE/order/desc/ajax/1/free/1/"
676
- r = requests.get(url, headers=headers)
677
- temp_df = pd.read_html(StringIO(r.text), converters={"股票代码": str})[0]
678
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
705
+ temp_df = pd.read_html(StringIO(r.text), converters={"股票代码": str})[0]
706
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
679
707
  big_df.columns = [
680
708
  "序号",
681
709
  "举牌公告日",
@@ -692,10 +720,14 @@ def stock_rank_xzjp_ths() -> pd.DataFrame:
692
720
  "历史数据",
693
721
  ]
694
722
  big_df["涨跌幅"] = big_df["涨跌幅"].astype(str).str.zfill(6)
695
- big_df["增持数量占总股本比例"] = big_df["增持数量占总股本比例"].astype(str).str.strip("%")
723
+ big_df["增持数量占总股本比例"] = (
724
+ big_df["增持数量占总股本比例"].astype(str).str.strip("%")
725
+ )
696
726
  big_df["变动后持股比例"] = big_df["变动后持股比例"].astype(str).str.strip("%")
697
727
  big_df["涨跌幅"] = pd.to_numeric(big_df["涨跌幅"], errors="coerce")
698
- big_df["增持数量占总股本比例"] = pd.to_numeric(big_df["增持数量占总股本比例"], errors="coerce")
728
+ big_df["增持数量占总股本比例"] = pd.to_numeric(
729
+ big_df["增持数量占总股本比例"], errors="coerce"
730
+ )
699
731
  big_df["变动后持股比例"] = pd.to_numeric(big_df["变动后持股比例"], errors="coerce")
700
732
  big_df["举牌公告日"] = pd.to_datetime(big_df["举牌公告日"], errors="coerce").dt.date
701
733
  big_df["股票代码"] = big_df["股票代码"].astype(str).str.zfill(6)
@@ -1,19 +1,20 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/3/4 18:00
4
+ Date: 2024/4/29 15:00
5
5
  Desc: 东方财富网-数据中心-特色数据-停复牌信息
6
6
  https://data.eastmoney.com/tfpxx/
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
 
11
12
 
12
- def stock_tfp_em(date: str = "20221109") -> pd.DataFrame:
13
+ def stock_tfp_em(date: str = "20240426") -> pd.DataFrame:
13
14
  """
14
15
  东方财富网-数据中心-特色数据-停复牌信息
15
16
  https://data.eastmoney.com/tfpxx/
16
- :param date: specific date as "2020-03-19"
17
+ :param date: 查询参数 "20240426"
17
18
  :type date: str
18
19
  :return: 停复牌信息表
19
20
  :rtype: pandas.DataFrame
@@ -32,10 +33,17 @@ def stock_tfp_em(date: str = "20221109") -> pd.DataFrame:
32
33
  }
33
34
  r = requests.get(url, params=params)
34
35
  data_json = r.json()
35
- temp_df = pd.DataFrame(data_json["result"]["data"])
36
- temp_df.reset_index(inplace=True)
37
- temp_df["index"] = temp_df.index + 1
38
- temp_df.columns = [
36
+ total_page = data_json["result"]["pages"]
37
+ big_df = pd.DataFrame()
38
+ for page in range(1, total_page + 1):
39
+ params.update({"pageNumber": page})
40
+ r = requests.get(url, params=params)
41
+ data_json = r.json()
42
+ temp_df = pd.DataFrame(data_json["result"]["data"])
43
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
44
+
45
+ big_df.reset_index(inplace=True)
46
+ big_df.columns = [
39
47
  "序号",
40
48
  "代码",
41
49
  "名称",
@@ -48,16 +56,31 @@ def stock_tfp_em(date: str = "20221109") -> pd.DataFrame:
48
56
  "预计复牌时间",
49
57
  "-",
50
58
  "-",
59
+ "-",
51
60
  ]
52
- temp_df = temp_df[
53
- ["序号", "代码", "名称", "停牌时间", "停牌截止时间", "停牌期限", "停牌原因", "所属市场", "预计复牌时间"]
61
+ big_df = big_df[
62
+ [
63
+ "序号",
64
+ "代码",
65
+ "名称",
66
+ "停牌时间",
67
+ "停牌截止时间",
68
+ "停牌期限",
69
+ "停牌原因",
70
+ "所属市场",
71
+ "预计复牌时间",
72
+ ]
54
73
  ]
55
- temp_df["停牌时间"] = pd.to_datetime(temp_df["停牌时间"]).dt.date
56
- temp_df["停牌截止时间"] = pd.to_datetime(temp_df["停牌截止时间"]).dt.date
57
- temp_df["预计复牌时间"] = pd.to_datetime(temp_df["预计复牌时间"]).dt.date
58
- return temp_df
74
+ big_df["停牌时间"] = pd.to_datetime(big_df["停牌时间"], errors="coerce").dt.date
75
+ big_df["停牌截止时间"] = pd.to_datetime(
76
+ big_df["停牌截止时间"], errors="coerce"
77
+ ).dt.date
78
+ big_df["预计复牌时间"] = pd.to_datetime(
79
+ big_df["预计复牌时间"], errors="coerce"
80
+ ).dt.date
81
+ return big_df
59
82
 
60
83
 
61
84
  if __name__ == "__main__":
62
- stock_tfp_em_df = stock_tfp_em(date="20220523")
85
+ stock_tfp_em_df = stock_tfp_em(date="20240426")
63
86
  print(stock_tfp_em_df)