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,21 +1,23 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/1/8 17:20
5
- Desc: 同花顺-板块-行业板块
4
+ Date: 2025/2/28 13:20
5
+ Desc: 同花顺-板块-同花顺行业
6
6
  https://q.10jqka.com.cn/thshy/
7
7
  """
8
+
8
9
  from datetime import datetime
10
+ from functools import lru_cache
9
11
  from io import StringIO
10
12
 
11
13
  import pandas as pd
12
14
  import requests
13
15
  from bs4 import BeautifulSoup
14
- from py_mini_racer import py_mini_racer
15
- from tqdm import tqdm
16
+ import py_mini_racer
16
17
 
17
18
  from akshare.datasets import get_ths_js
18
19
  from akshare.utils import demjson
20
+ from akshare.utils.tqdm import get_tqdm
19
21
 
20
22
 
21
23
  def _get_file_content_ths(file: str = "ths.js") -> str:
@@ -27,11 +29,42 @@ def _get_file_content_ths(file: str = "ths.js") -> str:
27
29
  :rtype: str
28
30
  """
29
31
  setting_file_path = get_ths_js(file)
30
- with open(setting_file_path) as f:
32
+ with open(setting_file_path, encoding="utf-8") as f:
31
33
  file_data = f.read()
32
34
  return file_data
33
35
 
34
36
 
37
+ @lru_cache()
38
+ def _get_stock_board_industry_name_ths() -> dict:
39
+ """
40
+ 获取同花顺行业代码和名称字典
41
+ :return: 获取同花顺行业代码和名称字典
42
+ :rtype: dict
43
+ """
44
+ js_code = py_mini_racer.MiniRacer()
45
+ js_content = _get_file_content_ths("ths.js")
46
+ js_code.eval(js_content)
47
+ v_code = js_code.call("v")
48
+ headers = {
49
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
50
+ "Chrome/89.0.4389.90 Safari/537.36",
51
+ "Cookie": f"v={v_code}",
52
+ }
53
+ url = "https://q.10jqka.com.cn/thshy/detail/code/881272/"
54
+ r = requests.get(url, headers=headers)
55
+ soup = BeautifulSoup(r.text, features="lxml")
56
+ code_list = [
57
+ item["href"].split("/")[-2]
58
+ for item in soup.find(name="div", attrs={"class": "cate_inner"}).find_all("a")
59
+ ]
60
+ name_list = [
61
+ item.text
62
+ for item in soup.find(name="div", attrs={"class": "cate_inner"}).find_all("a")
63
+ ]
64
+ name_code_map = dict(zip(name_list, code_list))
65
+ return name_code_map
66
+
67
+
35
68
  def stock_board_industry_name_ths() -> pd.DataFrame:
36
69
  """
37
70
  同花顺-板块-行业板块-行业
@@ -39,317 +72,10 @@ def stock_board_industry_name_ths() -> pd.DataFrame:
39
72
  :return: 所有行业板块的名称和链接
40
73
  :rtype: pandas.DataFrame
41
74
  """
