akshare 1.14.49__py3-none-any.whl → 1.17.99__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- akshare/__init__.py +595 -129
- akshare/air/air_hebei.py +77 -54
- akshare/air/air_zhenqi.py +0 -4
- akshare/air/cons.py +1 -0
- akshare/air/crypto.js +1 -1
- akshare/air/outcrypto.js +1 -1
- akshare/article/cons.py +1 -0
- akshare/article/epu_index.py +4 -3
- akshare/article/ff_factor.py +19 -8
- akshare/article/fred_md.py +4 -1
- akshare/article/risk_rv.py +3 -8
- akshare/bank/bank_cbirc_2020.py +11 -11
- akshare/bank/cons.py +7 -6
- akshare/bond/bond_buy_back_em.py +228 -0
- akshare/bond/bond_cb_sina.py +1 -0
- akshare/bond/bond_cb_ths.py +17 -9
- akshare/bond/bond_cbond.py +19 -14
- akshare/bond/bond_china.py +38 -39
- akshare/bond/bond_china_money.py +1 -1
- akshare/bond/bond_convert.py +10 -9
- akshare/bond/bond_em.py +37 -17
- akshare/bond/bond_summary.py +38 -37
- akshare/bond/bond_zh_cov.py +31 -40
- akshare/bond/bond_zh_sina.py +4 -0
- akshare/bond/cons.py +14 -11
- akshare/cal/__init__.py +0 -0
- akshare/cal/rv.py +170 -0
- akshare/cost/cost_living.py +7 -5
- akshare/crypto/__init__.py +1 -1
- akshare/crypto/crypto_bitcoin_cme.py +9 -7
- akshare/crypto/crypto_hold.py +4 -2
- akshare/currency/currency.py +1 -0
- akshare/currency/currency_china_bank_sina.py +11 -6
- akshare/data/__init__.py +1 -1
- akshare/data/cninfo.js +1 -1
- akshare/datasets.py +10 -21
- akshare/economic/cons.py +10 -3
- akshare/economic/macro_australia.py +74 -69
- akshare/economic/macro_bank.py +95 -653
- akshare/economic/macro_canada.py +92 -81
- akshare/economic/macro_china.py +97 -105
- akshare/economic/macro_china_hk.py +0 -1
- akshare/economic/macro_euro.py +103 -56
- akshare/economic/macro_finance_ths.py +7 -5
- akshare/economic/macro_germany.py +1 -1
- akshare/economic/macro_japan.py +0 -1
- akshare/economic/macro_other.py +1 -6
- akshare/economic/macro_swiss.py +2 -3
- akshare/economic/macro_uk.py +1 -1
- akshare/economic/macro_usa.py +7 -9
- akshare/economic/marco_cnbs.py +11 -6
- akshare/energy/energy_carbon.py +0 -1
- akshare/energy/energy_oil_em.py +1 -2
- akshare/event/cons.py +1 -0
- akshare/exceptions.py +43 -0
- akshare/file_fold/calendar.json +245 -2
- akshare/forex/__init__.py +0 -0
- akshare/forex/cons.py +192 -0
- akshare/forex/forex_em.py +149 -0
- akshare/fortune/fortune_500.py +1 -37
- akshare/fortune/fortune_bloomberg.py +6 -3
- akshare/fortune/fortune_forbes_500.py +3 -6
- akshare/fortune/fortune_hurun.py +2 -1
- akshare/fortune/fortune_xincaifu_500.py +17 -14
- akshare/fund/fund_announcement_em.py +145 -0
- akshare/fund/fund_aum_em.py +49 -35
- akshare/fund/fund_em.py +251 -220
- akshare/fund/fund_etf_em.py +44 -35
- akshare/fund/fund_etf_sina.py +75 -27
- akshare/fund/fund_etf_ths.py +2 -0
- akshare/fund/fund_fee_em.py +172 -0
- akshare/fund/fund_fhsp_em.py +42 -32
- akshare/fund/fund_init_em.py +8 -5
- akshare/fund/fund_lof_em.py +12 -19
- akshare/fund/fund_manager.py +25 -11
- akshare/fund/fund_overview_em.py +42 -0
- akshare/fund/fund_portfolio_em.py +23 -21
- akshare/fund/fund_position_lg.py +19 -8
- akshare/fund/fund_rank_em.py +2 -5
- akshare/fund/fund_rating.py +33 -12
- akshare/fund/fund_scale_em.py +24 -13
- akshare/fund/fund_scale_sina.py +20 -10
- akshare/fund/fund_xq.py +3 -2
- akshare/futures/cons.py +135 -39
- akshare/futures/cot.py +55 -56
- akshare/futures/futures_basis.py +49 -11
- akshare/futures/futures_comex_em.py +1 -0
- akshare/futures/futures_comm_ctp.py +1 -1
- akshare/futures/futures_contract_detail.py +59 -9
- akshare/futures/futures_daily_bar.py +66 -59
- akshare/futures/futures_foreign.py +14 -8
- akshare/futures/futures_hf_em.py +215 -61
- akshare/futures/futures_hist_em.py +191 -0
- akshare/futures/futures_hq_sina.py +5 -3
- akshare/futures/futures_index_ccidx.py +24 -82
- akshare/futures/futures_inventory_99.py +70 -272
- akshare/futures/futures_inventory_em.py +14 -11
- akshare/futures/futures_news_shmet.py +2 -2
- akshare/futures/futures_roll_yield.py +11 -24
- akshare/futures/futures_rule.py +7 -3
- akshare/futures/futures_rule_em.py +38 -0
- akshare/futures/futures_settlement_price_sgx.py +21 -6
- akshare/futures/futures_stock_js.py +0 -1
- akshare/futures/futures_to_spot.py +5 -6
- akshare/futures/futures_warehouse_receipt.py +48 -47
- akshare/futures/futures_zh_sina.py +3 -3
- akshare/futures/receipt.py +298 -165
- akshare/futures/requests_fun.py +16 -3
- akshare/futures/symbol_var.py +32 -13
- akshare/futures_derivative/cons.py +100 -103
- akshare/futures_derivative/futures_contract_info_cffex.py +55 -39
- akshare/futures_derivative/futures_contract_info_czce.py +2 -0
- akshare/futures_derivative/futures_contract_info_dce.py +43 -17
- akshare/futures_derivative/futures_contract_info_gfex.py +43 -31
- akshare/futures_derivative/futures_contract_info_ine.py +43 -34
- akshare/futures_derivative/futures_contract_info_shfe.py +3 -4
- akshare/futures_derivative/futures_cot_sina.py +8 -6
- akshare/futures_derivative/futures_index_sina.py +25 -13
- akshare/fx/cons.py +12 -7
- akshare/fx/fx_c_swap_cm.py +62 -0
- akshare/fx/fx_quote.py +3 -2
- akshare/fx/fx_quote_baidu.py +2 -1
- akshare/hf/__init__.py +1 -1
- akshare/hf/hf_sp500.py +8 -7
- akshare/index/cons.py +132 -28
- akshare/index/index_cni.py +7 -7
- akshare/index/index_cons.py +2 -2
- akshare/index/index_csindex.py +68 -0
- akshare/index/index_cx.py +20 -20
- akshare/index/index_drewry.py +17 -16
- akshare/index/index_eri.py +1 -0
- akshare/index/index_global_em.py +167 -0
- akshare/index/index_global_sina.py +82 -0
- akshare/index/index_kq_fz.py +17 -14
- akshare/index/index_kq_ss.py +1 -0
- akshare/index/index_option_qvix.py +351 -16
- akshare/index/index_research_sw.py +21 -21
- akshare/index/index_spot.py +9 -5
- akshare/index/index_stock_hk.py +5 -9
- akshare/index/index_stock_zh.py +111 -24
- akshare/index/index_stock_zh_csindex.py +3 -367
- akshare/index/index_sugar.py +18 -4
- akshare/index/index_sw.py +10 -2
- akshare/index/index_yw.py +53 -75
- akshare/index/index_zh_em.py +15 -82
- akshare/interest_rate/interbank_rate_em.py +0 -1
- akshare/movie/jm.js +0 -1
- akshare/news/__init__.py +1 -1
- akshare/news/news_baidu.py +395 -222
- akshare/news/news_stock.py +49 -16
- akshare/option/cons.py +2 -2
- akshare/option/option_commodity.py +341 -220
- akshare/option/option_commodity_sina.py +22 -26
- akshare/option/option_contract_info_ctp.py +63 -0
- akshare/option/option_current_sse.py +61 -0
- akshare/option/option_current_szse.py +84 -0
- akshare/option/option_czce.py +37 -9
- akshare/option/option_daily_stats_sse_szse.py +0 -1
- akshare/option/option_em.py +4 -8
- akshare/option/option_finance.py +60 -12
- akshare/option/option_finance_sina.py +7 -7
- akshare/option/option_lhb_em.py +0 -1
- akshare/option/option_margin.py +62 -0
- akshare/option/option_premium_analysis_em.py +58 -53
- akshare/option/option_risk_analysis_em.py +11 -8
- akshare/option/option_risk_indicator_sse.py +3 -4
- akshare/option/option_value_analysis_em.py +62 -55
- akshare/other/__init__.py +1 -1
- akshare/pro/__init__.py +0 -1
- akshare/pro/client.py +6 -4
- akshare/pro/cons.py +3 -2
- akshare/pro/data_pro.py +6 -5
- akshare/qdii/__init__.py +0 -0
- akshare/qdii/qdii_jsl.py +233 -0
- akshare/qhkc/__init__.py +1 -6
- akshare/qhkc/qhkc_api.py +64 -22
- akshare/qhkc_web/__init__.py +1 -6
- akshare/qhkc_web/qhkc_fund.py +10 -6
- akshare/qhkc_web/qhkc_index.py +28 -14
- akshare/qhkc_web/qhkc_tool.py +62 -59
- akshare/rate/__init__.py +1 -1
- akshare/rate/repo_rate.py +36 -32
- akshare/reits/__init__.py +1 -1
- akshare/reits/reits_basic.py +149 -13
- akshare/request.py +117 -0
- akshare/spot/__init__.py +1 -1
- akshare/spot/spot_hog_soozhu.py +165 -3
- akshare/spot/spot_sge.py +70 -9
- akshare/stock/cons.py +60 -23
- akshare/stock/stock_allotment_cninfo.py +8 -8
- akshare/stock/stock_ask_bid_em.py +3 -78
- akshare/stock/stock_board_concept_em.py +160 -35
- akshare/stock/stock_board_industry_em.py +163 -70
- akshare/stock/stock_dividend_cninfo.py +31 -17
- akshare/stock/stock_dzjy_em.py +347 -260
- akshare/stock/stock_fund_em.py +72 -64
- akshare/stock/stock_fund_hold.py +1 -2
- akshare/stock/stock_gsrl_em.py +1 -0
- akshare/stock/stock_hk_comparison_em.py +175 -0
- akshare/stock/stock_hk_famous.py +4 -5
- akshare/stock/stock_hk_fhpx_ths.py +2 -1
- akshare/stock/stock_hk_hot_rank_em.py +1 -0
- akshare/stock/stock_hk_sina.py +84 -36
- akshare/stock/stock_hold_control_cninfo.py +82 -0
- akshare/stock/stock_hold_control_em.py +0 -2
- akshare/stock/stock_hot_rank_em.py +4 -1
- akshare/stock/stock_hot_search_baidu.py +32 -19
- akshare/stock/stock_hot_up_em.py +4 -1
- akshare/stock/stock_hsgt_em.py +155 -0
- akshare/stock/stock_industry.py +1 -0
- akshare/stock/stock_industry_cninfo.py +1 -2
- akshare/stock/stock_info.py +6 -4
- akshare/stock/stock_info_em.py +17 -11
- akshare/stock/stock_intraday_em.py +4 -78
- akshare/stock/stock_intraday_sina.py +2 -2
- akshare/stock/stock_news_cx.py +39 -0
- akshare/stock/stock_profile_cninfo.py +7 -7
- akshare/stock/stock_profile_em.py +302 -0
- akshare/stock/stock_rank_forecast.py +6 -5
- akshare/stock/stock_repurchase_em.py +7 -2
- akshare/stock/stock_share_changes_cninfo.py +7 -5
- akshare/stock/stock_share_hold.py +24 -20
- akshare/stock/stock_stop.py +6 -6
- akshare/stock/stock_summary.py +153 -417
- akshare/stock/stock_us_famous.py +5 -6
- akshare/stock/stock_us_js.py +3 -2
- akshare/stock/stock_us_pink.py +38 -27
- akshare/stock/stock_us_sina.py +7 -3
- akshare/stock/stock_weibo_nlp.py +18 -20
- akshare/stock/stock_xq.py +24 -22
- akshare/stock/stock_zh_a_sina.py +8 -5
- akshare/stock/stock_zh_a_special.py +240 -243
- akshare/stock/stock_zh_a_tick_tx.py +11 -3
- akshare/stock/stock_zh_ah_tx.py +23 -26
- akshare/stock/stock_zh_b_sina.py +2 -2
- akshare/stock/stock_zh_comparison_em.py +250 -0
- akshare/stock/stock_zh_kcb_sina.py +67 -64
- akshare/stock_a/__init__.py +0 -0
- akshare/stock_a/stock_board_concept_name_em.py +170 -0
- akshare/stock_a/stock_individual_fund_flow_rank.py +258 -0
- akshare/stock_a/stock_zh_a_spot.py +212 -0
- akshare/stock_feature/cons.py +1 -0
- akshare/stock_feature/stock_a_indicator.py +9 -54
- akshare/stock_feature/stock_a_pe_and_pb.py +23 -5
- akshare/stock_feature/stock_account_em.py +0 -1
- akshare/stock_feature/stock_all_pb.py +2 -1
- akshare/stock_feature/stock_analyst_em.py +36 -30
- akshare/stock_feature/stock_board_concept_ths.py +328 -0
- akshare/stock_feature/stock_board_industry_ths.py +57 -2
- akshare/stock_feature/stock_buffett_index_lg.py +10 -8
- akshare/stock_feature/stock_classify_sina.py +3 -6
- akshare/stock_feature/stock_comment_em.py +81 -144
- akshare/stock_feature/stock_congestion_lg.py +2 -1
- akshare/stock_feature/stock_cyq_em.py +5 -11
- akshare/stock_feature/stock_disclosure_cninfo.py +6 -6
- akshare/stock_feature/stock_dxsyl_em.py +121 -74
- akshare/stock_feature/stock_ebs_lg.py +5 -4
- akshare/stock_feature/stock_esg_sina.py +29 -7
- akshare/stock_feature/stock_fhps_em.py +2 -1
- akshare/stock_feature/stock_fhps_ths.py +15 -7
- akshare/stock_feature/stock_fund_flow.py +30 -22
- akshare/stock_feature/stock_gddh_em.py +19 -11
- akshare/stock_feature/stock_gdfx_em.py +226 -113
- akshare/stock_feature/stock_gdhs.py +75 -50
- akshare/stock_feature/stock_gdzjc_em.py +21 -10
- akshare/stock_feature/stock_gpzy_em.py +78 -46
- akshare/stock_feature/stock_gxl_lg.py +3 -2
- akshare/stock_feature/stock_hist_em.py +137 -234
- akshare/stock_feature/stock_hist_tx.py +13 -10
- akshare/stock_feature/stock_hk_valuation_baidu.py +20 -8
- akshare/stock_feature/stock_hot_xq.py +4 -6
- akshare/stock_feature/stock_hsgt_em.py +269 -97
- akshare/stock_feature/stock_hsgt_exchange_rate.py +115 -87
- akshare/stock_feature/stock_hsgt_min_em.py +13 -16
- akshare/stock_feature/stock_info.py +7 -80
- akshare/stock_feature/stock_inner_trade_xq.py +38 -31
- akshare/stock_feature/stock_jgdy_em.py +43 -40
- akshare/stock_feature/stock_lhb_em.py +119 -3
- akshare/stock_feature/stock_margin_em.py +0 -1
- akshare/stock_feature/stock_margin_sse.py +0 -2
- akshare/stock_feature/stock_pankou_em.py +71 -35
- akshare/stock_feature/stock_qsjy_em.py +13 -4
- akshare/stock_feature/stock_report_em.py +151 -7
- akshare/stock_feature/stock_research_report_em.py +55 -20
- akshare/stock_feature/stock_sy_em.py +20 -15
- akshare/stock_feature/stock_technology_ths.py +122 -77
- akshare/stock_feature/stock_tfp_em.py +2 -1
- akshare/stock_feature/stock_three_report_em.py +21 -5
- akshare/stock_feature/stock_ttm_lyr.py +18 -9
- akshare/stock_feature/stock_value_em.py +83 -0
- akshare/stock_feature/stock_yjbb_em.py +58 -32
- akshare/stock_feature/stock_yjyg_cninfo.py +6 -2
- akshare/stock_feature/stock_yjyg_em.py +1 -1
- akshare/stock_feature/stock_yzxdr_em.py +24 -22
- akshare/stock_feature/stock_zdhtmx_em.py +20 -6
- akshare/stock_feature/stock_zh_vote_baidu.py +4 -1
- akshare/stock_feature/stock_ztb_em.py +39 -24
- akshare/stock_fundamental/__init__.py +1 -1
- akshare/stock_fundamental/stock_basic_info_xq.py +119 -0
- akshare/stock_fundamental/{stock_finance_hk.py → stock_finance_hk_em.py} +23 -16
- akshare/stock_fundamental/{stock_finance.py → stock_finance_sina.py} +60 -7
- akshare/stock_fundamental/stock_finance_ths.py +524 -57
- akshare/stock_fundamental/stock_finance_us_em.py +268 -0
- akshare/stock_fundamental/stock_gbjg_em.py +80 -0
- akshare/stock_fundamental/stock_hold.py +26 -17
- akshare/stock_fundamental/stock_ipo_declare.py +1 -0
- akshare/stock_fundamental/stock_kcb_detail_sse.py +10 -10
- akshare/stock_fundamental/stock_kcb_sse.py +26 -25
- akshare/stock_fundamental/stock_notice.py +12 -3
- akshare/stock_fundamental/stock_profit_forecast_em.py +31 -13
- akshare/stock_fundamental/stock_profit_forecast_hk_etnet.py +64 -41
- akshare/stock_fundamental/stock_profit_forecast_ths.py +86 -35
- akshare/stock_fundamental/stock_recommend.py +20 -4
- akshare/stock_fundamental/stock_zygc.py +5 -62
- akshare/utils/context.py +43 -0
- akshare/utils/demjson.py +2009 -1338
- akshare/utils/func.py +49 -2
- akshare/utils/multi_decrypt.py +53 -0
- akshare/utils/token_process.py +6 -5
- {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info}/METADATA +54 -80
- akshare-1.17.99.dist-info/RECORD +409 -0
- {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info}/WHEEL +1 -1
- {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info/licenses}/LICENSE +1 -1
- tests/test_func.py +3 -5
- akshare/bond/bond_futures.py +0 -50
- akshare/bond/bond_investing.py +0 -139
- akshare/crypto/crypto_hist_investing.py +0 -249
- akshare/fund/fund_announcement.py +0 -56
- akshare/futures/futures_international.py +0 -170
- akshare/futures/futures_news_baidu.py +0 -54
- akshare/futures/inventory_data.py +0 -100
- akshare/futures_derivative/futures_index_price_nh.py +0 -61
- akshare/futures_derivative/futures_index_return_nh.py +0 -47
- akshare/futures_derivative/futures_index_volatility_nh.py +0 -53
- akshare/futures_derivative/futures_other_index_nh.py +0 -145
- akshare/index/index_fear_greed_funddb.py +0 -78
- akshare/index/index_investing.py +0 -232
- akshare/sport/__init__.py +0 -6
- akshare/sport/sport_olympic.py +0 -27
- akshare/stock_feature/stock_wencai.py +0 -104
- akshare/stock_fundamental/stock_mda_ym.py +0 -40
- akshare-1.14.49.dist-info/RECORD +0 -387
- {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info}/top_level.txt +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# -*- coding:utf-8 -*-
|
|
2
2
|
# !/usr/bin/env python
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2025/3/4 23:00
|
|
5
5
|
Desc: 东方财富网-数据中心-沪深港通持股
|
|
6
6
|
https://data.eastmoney.com/hsgtcg/
|
|
7
7
|
沪深港通详情: https://finance.eastmoney.com/news/1622,20161118685370149.html
|
|
@@ -10,7 +10,9 @@ https://data.eastmoney.com/hsgtcg/
|
|
|
10
10
|
import pandas as pd
|
|
11
11
|
import requests
|
|
12
12
|
from bs4 import BeautifulSoup
|
|
13
|
-
|
|
13
|
+
|
|
14
|
+
from akshare.utils.tqdm import get_tqdm
|
|
15
|
+
from akshare.utils.func import fetch_paginated_data
|
|
14
16
|
|
|
15
17
|
|
|
16
18
|
def stock_hsgt_fund_flow_summary_em() -> pd.DataFrame:
|
|
@@ -35,7 +37,6 @@ def stock_hsgt_fund_flow_summary_em() -> pd.DataFrame:
|
|
|
35
37
|
"sortColumns": "MUTUAL_TYPE",
|
|
36
38
|
"source": "WEB",
|
|
37
39
|
"client": "WEB",
|
|
38
|
-
"_": "1669047266881",
|
|
39
40
|
}
|
|
40
41
|
r = requests.get(url, params=params)
|
|
41
42
|
data_json = r.json()
|
|
@@ -100,22 +101,17 @@ def stock_hk_ggt_components_em() -> pd.DataFrame:
|
|
|
100
101
|
url = "https://33.push2.eastmoney.com/api/qt/clist/get"
|
|
101
102
|
params = {
|
|
102
103
|
"pn": "1",
|
|
103
|
-
"pz": "
|
|
104
|
+
"pz": "100",
|
|
104
105
|
"po": "1",
|
|
105
106
|
"np": "1",
|
|
106
107
|
"ut": "bd1d9ddb04089700cf9c27f6f7426281",
|
|
107
108
|
"fltt": "2",
|
|
108
|
-
"fid": "
|
|
109
|
+
"fid": "f12",
|
|
109
110
|
"fs": "b:DLMK0146,b:DLMK0144",
|
|
110
111
|
"fields": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f23,f24,"
|
|
111
112
|
"f25,f26,f22,f33,f11,f62,f128,f136,f115,f152",
|
|
112
|
-
"_": "1639974456250",
|
|
113
113
|
}
|
|
114
|
-
|
|
115
|
-
data_json = r.json()
|
|
116
|
-
temp_df = pd.DataFrame(data_json["data"]["diff"])
|
|
117
|
-
temp_df.reset_index(inplace=True)
|
|
118
|
-
temp_df["index"] = temp_df.index + 1
|
|
114
|
+
temp_df = fetch_paginated_data(url=url, base_params=params)
|
|
119
115
|
temp_df.columns = [
|
|
120
116
|
"序号",
|
|
121
117
|
"-",
|
|
@@ -187,9 +183,9 @@ def stock_hsgt_hold_stock_em(
|
|
|
187
183
|
"""
|
|
188
184
|
url = "https://data.eastmoney.com/hsgtcg/list.html"
|
|
189
185
|
r = requests.get(url)
|
|
190
|
-
soup = BeautifulSoup(r.text, "lxml")
|
|
186
|
+
soup = BeautifulSoup(r.text, features="lxml")
|
|
191
187
|
date = (
|
|
192
|
-
soup.find("div", attrs={"class": "title"})
|
|
188
|
+
soup.find(name="div", attrs={"class": "title"})
|
|
193
189
|
.find("span")
|
|
194
190
|
.text.strip("(")
|
|
195
191
|
.strip(")")
|
|
@@ -232,12 +228,13 @@ def stock_hsgt_hold_stock_em(
|
|
|
232
228
|
data_json = r.json()
|
|
233
229
|
page_num = data_json["result"]["pages"]
|
|
234
230
|
big_df = pd.DataFrame()
|
|
231
|
+
tqdm = get_tqdm()
|
|
235
232
|
for page in tqdm(range(1, page_num + 1), leave=False):
|
|
236
233
|
params.update({"pageNumber": page})
|
|
237
234
|
r = requests.get(url, params=params)
|
|
238
235
|
data_json = r.json()
|
|
239
236
|
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
240
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
237
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
241
238
|
|
|
242
239
|
big_df.reset_index(inplace=True)
|
|
243
240
|
big_df["index"] = range(1, len(big_df) + 1)
|
|
@@ -375,17 +372,18 @@ def stock_hsgt_stock_statistics_em(
|
|
|
375
372
|
params.update(
|
|
376
373
|
{"filter": f"""(INTERVAL_TYPE="1")(RN=1)(TRADE_DATE='{start_date}')"""}
|
|
377
374
|
)
|
|
378
|
-
url = "
|
|
375
|
+
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
|
379
376
|
r = requests.get(url, params=params)
|
|
380
377
|
data_json = r.json()
|
|
381
378
|
total_page = data_json["result"]["pages"]
|
|
382
379
|
big_df = pd.DataFrame()
|
|
380
|
+
tqdm = get_tqdm()
|
|
383
381
|
for page in tqdm(range(1, int(total_page) + 1), leave=False):
|
|
384
382
|
params.update({"pageNumber": page})
|
|
385
383
|
r = requests.get(url, params=params)
|
|
386
384
|
data_json = r.json()
|
|
387
385
|
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
388
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
386
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
389
387
|
|
|
390
388
|
big_df.columns = [
|
|
391
389
|
"-",
|
|
@@ -398,8 +396,8 @@ def stock_hsgt_stock_statistics_em(
|
|
|
398
396
|
"-",
|
|
399
397
|
"-",
|
|
400
398
|
"-",
|
|
401
|
-
"持股数量",
|
|
402
399
|
"持股市值",
|
|
400
|
+
"持股数量",
|
|
403
401
|
"-",
|
|
404
402
|
"-",
|
|
405
403
|
"-",
|
|
@@ -474,12 +472,13 @@ def stock_hsgt_stock_statistics_em(
|
|
|
474
472
|
data_json = r.json()
|
|
475
473
|
total_page = data_json["result"]["pages"]
|
|
476
474
|
big_df = pd.DataFrame()
|
|
475
|
+
tqdm = get_tqdm()
|
|
477
476
|
for page in tqdm(range(1, int(total_page) + 1), leave=False):
|
|
478
477
|
params.update({"pageNumber": page})
|
|
479
478
|
r = requests.get(url, params=params)
|
|
480
479
|
data_json = r.json()
|
|
481
480
|
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
482
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
481
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
483
482
|
|
|
484
483
|
big_df.columns = [
|
|
485
484
|
"-",
|
|
@@ -576,17 +575,18 @@ def stock_hsgt_stock_statistics_em(
|
|
|
576
575
|
"filter": f"""(INTERVAL_TYPE="1")(MUTUAL_TYPE="001")(TRADE_DATE='{start_date}')"""
|
|
577
576
|
}
|
|
578
577
|
)
|
|
579
|
-
url = "
|
|
578
|
+
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
|
580
579
|
r = requests.get(url, params=params)
|
|
581
580
|
data_json = r.json()
|
|
582
581
|
total_page = data_json["result"]["pages"]
|
|
583
582
|
big_df = pd.DataFrame()
|
|
583
|
+
tqdm = get_tqdm()
|
|
584
584
|
for page in tqdm(range(1, int(total_page) + 1), leave=False):
|
|
585
585
|
params.update({"pageNumber": page})
|
|
586
586
|
r = requests.get(url, params=params)
|
|
587
587
|
data_json = r.json()
|
|
588
588
|
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
589
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
589
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
590
590
|
big_df.columns = [
|
|
591
591
|
"-",
|
|
592
592
|
"-",
|
|
@@ -673,7 +673,8 @@ def stock_hsgt_stock_statistics_em(
|
|
|
673
673
|
"columns": "ALL",
|
|
674
674
|
"source": "WEB",
|
|
675
675
|
"client": "WEB",
|
|
676
|
-
"filter": f"""(INTERVAL_TYPE="1")(MUTUAL_TYPE="003")(TRADE_DATE
|
|
676
|
+
"filter": f"""(INTERVAL_TYPE="1")(MUTUAL_TYPE="003")(TRADE_DATE
|
|
677
|
+
>='{start_date}')(TRADE_DATE<='{end_date}')""",
|
|
677
678
|
"reportName": "RPT_MUTUAL_STOCK_NORTHSTA",
|
|
678
679
|
}
|
|
679
680
|
if start_date == end_date:
|
|
@@ -682,17 +683,18 @@ def stock_hsgt_stock_statistics_em(
|
|
|
682
683
|
"filter": f"""(INTERVAL_TYPE="1")(MUTUAL_TYPE="003")(TRADE_DATE='{start_date}')"""
|
|
683
684
|
}
|
|
684
685
|
)
|
|
685
|
-
url = "
|
|
686
|
+
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
|
686
687
|
r = requests.get(url, params=params)
|
|
687
688
|
data_json = r.json()
|
|
688
689
|
total_page = data_json["result"]["pages"]
|
|
689
690
|
big_df = pd.DataFrame()
|
|
691
|
+
tqdm = get_tqdm()
|
|
690
692
|
for page in tqdm(range(1, int(total_page) + 1), leave=False):
|
|
691
693
|
params.update({"pageNumber": page})
|
|
692
694
|
r = requests.get(url, params=params)
|
|
693
695
|
data_json = r.json()
|
|
694
696
|
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
695
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
697
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
696
698
|
big_df.columns = [
|
|
697
699
|
"-",
|
|
698
700
|
"-",
|
|
@@ -792,6 +794,10 @@ def stock_hsgt_institution_statistics_em(
|
|
|
792
794
|
"""
|
|
793
795
|
start_date = "-".join([start_date[:4], start_date[4:6], start_date[6:]])
|
|
794
796
|
end_date = "-".join([end_date[:4], end_date[4:6], end_date[6:]])
|
|
797
|
+
headers = {
|
|
798
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
799
|
+
"Chrome/114.0.0.0 Safari/537.36"
|
|
800
|
+
}
|
|
795
801
|
if market == "南向持股":
|
|
796
802
|
params = {
|
|
797
803
|
"sortColumns": "HOLD_DATE",
|
|
@@ -804,9 +810,6 @@ def stock_hsgt_institution_statistics_em(
|
|
|
804
810
|
"client": "WEB",
|
|
805
811
|
"filter": f"""(MARKET_TYPE="S")(HOLD_DATE>='{start_date}')(HOLD_DATE<='{end_date}')""",
|
|
806
812
|
}
|
|
807
|
-
headers = {
|
|
808
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"
|
|
809
|
-
}
|
|
810
813
|
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
|
811
814
|
r = requests.get(url, params=params, headers=headers)
|
|
812
815
|
data_json = r.json()
|
|
@@ -842,12 +845,20 @@ def stock_hsgt_institution_statistics_em(
|
|
|
842
845
|
"持股市值变化-10日",
|
|
843
846
|
]
|
|
844
847
|
]
|
|
845
|
-
temp_df["持股日期"] = pd.to_datetime(
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
temp_df["
|
|
849
|
-
temp_df["
|
|
850
|
-
temp_df["持股市值变化-
|
|
848
|
+
temp_df["持股日期"] = pd.to_datetime(
|
|
849
|
+
temp_df["持股日期"], errors="coerce"
|
|
850
|
+
).dt.date
|
|
851
|
+
temp_df["持股只数"] = pd.to_numeric(temp_df["持股只数"], errors="coerce")
|
|
852
|
+
temp_df["持股市值"] = pd.to_numeric(temp_df["持股市值"], errors="coerce")
|
|
853
|
+
temp_df["持股市值变化-1日"] = pd.to_numeric(
|
|
854
|
+
temp_df["持股市值变化-1日"], errors="coerce"
|
|
855
|
+
)
|
|
856
|
+
temp_df["持股市值变化-5日"] = pd.to_numeric(
|
|
857
|
+
temp_df["持股市值变化-5日"], errors="coerce"
|
|
858
|
+
)
|
|
859
|
+
temp_df["持股市值变化-10日"] = pd.to_numeric(
|
|
860
|
+
temp_df["持股市值变化-10日"], errors="coerce"
|
|
861
|
+
)
|
|
851
862
|
return temp_df
|
|
852
863
|
|
|
853
864
|
elif market == "北向持股":
|
|
@@ -862,20 +873,18 @@ def stock_hsgt_institution_statistics_em(
|
|
|
862
873
|
"client": "WEB",
|
|
863
874
|
"filter": f"""(MARKET_TYPE="N")(HOLD_DATE>='{start_date}')(HOLD_DATE<='{end_date}')""",
|
|
864
875
|
}
|
|
865
|
-
headers = {
|
|
866
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"
|
|
867
|
-
}
|
|
868
876
|
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
|
869
877
|
r = requests.get(url, params=params, headers=headers)
|
|
870
878
|
data_json = r.json()
|
|
871
879
|
total_page = data_json["result"]["pages"]
|
|
872
880
|
big_df = pd.DataFrame()
|
|
881
|
+
tqdm = get_tqdm()
|
|
873
882
|
for page in tqdm(range(1, total_page + 1), leave=False):
|
|
874
883
|
params.update({"pageNumber": page})
|
|
875
884
|
r = requests.get(url, params=params, headers=headers)
|
|
876
885
|
data_json = r.json()
|
|
877
886
|
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
878
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
887
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
879
888
|
big_df.columns = [
|
|
880
889
|
"持股日期",
|
|
881
890
|
"_",
|
|
@@ -907,12 +916,18 @@ def stock_hsgt_institution_statistics_em(
|
|
|
907
916
|
"持股市值变化-10日",
|
|
908
917
|
]
|
|
909
918
|
]
|
|
910
|
-
big_df["持股日期"] = pd.to_datetime(big_df["持股日期"]).dt.date
|
|
911
|
-
big_df["持股只数"] = pd.to_numeric(big_df["持股只数"])
|
|
912
|
-
big_df["持股市值"] = pd.to_numeric(big_df["持股市值"])
|
|
913
|
-
big_df["持股市值变化-1日"] = pd.to_numeric(
|
|
914
|
-
|
|
915
|
-
|
|
919
|
+
big_df["持股日期"] = pd.to_datetime(big_df["持股日期"], errors="coerce").dt.date
|
|
920
|
+
big_df["持股只数"] = pd.to_numeric(big_df["持股只数"], errors="coerce")
|
|
921
|
+
big_df["持股市值"] = pd.to_numeric(big_df["持股市值"], errors="coerce")
|
|
922
|
+
big_df["持股市值变化-1日"] = pd.to_numeric(
|
|
923
|
+
big_df["持股市值变化-1日"], errors="coerce"
|
|
924
|
+
)
|
|
925
|
+
big_df["持股市值变化-5日"] = pd.to_numeric(
|
|
926
|
+
big_df["持股市值变化-5日"], errors="coerce"
|
|
927
|
+
)
|
|
928
|
+
big_df["持股市值变化-10日"] = pd.to_numeric(
|
|
929
|
+
big_df["持股市值变化-10日"], errors="coerce"
|
|
930
|
+
)
|
|
916
931
|
return big_df
|
|
917
932
|
elif market == "沪股通持股":
|
|
918
933
|
params = {
|
|
@@ -926,20 +941,18 @@ def stock_hsgt_institution_statistics_em(
|
|
|
926
941
|
"client": "WEB",
|
|
927
942
|
"filter": f"""(MARKET_TYPE="001")(HOLD_DATE>='{start_date}')(HOLD_DATE<='{end_date}')""",
|
|
928
943
|
}
|
|
929
|
-
headers = {
|
|
930
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"
|
|
931
|
-
}
|
|
932
944
|
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
|
933
945
|
r = requests.get(url, params=params, headers=headers)
|
|
934
946
|
data_json = r.json()
|
|
935
947
|
total_page = data_json["result"]["pages"]
|
|
936
948
|
big_df = pd.DataFrame()
|
|
949
|
+
tqdm = get_tqdm()
|
|
937
950
|
for page in tqdm(range(1, total_page + 1), leave=False):
|
|
938
951
|
params.update({"pageNumber": page})
|
|
939
952
|
r = requests.get(url, params=params, headers=headers)
|
|
940
953
|
data_json = r.json()
|
|
941
954
|
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
942
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
955
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
943
956
|
big_df.columns = [
|
|
944
957
|
"持股日期",
|
|
945
958
|
"_",
|
|
@@ -971,12 +984,18 @@ def stock_hsgt_institution_statistics_em(
|
|
|
971
984
|
"持股市值变化-10日",
|
|
972
985
|
]
|
|
973
986
|
]
|
|
974
|
-
big_df["持股日期"] = pd.to_datetime(big_df["持股日期"]).dt.date
|
|
975
|
-
big_df["持股只数"] = pd.to_numeric(big_df["持股只数"])
|
|
976
|
-
big_df["持股市值"] = pd.to_numeric(big_df["持股市值"])
|
|
977
|
-
big_df["持股市值变化-1日"] = pd.to_numeric(
|
|
978
|
-
|
|
979
|
-
|
|
987
|
+
big_df["持股日期"] = pd.to_datetime(big_df["持股日期"], errors="coerce").dt.date
|
|
988
|
+
big_df["持股只数"] = pd.to_numeric(big_df["持股只数"], errors="coerce")
|
|
989
|
+
big_df["持股市值"] = pd.to_numeric(big_df["持股市值"], errors="coerce")
|
|
990
|
+
big_df["持股市值变化-1日"] = pd.to_numeric(
|
|
991
|
+
big_df["持股市值变化-1日"], errors="coerce"
|
|
992
|
+
)
|
|
993
|
+
big_df["持股市值变化-5日"] = pd.to_numeric(
|
|
994
|
+
big_df["持股市值变化-5日"], errors="coerce"
|
|
995
|
+
)
|
|
996
|
+
big_df["持股市值变化-10日"] = pd.to_numeric(
|
|
997
|
+
big_df["持股市值变化-10日"], errors="coerce"
|
|
998
|
+
)
|
|
980
999
|
return big_df
|
|
981
1000
|
elif market == "深股通持股":
|
|
982
1001
|
params = {
|
|
@@ -990,20 +1009,18 @@ def stock_hsgt_institution_statistics_em(
|
|
|
990
1009
|
"client": "WEB",
|
|
991
1010
|
"filter": f"""(MARKET_TYPE="003")(HOLD_DATE>='{start_date}')(HOLD_DATE<='{end_date}')""",
|
|
992
1011
|
}
|
|
993
|
-
headers = {
|
|
994
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"
|
|
995
|
-
}
|
|
996
1012
|
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
|
997
1013
|
r = requests.get(url, params=params, headers=headers)
|
|
998
1014
|
data_json = r.json()
|
|
999
1015
|
total_page = data_json["result"]["pages"]
|
|
1000
1016
|
big_df = pd.DataFrame()
|
|
1017
|
+
tqdm = get_tqdm()
|
|
1001
1018
|
for page in tqdm(range(1, total_page + 1), leave=False):
|
|
1002
1019
|
params.update({"pageNumber": page})
|
|
1003
1020
|
r = requests.get(url, params=params, headers=headers)
|
|
1004
1021
|
data_json = r.json()
|
|
1005
1022
|
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
1006
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
1023
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
1007
1024
|
big_df.columns = [
|
|
1008
1025
|
"持股日期",
|
|
1009
1026
|
"_",
|
|
@@ -1035,12 +1052,18 @@ def stock_hsgt_institution_statistics_em(
|
|
|
1035
1052
|
"持股市值变化-10日",
|
|
1036
1053
|
]
|
|
1037
1054
|
]
|
|
1038
|
-
big_df["持股日期"] = pd.to_datetime(big_df["持股日期"]).dt.date
|
|
1039
|
-
big_df["持股只数"] = pd.to_numeric(big_df["持股只数"])
|
|
1040
|
-
big_df["持股市值"] = pd.to_numeric(big_df["持股市值"])
|
|
1041
|
-
big_df["持股市值变化-1日"] = pd.to_numeric(
|
|
1042
|
-
|
|
1043
|
-
|
|
1055
|
+
big_df["持股日期"] = pd.to_datetime(big_df["持股日期"], errors="coerce").dt.date
|
|
1056
|
+
big_df["持股只数"] = pd.to_numeric(big_df["持股只数"], errors="coerce")
|
|
1057
|
+
big_df["持股市值"] = pd.to_numeric(big_df["持股市值"], errors="coerce")
|
|
1058
|
+
big_df["持股市值变化-1日"] = pd.to_numeric(
|
|
1059
|
+
big_df["持股市值变化-1日"], errors="coerce"
|
|
1060
|
+
)
|
|
1061
|
+
big_df["持股市值变化-5日"] = pd.to_numeric(
|
|
1062
|
+
big_df["持股市值变化-5日"], errors="coerce"
|
|
1063
|
+
)
|
|
1064
|
+
big_df["持股市值变化-10日"] = pd.to_numeric(
|
|
1065
|
+
big_df["持股市值变化-10日"], errors="coerce"
|
|
1066
|
+
)
|
|
1044
1067
|
return big_df
|
|
1045
1068
|
|
|
1046
1069
|
|
|
@@ -1053,6 +1076,10 @@ def stock_hsgt_hist_em(symbol: str = "北向资金") -> pd.DataFrame:
|
|
|
1053
1076
|
:return: 沪深港通历史数据
|
|
1054
1077
|
:rtype: pandas.DataFrame
|
|
1055
1078
|
"""
|
|
1079
|
+
import warnings
|
|
1080
|
+
|
|
1081
|
+
warnings.filterwarnings(action="ignore", category=FutureWarning)
|
|
1082
|
+
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
|
1056
1083
|
symbol_map = {
|
|
1057
1084
|
"北向资金": "5",
|
|
1058
1085
|
"沪股通": "1",
|
|
@@ -1061,7 +1088,6 @@ def stock_hsgt_hist_em(symbol: str = "北向资金") -> pd.DataFrame:
|
|
|
1061
1088
|
"港股通沪": "2",
|
|
1062
1089
|
"港股通深": "4",
|
|
1063
1090
|
}
|
|
1064
|
-
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
|
1065
1091
|
params = {
|
|
1066
1092
|
"sortColumns": "TRADE_DATE",
|
|
1067
1093
|
"sortTypes": "-1",
|
|
@@ -1076,13 +1102,16 @@ def stock_hsgt_hist_em(symbol: str = "北向资金") -> pd.DataFrame:
|
|
|
1076
1102
|
r = requests.get(url, params=params)
|
|
1077
1103
|
data_json = r.json()
|
|
1078
1104
|
total_page = data_json["result"]["pages"]
|
|
1079
|
-
|
|
1105
|
+
temp_list = []
|
|
1106
|
+
tqdm = get_tqdm()
|
|
1080
1107
|
for page in tqdm(range(1, int(total_page) + 1), leave=False):
|
|
1081
1108
|
params.update({"pageNumber": page})
|
|
1082
1109
|
r = requests.get(url, params=params)
|
|
1083
1110
|
data_json = r.json()
|
|
1084
1111
|
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
1085
|
-
|
|
1112
|
+
temp_list.append(temp_df)
|
|
1113
|
+
|
|
1114
|
+
big_df = pd.concat(objs=temp_list, ignore_index=True)
|
|
1086
1115
|
if symbol == "北向资金":
|
|
1087
1116
|
index_name = "沪深300"
|
|
1088
1117
|
elif symbol == "沪股通":
|
|
@@ -1173,7 +1202,7 @@ def stock_hsgt_board_rank_em(
|
|
|
1173
1202
|
"""
|
|
1174
1203
|
url = "https://data.eastmoney.com/hsgtcg/hy.html"
|
|
1175
1204
|
r = requests.get(url)
|
|
1176
|
-
soup = BeautifulSoup(r.text, "lxml")
|
|
1205
|
+
soup = BeautifulSoup(r.text, features="lxml")
|
|
1177
1206
|
current_date = soup.find(attrs={"id": "bkph_date"}).text.strip("(").strip(")")
|
|
1178
1207
|
symbol_map = {
|
|
1179
1208
|
"北向资金增持行业板块排行": "5",
|
|
@@ -1298,30 +1327,43 @@ def stock_hsgt_board_rank_em(
|
|
|
1298
1327
|
return temp_df
|
|
1299
1328
|
|
|
1300
1329
|
|
|
1301
|
-
def
|
|
1330
|
+
def __stock_hsgt_individual_zh_hk_em(symbol: str = "00700") -> pd.DataFrame:
|
|
1302
1331
|
"""
|
|
1303
1332
|
东方财富-数据中心-沪深港通-沪深港通持股-具体股票
|
|
1304
|
-
https://data.eastmoney.com/
|
|
1305
|
-
:param
|
|
1306
|
-
:type
|
|
1333
|
+
https://data.eastmoney.com/hsgt/StockHdDetail/00700.html
|
|
1334
|
+
:param symbol: 股票代码
|
|
1335
|
+
:type symbol: str
|
|
1307
1336
|
:return: 具体股票-沪深港通持股
|
|
1308
1337
|
:rtype: pandas.DataFrame
|
|
1309
1338
|
"""
|
|
1310
|
-
url = "
|
|
1339
|
+
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
|
1311
1340
|
params = {
|
|
1312
1341
|
"sortColumns": "TRADE_DATE",
|
|
1313
1342
|
"sortTypes": "-1",
|
|
1314
1343
|
"pageSize": "500",
|
|
1315
1344
|
"pageNumber": "1",
|
|
1316
|
-
"reportName": "
|
|
1345
|
+
"reportName": "RPT_MUTUAL_STOCK_HOLDRANKS",
|
|
1317
1346
|
"columns": "ALL",
|
|
1318
1347
|
"source": "WEB",
|
|
1319
1348
|
"client": "WEB",
|
|
1320
|
-
"filter": f"""(
|
|
1349
|
+
"filter": f"""(SECUCODE="{symbol}.HK")(MUTUAL_TYPE="002")""",
|
|
1321
1350
|
}
|
|
1322
1351
|
r = requests.get(url, params=params)
|
|
1323
1352
|
data_json = r.json()
|
|
1353
|
+
total_page = data_json["result"]["pages"]
|
|
1324
1354
|
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
1355
|
+
for page in range(1, total_page + 1):
|
|
1356
|
+
params.update({"pageNumber": str(page)})
|
|
1357
|
+
r = requests.get(url, params=params)
|
|
1358
|
+
data_json = r.json()
|
|
1359
|
+
if page == 1:
|
|
1360
|
+
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
1361
|
+
else:
|
|
1362
|
+
temp_df = pd.concat(
|
|
1363
|
+
objs=[temp_df, pd.DataFrame(data_json["result"]["data"])],
|
|
1364
|
+
ignore_index=True,
|
|
1365
|
+
)
|
|
1366
|
+
|
|
1325
1367
|
temp_df.rename(
|
|
1326
1368
|
columns={
|
|
1327
1369
|
"SECURITY_INNER_CODE": "-",
|
|
@@ -1357,18 +1399,135 @@ def stock_hsgt_individual_em(stock: str = "002008") -> pd.DataFrame:
|
|
|
1357
1399
|
"持股市值变化-10日",
|
|
1358
1400
|
]
|
|
1359
1401
|
]
|
|
1360
|
-
temp_df["持股日期"] = pd.to_datetime(temp_df["持股日期"]).dt.date
|
|
1361
|
-
temp_df["当日收盘价"] = pd.to_numeric(temp_df["当日收盘价"])
|
|
1362
|
-
temp_df["当日涨跌幅"] = pd.to_numeric(temp_df["当日涨跌幅"])
|
|
1363
|
-
temp_df["持股数量"] = pd.to_numeric(temp_df["持股数量"])
|
|
1364
|
-
temp_df["持股市值"] = pd.to_numeric(temp_df["持股市值"])
|
|
1365
|
-
temp_df["持股数量占A股百分比"] = pd.to_numeric(
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
temp_df["持股市值变化-
|
|
1402
|
+
temp_df["持股日期"] = pd.to_datetime(temp_df["持股日期"], errors="coerce").dt.date
|
|
1403
|
+
temp_df["当日收盘价"] = pd.to_numeric(temp_df["当日收盘价"], errors="coerce")
|
|
1404
|
+
temp_df["当日涨跌幅"] = pd.to_numeric(temp_df["当日涨跌幅"], errors="coerce")
|
|
1405
|
+
temp_df["持股数量"] = pd.to_numeric(temp_df["持股数量"], errors="coerce")
|
|
1406
|
+
temp_df["持股市值"] = pd.to_numeric(temp_df["持股市值"], errors="coerce")
|
|
1407
|
+
temp_df["持股数量占A股百分比"] = pd.to_numeric(
|
|
1408
|
+
temp_df["持股数量占A股百分比"], errors="coerce"
|
|
1409
|
+
)
|
|
1410
|
+
temp_df["持股市值变化-1日"] = pd.to_numeric(
|
|
1411
|
+
temp_df["持股市值变化-1日"], errors="coerce"
|
|
1412
|
+
)
|
|
1413
|
+
temp_df["持股市值变化-5日"] = pd.to_numeric(
|
|
1414
|
+
temp_df["持股市值变化-5日"], errors="coerce"
|
|
1415
|
+
)
|
|
1416
|
+
temp_df["持股市值变化-10日"] = pd.to_numeric(
|
|
1417
|
+
temp_df["持股市值变化-10日"], errors="coerce"
|
|
1418
|
+
)
|
|
1419
|
+
temp_df.sort_values("持股日期", ignore_index=True, inplace=True)
|
|
1420
|
+
return temp_df
|
|
1421
|
+
|
|
1422
|
+
|
|
1423
|
+
def __stock_hsgt_individual_zh_a_em(symbol: str = "002008") -> pd.DataFrame:
|
|
1424
|
+
"""
|
|
1425
|
+
东方财富-数据中心-沪深港通-沪深港通持股-具体股票
|
|
1426
|
+
https://data.eastmoney.com/hsgt/StockHdStatistics/002008.html
|
|
1427
|
+
:param symbol: 股票代码
|
|
1428
|
+
:type symbol: str
|
|
1429
|
+
:return: 具体股票-沪深港通持股
|
|
1430
|
+
:rtype: pandas.DataFrame
|
|
1431
|
+
"""
|
|
1432
|
+
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
|
1433
|
+
params = {
|
|
1434
|
+
"sortColumns": "TRADE_DATE",
|
|
1435
|
+
"sortTypes": "-1",
|
|
1436
|
+
"pageSize": "500",
|
|
1437
|
+
"pageNumber": "1",
|
|
1438
|
+
"reportName": "RPT_MUTUAL_HOLDSTOCKNDATE_STA",
|
|
1439
|
+
"columns": "ALL",
|
|
1440
|
+
"source": "WEB",
|
|
1441
|
+
"client": "WEB",
|
|
1442
|
+
"filter": f"""(SECURITY_CODE="{symbol}")(INTERVAL_TYPE="1")""",
|
|
1443
|
+
}
|
|
1444
|
+
r = requests.get(url, params=params)
|
|
1445
|
+
data_json = r.json()
|
|
1446
|
+
total_page = data_json["result"]["pages"]
|
|
1447
|
+
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
1448
|
+
for page in range(1, total_page + 1):
|
|
1449
|
+
params.update({"pageNumber": str(page)})
|
|
1450
|
+
r = requests.get(url, params=params)
|
|
1451
|
+
data_json = r.json()
|
|
1452
|
+
if page == 1:
|
|
1453
|
+
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
1454
|
+
else:
|
|
1455
|
+
temp_df = pd.concat(
|
|
1456
|
+
objs=[temp_df, pd.DataFrame(data_json["result"]["data"])],
|
|
1457
|
+
ignore_index=True,
|
|
1458
|
+
)
|
|
1459
|
+
|
|
1460
|
+
temp_df.rename(
|
|
1461
|
+
columns={
|
|
1462
|
+
"SECURITY_INNER_CODE": "-",
|
|
1463
|
+
"SECUCODE": "-",
|
|
1464
|
+
"TRADE_DATE": "持股日期",
|
|
1465
|
+
"SECURITY_CODE": "-",
|
|
1466
|
+
"SECURITY_NAME": "-",
|
|
1467
|
+
"MUTUAL_TYPE": "-",
|
|
1468
|
+
"CHANGE_RATE": "当日涨跌幅",
|
|
1469
|
+
"CLOSE_PRICE": "当日收盘价",
|
|
1470
|
+
"HOLD_SHARES": "持股数量",
|
|
1471
|
+
"HOLD_MARKET_CAP": "持股市值",
|
|
1472
|
+
"A_SHARES_RATIO": "-",
|
|
1473
|
+
"HOLD_SHARES_RATIO": "持股数量占A股百分比",
|
|
1474
|
+
"FREE_SHARES_RATIO": "-",
|
|
1475
|
+
"TOTAL_SHARES_RATIO": "-",
|
|
1476
|
+
"HMC_CHANGE": "今日持股市值变化",
|
|
1477
|
+
"ADD_SHARES_REPAIR": "今日增持股数",
|
|
1478
|
+
"PREDICT_AMC": "今日增持资金",
|
|
1479
|
+
},
|
|
1480
|
+
inplace=True,
|
|
1481
|
+
)
|
|
1482
|
+
temp_df = temp_df[
|
|
1483
|
+
[
|
|
1484
|
+
"持股日期",
|
|
1485
|
+
"当日收盘价",
|
|
1486
|
+
"当日涨跌幅",
|
|
1487
|
+
"持股数量",
|
|
1488
|
+
"持股市值",
|
|
1489
|
+
"持股数量占A股百分比",
|
|
1490
|
+
"今日增持股数",
|
|
1491
|
+
"今日增持资金",
|
|
1492
|
+
"今日持股市值变化",
|
|
1493
|
+
]
|
|
1494
|
+
]
|
|
1495
|
+
temp_df["持股日期"] = pd.to_datetime(temp_df["持股日期"], errors="coerce").dt.date
|
|
1496
|
+
temp_df["当日收盘价"] = pd.to_numeric(temp_df["当日收盘价"], errors="coerce")
|
|
1497
|
+
temp_df["当日涨跌幅"] = pd.to_numeric(temp_df["当日涨跌幅"], errors="coerce")
|
|
1498
|
+
temp_df["持股数量"] = pd.to_numeric(temp_df["持股数量"], errors="coerce")
|
|
1499
|
+
temp_df["持股市值"] = pd.to_numeric(temp_df["持股市值"], errors="coerce")
|
|
1500
|
+
temp_df["持股数量占A股百分比"] = pd.to_numeric(
|
|
1501
|
+
temp_df["持股数量占A股百分比"], errors="coerce"
|
|
1502
|
+
)
|
|
1503
|
+
temp_df["今日增持股数"] = pd.to_numeric(
|
|
1504
|
+
temp_df["今日增持股数"], errors="coerce"
|
|
1505
|
+
)
|
|
1506
|
+
temp_df["今日增持资金"] = pd.to_numeric(
|
|
1507
|
+
temp_df["今日增持资金"], errors="coerce"
|
|
1508
|
+
)
|
|
1509
|
+
temp_df["今日持股市值变化"] = pd.to_numeric(
|
|
1510
|
+
temp_df["今日持股市值变化"], errors="coerce"
|
|
1511
|
+
)
|
|
1512
|
+
temp_df.sort_values("持股日期", ignore_index=True, inplace=True)
|
|
1369
1513
|
return temp_df
|
|
1370
1514
|
|
|
1371
1515
|
|
|
1516
|
+
def stock_hsgt_individual_em(symbol: str = "002008") -> pd.DataFrame:
|
|
1517
|
+
"""
|
|
1518
|
+
东方财富-数据中心-沪深港通-沪深港通持股-具体股票
|
|
1519
|
+
https://data.eastmoney.com/hsgt/StockHdDetail/002008.html
|
|
1520
|
+
:param symbol: 股票代码
|
|
1521
|
+
:type symbol: str
|
|
1522
|
+
:return: 具体股票-沪深港通持股
|
|
1523
|
+
:rtype: pandas.DataFrame
|
|
1524
|
+
"""
|
|
1525
|
+
if len(symbol) == 6:
|
|
1526
|
+
return __stock_hsgt_individual_zh_a_em(symbol=symbol)
|
|
1527
|
+
else:
|
|
1528
|
+
return __stock_hsgt_individual_zh_hk_em(symbol=symbol)
|
|
1529
|
+
|
|
1530
|
+
|
|
1372
1531
|
def stock_hsgt_individual_detail_em(
|
|
1373
1532
|
symbol: str = "002008",
|
|
1374
1533
|
start_date: str = "20220130",
|
|
@@ -1386,7 +1545,7 @@ def stock_hsgt_individual_detail_em(
|
|
|
1386
1545
|
:return: 沪深港通持股-具体股票详情
|
|
1387
1546
|
:rtype: pandas.DataFrame
|
|
1388
1547
|
"""
|
|
1389
|
-
url = "
|
|
1548
|
+
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
|
1390
1549
|
params = {
|
|
1391
1550
|
"sortColumns": "HOLD_DATE",
|
|
1392
1551
|
"sortTypes": "-1",
|
|
@@ -1396,7 +1555,9 @@ def stock_hsgt_individual_detail_em(
|
|
|
1396
1555
|
"columns": "ALL",
|
|
1397
1556
|
"source": "WEB",
|
|
1398
1557
|
"client": "WEB",
|
|
1399
|
-
"filter": f"""(SECURITY_CODE="{symbol}")(MARKET_CODE="003")(HOLD_DATE
|
|
1558
|
+
"filter": f"""(SECURITY_CODE="{symbol}")(MARKET_CODE="003")(HOLD_DATE
|
|
1559
|
+
>='{'-'.join([start_date[:4], start_date[4:6], start_date[6:]])}')(HOLD_DATE
|
|
1560
|
+
<='{'-'.join([end_date[:4], end_date[4:6], end_date[6:]])}')""",
|
|
1400
1561
|
}
|
|
1401
1562
|
r = requests.get(url, params=params)
|
|
1402
1563
|
data_json = r.json()
|
|
@@ -1405,19 +1566,22 @@ def stock_hsgt_individual_detail_em(
|
|
|
1405
1566
|
except TypeError:
|
|
1406
1567
|
params.update(
|
|
1407
1568
|
{
|
|
1408
|
-
"filter": f"""(SECURITY_CODE="{symbol}")(MARKET_CODE="001")(HOLD_DATE
|
|
1569
|
+
"filter": f"""(SECURITY_CODE="{symbol}")(MARKET_CODE="001")(HOLD_DATE
|
|
1570
|
+
>='{'-'.join([start_date[:4], start_date[4:6], start_date[6:]])}')(HOLD_DATE
|
|
1571
|
+
<='{'-'.join([end_date[:4], end_date[4:6], end_date[6:]])}')""",
|
|
1409
1572
|
}
|
|
1410
1573
|
)
|
|
1411
1574
|
r = requests.get(url, params=params)
|
|
1412
1575
|
data_json = r.json()
|
|
1413
1576
|
total_page = data_json["result"]["pages"]
|
|
1414
1577
|
big_df = pd.DataFrame()
|
|
1578
|
+
tqdm = get_tqdm()
|
|
1415
1579
|
for page in tqdm(range(1, int(total_page) + 1), leave=False):
|
|
1416
1580
|
params.update({"pageNumber": page})
|
|
1417
1581
|
r = requests.get(url, params=params)
|
|
1418
1582
|
data_json = r.json()
|
|
1419
1583
|
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
1420
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
1584
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
1421
1585
|
big_df.rename(
|
|
1422
1586
|
columns={
|
|
1423
1587
|
"SECUCODE": "-",
|
|
@@ -1454,15 +1618,23 @@ def stock_hsgt_individual_detail_em(
|
|
|
1454
1618
|
"持股市值变化-10日",
|
|
1455
1619
|
]
|
|
1456
1620
|
]
|
|
1457
|
-
big_df["持股日期"] = pd.to_datetime(big_df["持股日期"]).dt.date
|
|
1458
|
-
big_df["当日收盘价"] = pd.to_numeric(big_df["当日收盘价"])
|
|
1459
|
-
big_df["当日涨跌幅"] = pd.to_numeric(big_df["当日涨跌幅"])
|
|
1460
|
-
big_df["持股数量"] = pd.to_numeric(big_df["持股数量"])
|
|
1461
|
-
big_df["持股市值"] = pd.to_numeric(big_df["持股市值"])
|
|
1462
|
-
big_df["持股数量占A股百分比"] = pd.to_numeric(
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
big_df["持股市值变化-
|
|
1621
|
+
big_df["持股日期"] = pd.to_datetime(big_df["持股日期"], errors="coerce").dt.date
|
|
1622
|
+
big_df["当日收盘价"] = pd.to_numeric(big_df["当日收盘价"], errors="coerce")
|
|
1623
|
+
big_df["当日涨跌幅"] = pd.to_numeric(big_df["当日涨跌幅"], errors="coerce")
|
|
1624
|
+
big_df["持股数量"] = pd.to_numeric(big_df["持股数量"], errors="coerce")
|
|
1625
|
+
big_df["持股市值"] = pd.to_numeric(big_df["持股市值"], errors="coerce")
|
|
1626
|
+
big_df["持股数量占A股百分比"] = pd.to_numeric(
|
|
1627
|
+
big_df["持股数量占A股百分比"], errors="coerce"
|
|
1628
|
+
)
|
|
1629
|
+
big_df["持股市值变化-1日"] = pd.to_numeric(
|
|
1630
|
+
big_df["持股市值变化-1日"], errors="coerce"
|
|
1631
|
+
)
|
|
1632
|
+
big_df["持股市值变化-5日"] = pd.to_numeric(
|
|
1633
|
+
big_df["持股市值变化-5日"], errors="coerce"
|
|
1634
|
+
)
|
|
1635
|
+
big_df["持股市值变化-10日"] = pd.to_numeric(
|
|
1636
|
+
big_df["持股市值变化-10日"], errors="coerce"
|
|
1637
|
+
)
|
|
1466
1638
|
return big_df
|
|
1467
1639
|
|
|
1468
1640
|
|
|
@@ -1499,7 +1671,7 @@ if __name__ == "__main__":
|
|
|
1499
1671
|
print(stock_hsgt_stock_statistics_em_df)
|
|
1500
1672
|
|
|
1501
1673
|
stock_hsgt_stock_statistics_em_df = stock_hsgt_stock_statistics_em(
|
|
1502
|
-
symbol="南向持股", start_date="
|
|
1674
|
+
symbol="南向持股", start_date="20250314", end_date="20250314"
|
|
1503
1675
|
)
|
|
1504
1676
|
print(stock_hsgt_stock_statistics_em_df)
|
|
1505
1677
|
|
|
@@ -1541,7 +1713,7 @@ if __name__ == "__main__":
|
|
|
1541
1713
|
)
|
|
1542
1714
|
print(stock_hsgt_board_rank_em_df)
|
|
1543
1715
|
|
|
1544
|
-
stock_hsgt_individual_em_df = stock_hsgt_individual_em(
|
|
1716
|
+
stock_hsgt_individual_em_df = stock_hsgt_individual_em(symbol="00700")
|
|
1545
1717
|
print(stock_hsgt_individual_em_df)
|
|
1546
1718
|
|
|
1547
1719
|
stock_hsgt_individual_detail_em_df = stock_hsgt_individual_detail_em(
|