42
- code_name_ths_map = {
43
- "881101": "种植业与林业",
44
- "881102": "养殖业",
45
- "881103": "农产品加工",
46
- "881104": "农业服务",
47
- "881105": "煤炭开采加工",
48
- "881107": "油气开采及服务",
49
- "881108": "化学原料",
50
- "881109": "化学制品",
51
- "881110": "化工合成材料",
52
- "881112": "钢铁",
53
- "881114": "金属新材料",
54
- "881115": "建筑材料",
55
- "881116": "建筑装饰",
56
- "881117": "通用设备",
57
- "881118": "专用设备",
58
- "881119": "仪器仪表",
59
- "881120": "电力设备",
60
- "881121": "半导体及元件",
61
- "881122": "光学光电子",
62
- "881123": "其他电子",
63
- "881124": "消费电子",
64
- "881125": "汽车整车",
65
- "881126": "汽车零部件",
66
- "881127": "非汽车交运",
67
- "881128": "汽车服务",
68
- "881129": "通信设备",
69
- "881130": "计算机设备",
70
- "881131": "白色家电",
71
- "881132": "黑色家电",
72
- "881133": "饮料制造",
73
- "881134": "食品加工制造",
74
- "881135": "纺织制造",
75
- "881136": "服装家纺",
76
- "881137": "造纸",
77
- "881138": "包装印刷",
78
- "881139": "家用轻工",
79
- "881140": "化学制药",
80
- "881141": "中药",
81
- "881142": "生物制品",
82
- "881143": "医药商业",
83
- "881144": "医疗器械",
84
- "881145": "电力",
85
- "881146": "燃气",
86
- "881148": "港口航运",
87
- "881149": "公路铁路运输",
88
- "881151": "机场航运",
89
- "881152": "物流",
90
- "881153": "房地产开发",
91
- "881155": "银行",
92
- "881156": "保险及其他",
93
- "881157": "证券",
94
- "881158": "零售",
95
- "881159": "贸易",
96
- "881160": "景点及旅游",
97
- "881161": "酒店及餐饮",
98
- "881162": "通信服务",
99
- "881163": "计算机应用",
100
- "881164": "传媒",
101
- "881165": "综合",
102
- "881166": "国防军工",
103
- "881167": "非金属材料",
104
- "881168": "工业金属",
105
- "881169": "贵金属",
106
- "881170": "小金属",
107
- "881171": "自动化设备",
108
- "881172": "电子化学品",
109
- "881173": "小家电",
110
- "881174": "厨卫电器",
111
- "881175": "医疗服务",
112
- "881176": "房地产服务",
113
- "881177": "互联网电商",
114
- "881178": "教育",
115
- "881179": "其他社会服务",
116
- "881180": "石油加工贸易",
117
- "881181": "环保",
118
- "881182": "美容护理",
119
- "884001": "种子生产",
120
- "884002": "粮食种植",
121
- "884003": "其他种植业",
122
- "884004": "林业",
123
- "884005": "海洋捕捞",
124
- "884006": "水产养殖",
125
- "884007": "畜禽养殖",
126
- "884008": "饲料",
127
- "884009": "果蔬加工",
128
- "884010": "粮油加工",
129
- "884011": "其他农产品加工",
130
- "884012": "农业综合",
131
- "884013": "动物保健",
132
- "884014": "煤炭开采",
133
- "884015": "焦炭加工",
134
- "884016": "油气开采",
135
- "884018": "油服工程",
136
- "884020": "石油加工",
137
- "884021": "油品石化贸易",
138
- "884022": "纯碱",
139
- "884023": "氯碱",
140
- "884024": "无机盐",
141
- "884025": "其他化学原料",
142
- "884026": "氮肥",
143
- "884027": "磷肥及磷化工",
144
- "884028": "农药",
145
- "884030": "涂料油墨",
146
- "884031": "钾肥",
147
- "884032": "民爆用品",
148
- "884033": "纺织化学用品",
149
- "884034": "其他化学制品",
150
- "884035": "复合肥",
151
- "884036": "氟化工",
152
- "884039": "聚氨酯",
153
- "884041": "涤纶",
154
- "884043": "粘胶",
155
- "884044": "其他纤维",
156
- "884045": "氨纶",
157
- "884046": "其他塑料制品",
158
- "884048": "改性塑料",
159
- "884050": "其他橡胶制品",
160
- "884051": "炭黑",
161
- "884052": "普钢",
162
- "884053": "铝",
163
- "884054": "铜",
164
- "884055": "铅锌",
165
- "884056": "其他金属新材料",
166
- "884057": "磁性材料",
167
- "884058": "非金属材料Ⅲ",
168
- "884059": "玻璃玻纤",
169
- "884060": "水泥",
170
- "884062": "其他建材",
171
- "884063": "耐火材料",
172
- "884064": "管材",
173
- "884065": "装饰园林",
174
- "884066": "房屋建设",
175
- "884067": "基础建设",
176
- "884068": "专业工程",
177
- "884069": "机床工具",
178
- "884071": "磨具磨料",
179
- "884073": "制冷空调设备",
180
- "884074": "其他通用设备",
181
- "884075": "金属制品",
182
- "884076": "纺织服装设备",
183
- "884077": "工程机械",
184
- "884078": "农用机械",
185
- "884080": "能源及重型设备",
186
- "884081": "印刷包装机械",
187
- "884082": "其他专用设备",
188
- "884083": "楼宇设备",
189
- "884084": "环保设备",
190
- "884085": "电机",
191
- "884086": "电气自控设备",
192
- "884088": "输变电设备",
193
- "884089": "线缆部件及其他",
194
- "884090": "分立器件",
195
- "884091": "半导体材料",
196
- "884092": "印制电路板",
197
- "884093": "被动元件",
198
- "884094": "面板",
199
- "884095": "LED",
200
- "884096": "光学元件",
201
- "884098": "消费电子零部件及组装",
202
- "884099": "乘用车",
203
- "884100": "商用载货车",
204
- "884101": "商用载客车",
205
- "884105": "轨交设备",
206
- "884106": "其他交运设备",
207
- "884107": "汽车服务Ⅲ",
208
- "884112": "冰洗",
209
- "884113": "空调",
210
- "884115": "小家电Ⅲ",
211
- "884116": "其他白色家电",
212
- "884117": "彩电",
213
- "884118": "其他黑色家电",
214
- "884119": "其他酒类",
215
- "884120": "软饮料",
216
- "884123": "肉制品",
217
- "884124": "调味发酵品",
218
- "884125": "乳品",
219
- "884126": "其他食品",
220
- "884128": "棉纺",
221
- "884130": "印染",
222
- "884131": "辅料",
223
- "884132": "其他纺织",
224
- "884136": "鞋帽及其他",
225
- "884137": "家纺",
226
- "884139": "家具",
227
- "884140": "其他家用轻工",
228
- "884141": "饰品",
229
- "884142": "文娱用品",
230
- "884143": "原料药",
231
- "884144": "化学制剂",
232
- "884145": "医疗设备",
233
- "884146": "火电",
234
- "884147": "水电",
235
- "884149": "热力",
236
- "884150": "新能源发电",
237
- "884152": "燃气Ⅲ",
238
- "884153": "港口",
239
- "884154": "高速公路",
240
- "884155": "铁路运输",
241
- "884156": "机场",
242
- "884157": "航空运输",
243
- "884158": "多元金融",
244
- "884159": "保险",
245
- "884160": "百货零售",
246
- "884161": "专业连锁",
247
- "884162": "商业物业经营",
248
- "884163": "人工景点",
249
- "884164": "自然景点",
250
- "884165": "旅游综合",
251
- "884167": "酒店",
252
- "884168": "餐饮",
253
- "884172": "有线电视网络",
254
- "884173": "通信服务Ⅲ",
255
- "884174": "软件开发",
256
- "884176": "出版",
257
- "884177": "影视院线",
258
- "884178": "广告营销",
259
- "884179": "其他传媒",
260
- "884180": "航天装备",
261
- "884181": "航空装备",
262
- "884182": "地面兵装",
263
- "884183": "航海装备",
264
- "884184": "特钢",
265
- "884185": "贵金属Ⅲ",
266
- "884186": "其他小金属",
267
- "884188": "白酒",
268
- "884189": "啤酒",
269
- "884191": "航运",
270
- "884192": "仪器仪表Ⅲ",
271
- "884193": "其他电子Ⅲ",
272
- "884194": "汽车零部件Ⅲ",
273
- "884195": "造纸Ⅲ",
274
- "884197": "中药Ⅲ",
275
- "884199": "医药商业Ⅲ",
276
- "884200": "公交",
277
- "884201": "物流Ⅲ",
278
- "884202": "住宅开发",
279
- "884203": "产业地产",
280
- "884205": "证券Ⅲ",
281
- "884206": "贸易Ⅲ",
282
- "884207": "计算机设备Ⅲ",
283
- "884208": "综合Ⅲ",
284
- "884209": "钛白粉",
285
- "884210": "食品及饲料添加剂",
286
- "884211": "有机硅",
287
- "884212": "合成树脂",
288
- "884213": "膜材料",
289
- "884214": "冶钢原料",
290
- "884215": "稀土",
291
- "884216": "能源金属",
292
- "884217": "工程咨询服务",
293
- "884218": "机器人",
294
- "884219": "工控设备",
295
- "884220": "激光设备",
296
- "884221": "其他自动化设备",
297
- "884222": "光伏设备",
298
- "884223": "风电设备",
299
- "884224": "电池",
300
- "884225": "其他电源设备",
301
- "884226": "集成电路设计",
302
- "884227": "集成电路制造",
303
- "884228": "集成电路封测",
304
- "884229": "半导体设备",
305
- "884230": "品牌消费电子",
306
- "884231": "电子化学品Ⅲ",
307
- "884232": "厨卫电器Ⅲ",
308
- "884233": "休闲食品",
309
- "884234": "服装",
310
- "884235": "印刷",
311
- "884236": "包装",
312
- "884237": "瓷砖地板",
313
- "884238": "血液制品",
314
- "884239": "疫苗",
315
- "884240": "其他生物制品",
316
- "884242": "医疗耗材",
317
- "884243": "体外诊断",
318
- "884244": "医疗研发外包",
319
- "884245": "其他医疗服务",
320
- "884246": "电能综合服务",
321
- "884247": "商业地产",
322
- "884248": "房地产服务Ⅲ",
323
- "884249": "国有大型银行",
324
- "884250": "股份制银行",
325
- "884251": "城商行",
326
- "884252": "农商行",
327
- "884253": "其他银行",
328
- "884254": "旅游零售",
329
- "884255": "互联网电商Ⅲ",
330
- "884256": "教育Ⅲ",
331
- "884257": "专业服务",
332
- "884258": "体育",
333
- "884259": "其他社会服务Ⅲ",
334
- "884260": "游戏",
335
- "884261": "数字媒体",
336
- "884262": "通信网络设备及器件",
337
- "884263": "通信线缆及配套",
338
- "884264": "通信终端及配件",
339
- "884265": "其他通信设备",
340
- "884266": "军工电子",
341
- "884267": "大气治理",
342
- "884268": "水务及水治理",
343
- "884269": "固废治理",
344
- "884270": "综合环境治理",
345
- "884271": "个护用品",
346
- "884272": "化妆品",
347
- "884273": "医疗美容",
348
- "884274": "IT服务",
349
- }
75
+ code_name_ths_map = _get_stock_board_industry_name_ths()
350
76
  temp_df = pd.DataFrame.from_dict(code_name_ths_map, orient="index")
351
77
  temp_df.reset_index(inplace=True)
352
- temp_df.columns = ["code", "name"]
78
+ temp_df.columns = ["name", "code"]
353
79
  temp_df = temp_df[
354
80
  [
355
81
  "name",
@@ -359,62 +85,7 @@ def stock_board_industry_name_ths() -> pd.DataFrame:
359
85
  return temp_df
360
86
 
361
87
 
362
- def stock_board_industry_cons_ths(symbol: str = "半导体及元件") -> pd.DataFrame:
363
- """
364
- 同花顺-板块-行业板块-成份股
365
- https://q.10jqka.com.cn/thshy/detail/code/881121/
366
- :param symbol: 板块名称
367
- :type symbol: str
368
- :return: 成份股
369
- :rtype: pandas.DataFrame
370
- """
371
- stock_board_ths_map_df = stock_board_industry_name_ths()
372
- symbol = stock_board_ths_map_df[stock_board_ths_map_df["name"] == symbol][
373
- "code"
374
- ].values[0]
375
- js_code = py_mini_racer.MiniRacer()
376
- js_content = _get_file_content_ths("ths.js")
377
- js_code.eval(js_content)
378
- v_code = js_code.call("v")
379
- headers = {
380
- "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",
381
- "Cookie": f"v={v_code}",
382
- }
383
- url = f"http://q.10jqka.com.cn/thshy/detail/field/199112/order/desc/page/1/ajax/1/code/{symbol}"
384
- r = requests.get(url, headers=headers)
385
- soup = BeautifulSoup(r.text, "lxml")
386
- try:
387
- page_num = int(soup.find_all("a", attrs={"class": "changePage"})[-1]["page"])
388
- except IndexError as e:
389
- page_num = 1
390
- big_df = pd.DataFrame()
391
- for page in tqdm(range(1, page_num + 1), leave=False):
392
- v_code = js_code.call("v")
393
- headers = {
394
- "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",
395
- "Cookie": f"v={v_code}",
396
- }
397
- url = f"http://q.10jqka.com.cn/thshy/detail/field/199112/order/desc/page/{page}/ajax/1/code/{symbol}"
398
- r = requests.get(url, headers=headers)
399
- temp_df = pd.read_html(StringIO(r.text))[0]
400
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
401
-
402
- big_df.rename(
403
- {
404
- "涨跌幅(%)": "涨跌幅",
405
- "涨速(%)": "涨速",
406
- "换手(%)": "换手",
407
- "振幅(%)": "振幅",
408
- },
409
- inplace=True,
410
- axis=1,
411
- )
412
- del big_df["加自选"]
413
- big_df["代码"] = big_df["代码"].astype(str).str.zfill(6)
414
- return big_df
415
-
416
-
417
- def stock_board_industry_info_ths(symbol: str = "半导体及元件") -> pd.DataFrame:
88
+ def stock_board_industry_info_ths(symbol: str = "半导体") -> pd.DataFrame:
418
89
  """
419
90
  同花顺-板块-行业板块-板块简介
420
91
  http://q.10jqka.com.cn/gn/detail/code/301558/
@@ -429,17 +100,18 @@ def stock_board_industry_info_ths(symbol: str = "半导体及元件") -> pd.Data
429
100
  ].values[0]
430
101
  url = f"http://q.10jqka.com.cn/thshy/detail/code/{symbol_code}/"
431
102
  headers = {
432
- "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",
103
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
104
+ "Chrome/89.0.4389.90 Safari/537.36",
433
105
  }
434
106
  r = requests.get(url, headers=headers)
435
- soup = BeautifulSoup(r.text, "lxml")
107
+ soup = BeautifulSoup(r.text, features="lxml")
436
108
  name_list = [
437
109
  item.text.strip()
438
- for item in soup.find("div", attrs={"class": "board-infos"}).find_all("dt")
110
+ for item in soup.find(name="div", attrs={"class": "board-infos"}).find_all("dt")
439
111
  ]
440
112
  value_list = [
441
113
  item.text.strip().replace("\n", "/")
442
- for item in soup.find("div", attrs={"class": "board-infos"}).find_all("dd")
114
+ for item in soup.find(name="div", attrs={"class": "board-infos"}).find_all("dd")
443
115
  ]
444
116
  temp_df = pd.DataFrame([name_list, value_list]).T
445
117
  temp_df.columns = ["项目", "值"]
@@ -447,13 +119,13 @@ def stock_board_industry_info_ths(symbol: str = "半导体及元件") -> pd.Data
447
119
 
448
120
 
449
121
  def stock_board_industry_index_ths(
450
- symbol: str = "半导体及元件",
122
+ symbol: str = "元件",
451
123
  start_date: str = "20200101",
452
124
  end_date: str = "20240108",
453
125
  ) -> pd.DataFrame:
454
126
  """
455
127
  同花顺-板块-行业板块-指数数据
456
- https://q.10jqka.com.cn/gn/detail/code/301558/
128
+ https://q.10jqka.com.cn/thshy/detail/code/881270/
457
129
  :param start_date: 开始时间
458
130
  :type start_date: str
459
131
  :param end_date: 结束时间
@@ -463,24 +135,31 @@ def stock_board_industry_index_ths(
463
135
  :return: 指数数据
464
136
  :rtype: pandas.DataFrame
465
137
  """
466
- code_map = stock_board_industry_name_ths()
467
- code_map = dict(zip(code_map["name"].values, code_map["code"].values))
138
+ code_map = _get_stock_board_industry_name_ths()
468
139
  symbol_code = code_map[symbol]
469
140
  big_df = pd.DataFrame()
470
141
  current_year = datetime.now().year
471
142
  begin_year = int(start_date[:4])
143
+ tqdm = get_tqdm()
144
+ js_code = py_mini_racer.MiniRacer()
145
+ js_content = _get_file_content_ths("ths.js")
146
+ js_code.eval(js_content)
147
+ v_code = js_code.call("v")
472
148
  for year in tqdm(range(begin_year, current_year + 1), leave=False):
473
- url = f"http://d.10jqka.com.cn/v4/line/bk_{symbol_code}/01/{year}.js"
149
+ url = f"https://d.10jqka.com.cn/v4/line/bk_{symbol_code}/01/{year}.js"
474
150
  headers = {
475
- "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",
151
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
152
+ "Chrome/89.0.4389.90 Safari/537.36",
476
153
  "Referer": "http://q.10jqka.com.cn",
477
154
  "Host": "d.10jqka.com.cn",
155
+ "Cookie": f"v={v_code}",
478
156
  }
479
157
  r = requests.get(url, headers=headers)
480
158
  data_text = r.text
159
+
481
160
  try:
482
161
  demjson.decode(data_text[data_text.find("{") : -1])
483
- except:
162
+ except: # noqa: E722
484
163
  continue
485
164
  temp_df = demjson.decode(data_text[data_text.find("{") : -1])
486
165
  temp_df = pd.DataFrame(temp_df["data"].split(";"))
@@ -540,6 +219,58 @@ def stock_board_industry_index_ths(
540
219
  return big_df
541
220
 
542
221
 
222
+ def stock_xgsr_ths() -> pd.DataFrame:
223
+ """
224
+ 同花顺-数据中心-新股数据-新股上市首日
225
+ https://data.10jqka.com.cn/ipo/xgsr/
226
+ :return: 新股上市首日
227
+ :rtype: pandas.DataFrame
228
+ """
229
+ js_code = py_mini_racer.MiniRacer()
230
+ js_content = _get_file_content_ths("ths.js")
231
+ js_code.eval(js_content)
232
+ v_code = js_code.call("v")
233
+ headers = {
234
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
235
+ "Chrome/89.0.4389.90 Safari/537.36",
236
+ "Cookie": f"v={v_code}",
237
+ "hexin-v": v_code,
238
+ }
239
+ url = "https://data.10jqka.com.cn/ipo/xgsr/field/SSRQ/order/desc/page/1/ajax/1/free/1/"
240
+ r = requests.get(url, headers=headers)
241
+ soup = BeautifulSoup(r.text, features="lxml")
242
+ page_num = soup.find(name="span", attrs={"class": "page_info"}).text.split("/")[1]
243
+ big_df = pd.DataFrame()
244
+ tqdm = get_tqdm()
245
+ for page in tqdm(range(1, int(page_num) + 1), leave=False):
246
+ url = f"https://data.10jqka.com.cn/ipo/xgsr/field/SSRQ/order/desc/page/{page}/ajax/1/free/1/"
247
+ v_code = js_code.call("v")
248
+ headers = {
249
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
250
+ "Chrome/89.0.4389.90 Safari/537.36",
251
+ "Cookie": f"v={v_code}",
252
+ "hexin-v": v_code,
253
+ }
254
+ r = requests.get(url, headers=headers)
255
+ temp_df = pd.read_html(StringIO(r.text))[0]
256
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
257
+
258
+ big_df.rename(columns={"发行价(元)": "发行价"}, inplace=True)
259
+ big_df["序号"] = pd.to_numeric(big_df["序号"], errors="coerce")
260
+ big_df["股票代码"] = big_df["股票代码"].astype(str).str.zfill(6)
261
+ big_df["发行价"] = pd.to_numeric(big_df["发行价"], errors="coerce")
262
+ big_df["最新价"] = pd.to_numeric(big_df["最新价"], errors="coerce")
263
+ big_df["首日开盘价"] = pd.to_numeric(big_df["首日开盘价"], errors="coerce")
264
+ big_df["首日收盘价"] = pd.to_numeric(big_df["首日收盘价"], errors="coerce")
265
+ big_df["首日最高价"] = pd.to_numeric(big_df["首日最高价"], errors="coerce")
266
+ big_df["首日最低价"] = pd.to_numeric(big_df["首日最低价"], errors="coerce")
267
+ big_df["首日涨跌幅"] = (
268
+ pd.to_numeric(big_df["首日涨跌幅"].str.strip("%"), errors="coerce") / 100
269
+ )
270
+ big_df["上市日期"] = pd.to_datetime(big_df["上市日期"], errors="coerce").dt.date
271
+ return big_df
272
+
273
+
543
274
  def stock_ipo_benefit_ths() -> pd.DataFrame:
544
275
  """
545
276
  同花顺-数据中心-新股数据-IPO受益股
@@ -552,26 +283,29 @@ def stock_ipo_benefit_ths() -> pd.DataFrame:
552
283
  js_code.eval(js_content)
553
284
  v_code = js_code.call("v")
554
285
  headers = {
555
- "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",
286
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
287
+ "Chrome/89.0.4389.90 Safari/537.36",
556
288
  "Cookie": f"v={v_code}",
557
289
  "hexin-v": v_code,
558
290
  }
559
- url = f"http://data.10jqka.com.cn/ipo/syg/field/invest/order/desc/page/1/ajax/1/free/1/"
291
+ url = "https://data.10jqka.com.cn/ipo/syg/field/invest/order/desc/page/1/ajax/1/free/1/"
560
292
  r = requests.get(url, headers=headers)
561
- soup = BeautifulSoup(r.text, "lxml")
562
- page_num = soup.find("span", attrs={"class": "page_info"}).text.split("/")[1]
293
+ soup = BeautifulSoup(r.text, features="lxml")
294
+ page_num = soup.find(name="span", attrs={"class": "page_info"}).text.split("/")[1]
563
295
  big_df = pd.DataFrame()
296
+ tqdm = get_tqdm()
564
297
  for page in tqdm(range(1, int(page_num) + 1), leave=False):
565
- url = f"http://data.10jqka.com.cn/ipo/syg/field/invest/order/desc/page/{page}/ajax/1/free/1/"
298
+ url = f"https://data.10jqka.com.cn/ipo/syg/field/invest/order/desc/page/{page}/ajax/1/free/1/"
566
299
  v_code = js_code.call("v")
567
300
  headers = {
568
- "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",
301
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
302
+ "Chrome/89.0.4389.90 Safari/537.36",
569
303
  "Cookie": f"v={v_code}",
570
304
  "hexin-v": v_code,
571
305
  }
572
306
  r = requests.get(url, headers=headers)
573
307
  temp_df = pd.read_html(StringIO(r.text))[0]
574
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
308
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
575
309
 
576
310
  big_df.columns = [
577
311
  "序号",
@@ -606,19 +340,21 @@ def stock_board_industry_summary_ths() -> pd.DataFrame:
606
340
  js_code.eval(js_content)
607
341
  v_code = js_code.call("v")
608
342
  headers = {
609
- "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",
343
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
344
+ "Chrome/89.0.4389.90 Safari/537.36",
610
345
  "Cookie": f"v={v_code}",
611
346
  }
612
- url = f"http://q.10jqka.com.cn/thshy/index/field/199112/order/desc/page/1/ajax/1/"
347
+ url = "http://q.10jqka.com.cn/thshy/index/field/199112/order/desc/page/1/ajax/1/"
613
348
  r = requests.get(url, headers=headers)
614
- soup = BeautifulSoup(r.text, "lxml")
615
- page_num = soup.find("span", attrs={"class": "page_info"}).text.split("/")[1]
349
+ soup = BeautifulSoup(r.text, features="lxml")
350
+ page_num = soup.find(name="span", attrs={"class": "page_info"}).text.split("/")[1]
616
351
  big_df = pd.DataFrame()
352
+ tqdm = get_tqdm()
617
353
  for page in tqdm(range(1, int(page_num) + 1), leave=False):
618
354
  url = f"http://q.10jqka.com.cn/thshy/index/field/199112/order/desc/page/{page}/ajax/1/"
619
355
  r = requests.get(url, headers=headers)
620
356
  temp_df = pd.read_html(StringIO(r.text))[0]
621
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
357
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
622
358
 
623
359
  big_df.columns = [
624
360
  "序号",
@@ -650,20 +386,14 @@ if __name__ == "__main__":
650
386
  stock_board_industry_name_ths_df = stock_board_industry_name_ths()
651
387
  print(stock_board_industry_name_ths_df)
652
388
 
653
- stock_board_industry_cons_ths_df = stock_board_industry_cons_ths(symbol="涂料油墨")
654
- print(stock_board_industry_cons_ths_df)
655
-
656
- stock_board_industry_info_ths_df = stock_board_industry_info_ths(symbol="小家电")
389
+ stock_board_industry_info_ths_df = stock_board_industry_info_ths(symbol="橡胶制品")
657
390
  print(stock_board_industry_info_ths_df)
658
391
 
659
392
  stock_board_industry_index_ths_df = stock_board_industry_index_ths(
660
- symbol="通信服务", start_date="20230825", end_date="20240221"
393
+ symbol="消费电子", start_date="20240101", end_date="20240724"
661
394
  )
662
395
  print(stock_board_industry_index_ths_df)
663
396
 
664
- stock_ipo_benefit_ths_df = stock_ipo_benefit_ths()
665
- print(stock_ipo_benefit_ths_df)
666
-
667
397
  stock_board_industry_summary_ths_df = stock_board_industry_summary_ths()
668
398
  print(stock_board_industry_summary_ths_df)
669
399
 
@@ -671,3 +401,9 @@ if __name__ == "__main__":
671
401
  print(stock)
672
402
  stock_board_industry_index_ths_df = stock_board_industry_index_ths(symbol=stock)
673
403
  print(stock_board_industry_index_ths_df)
404
+
405
+ stock_xgsr_ths_df = stock_xgsr_ths()
406
+ print(stock_xgsr_ths_df)
407
+
408
+ stock_ipo_benefit_ths_df = stock_ipo_benefit_ths()
409
+ print(stock_ipo_benefit_ths_df)