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
akshare/stock/stock_fund_em.py
CHANGED
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2025/3/10 19:00
|
|
5
5
|
Desc: 东方财富网-数据中心-资金流向
|
|
6
6
|
https://data.eastmoney.com/zjlx/detail.html
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
|
-
import
|
|
9
|
+
import math
|
|
10
10
|
import time
|
|
11
11
|
from functools import lru_cache
|
|
12
12
|
|
|
13
13
|
import pandas as pd
|
|
14
14
|
import requests
|
|
15
15
|
|
|
16
|
+
from akshare.utils.func import fetch_paginated_data
|
|
17
|
+
from akshare.utils.tqdm import get_tqdm
|
|
18
|
+
|
|
16
19
|
|
|
17
20
|
def stock_individual_fund_flow(
|
|
18
21
|
stock: str = "600094", market: str = "sh"
|
|
@@ -43,8 +46,8 @@ def stock_individual_fund_flow(
|
|
|
43
46
|
"_": int(time.time() * 1000),
|
|
44
47
|
}
|
|
45
48
|
r = requests.get(url, params=params, headers=headers)
|
|
46
|
-
|
|
47
|
-
content_list =
|
|
49
|
+
data_json = r.json()
|
|
50
|
+
content_list = data_json["data"]["klines"]
|
|
48
51
|
temp_df = pd.DataFrame([item.split(",") for item in content_list])
|
|
49
52
|
temp_df.columns = [
|
|
50
53
|
"日期",
|
|
@@ -147,7 +150,7 @@ def stock_individual_fund_flow_rank(indicator: str = "5日") -> pd.DataFrame:
|
|
|
147
150
|
params = {
|
|
148
151
|
"fid": indicator_map[indicator][0],
|
|
149
152
|
"po": "1",
|
|
150
|
-
"pz": "
|
|
153
|
+
"pz": "100",
|
|
151
154
|
"pn": "1",
|
|
152
155
|
"np": "1",
|
|
153
156
|
"fltt": "2",
|
|
@@ -158,7 +161,20 @@ def stock_individual_fund_flow_rank(indicator: str = "5日") -> pd.DataFrame:
|
|
|
158
161
|
}
|
|
159
162
|
r = requests.get(url, params=params)
|
|
160
163
|
data_json = r.json()
|
|
161
|
-
|
|
164
|
+
total_page = math.ceil(data_json["data"]["total"] / 100)
|
|
165
|
+
temp_list = []
|
|
166
|
+
tqdm = get_tqdm()
|
|
167
|
+
for page in tqdm(range(1, total_page + 1), leave=False):
|
|
168
|
+
params.update(
|
|
169
|
+
{
|
|
170
|
+
"pn": page,
|
|
171
|
+
}
|
|
172
|
+
)
|
|
173
|
+
r = requests.get(url, params=params, timeout=15)
|
|
174
|
+
data_json = r.json()
|
|
175
|
+
inner_temp_df = pd.DataFrame(data_json["data"]["diff"])
|
|
176
|
+
temp_list.append(inner_temp_df)
|
|
177
|
+
temp_df = pd.concat(temp_list, ignore_index=True)
|
|
162
178
|
temp_df.reset_index(inplace=True)
|
|
163
179
|
temp_df["index"] = range(1, len(temp_df) + 1)
|
|
164
180
|
if indicator == "今日":
|
|
@@ -348,13 +364,11 @@ def stock_market_fund_flow() -> pd.DataFrame:
|
|
|
348
364
|
"fields1": "f1,f2,f3,f7",
|
|
349
365
|
"fields2": "f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64,f65",
|
|
350
366
|
"ut": "b2884a393a59ad64002292a3e90d46a5",
|
|
351
|
-
"cb": "jQuery183003743205523325188_1589197499471",
|
|
352
367
|
"_": int(time.time() * 1000),
|
|
353
368
|
}
|
|
354
369
|
r = requests.get(url, params=params, headers=headers)
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
content_list = json_data["data"]["klines"]
|
|
370
|
+
data_json = r.json()
|
|
371
|
+
content_list = data_json["data"]["klines"]
|
|
358
372
|
temp_df = pd.DataFrame([item.split(",") for item in content_list])
|
|
359
373
|
temp_df.columns = [
|
|
360
374
|
"日期",
|
|
@@ -468,7 +482,7 @@ def stock_sector_fund_flow_rank(
|
|
|
468
482
|
}
|
|
469
483
|
params = {
|
|
470
484
|
"pn": "1",
|
|
471
|
-
"pz": "
|
|
485
|
+
"pz": "100",
|
|
472
486
|
"po": "1",
|
|
473
487
|
"np": "1",
|
|
474
488
|
"ut": "b2884a393a59ad64002292a3e90d46a5",
|
|
@@ -479,13 +493,25 @@ def stock_sector_fund_flow_rank(
|
|
|
479
493
|
"stat": indicator_map[indicator][1],
|
|
480
494
|
"fields": indicator_map[indicator][2],
|
|
481
495
|
"rt": "52975239",
|
|
482
|
-
"cb": "jQuery18308357908311220152_1589256588824",
|
|
483
496
|
"_": int(time.time() * 1000),
|
|
484
497
|
}
|
|
485
498
|
r = requests.get(url, params=params, headers=headers)
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
499
|
+
data_json = r.json()
|
|
500
|
+
total_page = math.ceil(data_json["data"]["total"] / 100)
|
|
501
|
+
temp_list = []
|
|
502
|
+
tqdm = get_tqdm()
|
|
503
|
+
for page in tqdm(range(1, total_page + 1), leave=False):
|
|
504
|
+
params.update(
|
|
505
|
+
{
|
|
506
|
+
"pn": page,
|
|
507
|
+
}
|
|
508
|
+
)
|
|
509
|
+
r = requests.get(url, params=params, timeout=15)
|
|
510
|
+
data_json = r.json()
|
|
511
|
+
inner_temp_df = pd.DataFrame(data_json["data"]["diff"])
|
|
512
|
+
temp_list.append(inner_temp_df)
|
|
513
|
+
temp_df = pd.concat(temp_list, ignore_index=True)
|
|
514
|
+
|
|
489
515
|
if indicator == "今日":
|
|
490
516
|
temp_df.columns = [
|
|
491
517
|
"-",
|
|
@@ -630,28 +656,19 @@ def _get_stock_sector_fund_flow_summary_code() -> dict:
|
|
|
630
656
|
:rtype: dict
|
|
631
657
|
"""
|
|
632
658
|
url = "https://push2.eastmoney.com/api/qt/clist/get"
|
|
633
|
-
headers = {
|
|
634
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
|
|
635
|
-
"(KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36",
|
|
636
|
-
}
|
|
637
659
|
params = {
|
|
638
|
-
"
|
|
639
|
-
"pz": "5000",
|
|
660
|
+
"fid": "f62",
|
|
640
661
|
"po": "1",
|
|
662
|
+
"pz": "100",
|
|
663
|
+
"pn": "1",
|
|
641
664
|
"np": "1",
|
|
642
|
-
"ut": "b2884a393a59ad64002292a3e90d46a5",
|
|
643
665
|
"fltt": "2",
|
|
644
666
|
"invt": "2",
|
|
645
|
-
"
|
|
667
|
+
"ut": "8dec03ba335b81bf4ebdf7b29ec27d15",
|
|
646
668
|
"fs": "m:90 t:2",
|
|
647
|
-
"
|
|
648
|
-
"fields": "f12,f14,f2,f3,f62,f184,f66,f69,f72,f75,f78,f81,f84,f87,f204,f205,f124",
|
|
649
|
-
"rt": "52975239",
|
|
650
|
-
"_": int(time.time() * 1000),
|
|
669
|
+
"fields": "f12,f14,f2,f3,f62,f184,f66,f69,f72,f75,f78,f81,f84,f87,f204,f205,f124,f1,f13",
|
|
651
670
|
}
|
|
652
|
-
|
|
653
|
-
data_json = r.json()
|
|
654
|
-
temp_df = pd.DataFrame(data_json["data"]["diff"])
|
|
671
|
+
temp_df = fetch_paginated_data(url, params)
|
|
655
672
|
name_code_map = dict(zip(temp_df["f14"], temp_df["f12"]))
|
|
656
673
|
return name_code_map
|
|
657
674
|
|
|
@@ -675,9 +692,9 @@ def stock_sector_fund_flow_summary(
|
|
|
675
692
|
params = {
|
|
676
693
|
"fid": "f62",
|
|
677
694
|
"po": "1",
|
|
678
|
-
"pz": "
|
|
695
|
+
"pz": "5000",
|
|
679
696
|
"pn": "1",
|
|
680
|
-
"np": "
|
|
697
|
+
"np": "2",
|
|
681
698
|
"fltt": "2",
|
|
682
699
|
"invt": "2",
|
|
683
700
|
"fs": f"b:{code_name_map[symbol]}",
|
|
@@ -685,9 +702,9 @@ def stock_sector_fund_flow_summary(
|
|
|
685
702
|
}
|
|
686
703
|
r = requests.get(url, params=params)
|
|
687
704
|
data_json = r.json()
|
|
688
|
-
temp_df = pd.DataFrame(data_json["data"]["diff"])
|
|
705
|
+
temp_df = pd.DataFrame(data_json["data"]["diff"]).T
|
|
689
706
|
temp_df.reset_index(inplace=True)
|
|
690
|
-
temp_df["index"] = temp_df["index"] + 1
|
|
707
|
+
temp_df["index"] = temp_df["index"].astype(int) + 1
|
|
691
708
|
temp_df.rename(
|
|
692
709
|
columns={
|
|
693
710
|
"index": "序号",
|
|
@@ -764,9 +781,9 @@ def stock_sector_fund_flow_summary(
|
|
|
764
781
|
params = {
|
|
765
782
|
"fid": "f164",
|
|
766
783
|
"po": "1",
|
|
767
|
-
"pz": "
|
|
784
|
+
"pz": "50000",
|
|
768
785
|
"pn": "1",
|
|
769
|
-
"np": "
|
|
786
|
+
"np": "2",
|
|
770
787
|
"fltt": "2",
|
|
771
788
|
"invt": "2",
|
|
772
789
|
"fs": f"b:{code_name_map[symbol]}",
|
|
@@ -774,9 +791,9 @@ def stock_sector_fund_flow_summary(
|
|
|
774
791
|
}
|
|
775
792
|
r = requests.get(url, params=params)
|
|
776
793
|
data_json = r.json()
|
|
777
|
-
temp_df = pd.DataFrame(data_json["data"]["diff"])
|
|
794
|
+
temp_df = pd.DataFrame(data_json["data"]["diff"]).T
|
|
778
795
|
temp_df.reset_index(inplace=True)
|
|
779
|
-
temp_df["index"] = temp_df["index"] + 1
|
|
796
|
+
temp_df["index"] = temp_df["index"].astype(int) + 1
|
|
780
797
|
temp_df.rename(
|
|
781
798
|
columns={
|
|
782
799
|
"index": "序号",
|
|
@@ -853,9 +870,9 @@ def stock_sector_fund_flow_summary(
|
|
|
853
870
|
params = {
|
|
854
871
|
"fid": "f174",
|
|
855
872
|
"po": "1",
|
|
856
|
-
"pz": "
|
|
873
|
+
"pz": "50000",
|
|
857
874
|
"pn": "1",
|
|
858
|
-
"np": "
|
|
875
|
+
"np": "2",
|
|
859
876
|
"fltt": "2",
|
|
860
877
|
"invt": "2",
|
|
861
878
|
"fs": f"b:{code_name_map[symbol]}",
|
|
@@ -863,9 +880,9 @@ def stock_sector_fund_flow_summary(
|
|
|
863
880
|
}
|
|
864
881
|
r = requests.get(url, params=params)
|
|
865
882
|
data_json = r.json()
|
|
866
|
-
temp_df = pd.DataFrame(data_json["data"]["diff"])
|
|
883
|
+
temp_df = pd.DataFrame(data_json["data"]["diff"]).T
|
|
867
884
|
temp_df.reset_index(inplace=True)
|
|
868
|
-
temp_df["index"] = temp_df["index"] + 1
|
|
885
|
+
temp_df["index"] = temp_df["index"].astype(int) + 1
|
|
869
886
|
temp_df.rename(
|
|
870
887
|
columns={
|
|
871
888
|
"index": "序号",
|
|
@@ -938,9 +955,11 @@ def stock_sector_fund_flow_summary(
|
|
|
938
955
|
temp_df["10日小单净流入-净占比"], errors="coerce"
|
|
939
956
|
)
|
|
940
957
|
return temp_df
|
|
958
|
+
else:
|
|
959
|
+
return pd.DataFrame()
|
|
941
960
|
|
|
942
961
|
|
|
943
|
-
def stock_sector_fund_flow_hist(symbol: str = "
|
|
962
|
+
def stock_sector_fund_flow_hist(symbol: str = "汽车服务") -> pd.DataFrame:
|
|
944
963
|
"""
|
|
945
964
|
东方财富网-数据中心-资金流向-行业资金流-行业历史资金流
|
|
946
965
|
https://data.eastmoney.com/bkzj/BK1034.html
|
|
@@ -957,7 +976,6 @@ def stock_sector_fund_flow_hist(symbol: str = "电源设备") -> pd.DataFrame:
|
|
|
957
976
|
"fields1": "f1,f2,f3,f7",
|
|
958
977
|
"fields2": "f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64,f65",
|
|
959
978
|
"secid": f"90.{code_name_map[symbol]}",
|
|
960
|
-
"_": "1678954135116",
|
|
961
979
|
}
|
|
962
980
|
r = requests.get(url, params=params)
|
|
963
981
|
data_json = r.json()
|
|
@@ -1024,7 +1042,7 @@ def stock_sector_fund_flow_hist(symbol: str = "电源设备") -> pd.DataFrame:
|
|
|
1024
1042
|
temp_df["小单净流入-净占比"] = pd.to_numeric(
|
|
1025
1043
|
temp_df["小单净流入-净占比"], errors="coerce"
|
|
1026
1044
|
)
|
|
1027
|
-
temp_df["日期"] = pd.to_datetime(temp_df["日期"]).dt.date
|
|
1045
|
+
temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
|
|
1028
1046
|
return temp_df
|
|
1029
1047
|
|
|
1030
1048
|
|
|
@@ -1037,29 +1055,23 @@ def _get_stock_concept_fund_flow_summary_code() -> dict:
|
|
|
1037
1055
|
:rtype: dict
|
|
1038
1056
|
"""
|
|
1039
1057
|
url = "https://push2.eastmoney.com/api/qt/clist/get"
|
|
1040
|
-
headers = {
|
|
1041
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
|
|
1042
|
-
"(KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36",
|
|
1043
|
-
}
|
|
1044
1058
|
params = {
|
|
1045
1059
|
"pn": "1",
|
|
1046
|
-
"pz": "
|
|
1060
|
+
"pz": "100",
|
|
1047
1061
|
"po": "1",
|
|
1048
1062
|
"np": "1",
|
|
1049
|
-
"fields": "f12,f13,f14,f62",
|
|
1063
|
+
"fields": "f3,f12,f13,f14,f62",
|
|
1050
1064
|
"fid": "f62",
|
|
1051
1065
|
"fs": "m:90+t:3",
|
|
1052
1066
|
"ut": "b2884a393a59ad64002292a3e90d46a5",
|
|
1053
1067
|
"_": int(time.time() * 1000),
|
|
1054
1068
|
}
|
|
1055
|
-
|
|
1056
|
-
data_json = r.json()
|
|
1057
|
-
temp_df = pd.DataFrame(data_json["data"]["diff"])
|
|
1069
|
+
temp_df = fetch_paginated_data(url, params)
|
|
1058
1070
|
name_code_map = dict(zip(temp_df["f14"], temp_df["f12"]))
|
|
1059
1071
|
return name_code_map
|
|
1060
1072
|
|
|
1061
1073
|
|
|
1062
|
-
def stock_concept_fund_flow_hist(symbol: str = "
|
|
1074
|
+
def stock_concept_fund_flow_hist(symbol: str = "数据要素") -> pd.DataFrame:
|
|
1063
1075
|
"""
|
|
1064
1076
|
东方财富网-数据中心-资金流向-概念资金流-概念历史资金流
|
|
1065
1077
|
https://data.eastmoney.com/bkzj/BK0574.html
|
|
@@ -1076,7 +1088,6 @@ def stock_concept_fund_flow_hist(symbol: str = "锂电池") -> pd.DataFrame:
|
|
|
1076
1088
|
"fields1": "f1,f2,f3,f7",
|
|
1077
1089
|
"fields2": "f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64,f65",
|
|
1078
1090
|
"secid": f"90.{code_name_map[symbol]}",
|
|
1079
|
-
"_": "1678954135116",
|
|
1080
1091
|
}
|
|
1081
1092
|
r = requests.get(url, params=params)
|
|
1082
1093
|
data_json = r.json()
|
|
@@ -1170,7 +1181,7 @@ def stock_main_fund_flow(symbol: str = "全部股票") -> pd.DataFrame:
|
|
|
1170
1181
|
params = {
|
|
1171
1182
|
"fid": "f184",
|
|
1172
1183
|
"po": "1",
|
|
1173
|
-
"pz": "
|
|
1184
|
+
"pz": "100",
|
|
1174
1185
|
"pn": "1",
|
|
1175
1186
|
"np": "1",
|
|
1176
1187
|
"fltt": "2",
|
|
@@ -1179,10 +1190,7 @@ def stock_main_fund_flow(symbol: str = "全部股票") -> pd.DataFrame:
|
|
|
1179
1190
|
"ut": "b2884a393a59ad64002292a3e90d46a5",
|
|
1180
1191
|
"fs": symbol_map[symbol],
|
|
1181
1192
|
}
|
|
1182
|
-
|
|
1183
|
-
data_json = r.json()
|
|
1184
|
-
temp_df = pd.DataFrame(data_json["data"]["diff"])
|
|
1185
|
-
temp_df.reset_index(inplace=True)
|
|
1193
|
+
temp_df = fetch_paginated_data(url, params)
|
|
1186
1194
|
temp_df.rename(
|
|
1187
1195
|
columns={
|
|
1188
1196
|
"index": "序号",
|
|
@@ -1296,14 +1304,14 @@ if __name__ == "__main__":
|
|
|
1296
1304
|
print(stock_sector_fund_flow_rank_df)
|
|
1297
1305
|
|
|
1298
1306
|
stock_sector_fund_flow_summary_df = stock_sector_fund_flow_summary(
|
|
1299
|
-
symbol="
|
|
1307
|
+
symbol="文化传媒", indicator="今日"
|
|
1300
1308
|
)
|
|
1301
1309
|
print(stock_sector_fund_flow_summary_df)
|
|
1302
1310
|
|
|
1303
|
-
stock_sector_fund_flow_hist_df = stock_sector_fund_flow_hist(symbol="
|
|
1311
|
+
stock_sector_fund_flow_hist_df = stock_sector_fund_flow_hist(symbol="汽车服务")
|
|
1304
1312
|
print(stock_sector_fund_flow_hist_df)
|
|
1305
1313
|
|
|
1306
|
-
stock_concept_fund_flow_hist_df = stock_concept_fund_flow_hist(symbol="
|
|
1314
|
+
stock_concept_fund_flow_hist_df = stock_concept_fund_flow_hist(symbol="半导体概念")
|
|
1307
1315
|
print(stock_concept_fund_flow_hist_df)
|
|
1308
1316
|
|
|
1309
1317
|
stock_main_fund_flow_df = stock_main_fund_flow(symbol="全部股票")
|
akshare/stock/stock_fund_hold.py
CHANGED
|
@@ -5,11 +5,10 @@ Date: 2021/12/19 13:09
|
|
|
5
5
|
Desc: 东方财富网-数据中心-主力数据-基金持仓
|
|
6
6
|
http://data.eastmoney.com/zlsj/2020-06-30-1-2.html
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
import pandas as pd
|
|
9
10
|
import requests
|
|
10
11
|
|
|
11
|
-
from akshare.utils import demjson
|
|
12
|
-
|
|
13
12
|
|
|
14
13
|
def stock_report_fund_hold(
|
|
15
14
|
symbol: str = "基金持仓", date: str = "20210331"
|
akshare/stock/stock_gsrl_em.py
CHANGED
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# -*- coding:utf-8 -*-
|
|
3
|
+
"""
|
|
4
|
+
Date: 2025/9/24 15:00
|
|
5
|
+
Desc: 东方财富-港股-行业对比
|
|
6
|
+
https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/IndustryComparison
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import pandas as pd
|
|
10
|
+
import requests
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def stock_hk_growth_comparison_em(symbol: str = "03900") -> pd.DataFrame:
|
|
14
|
+
"""
|
|
15
|
+
东方财富-港股-行业对比-成长性对比
|
|
16
|
+
https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/IndustryComparison
|
|
17
|
+
:param symbol: 股票代码
|
|
18
|
+
:type symbol: str
|
|
19
|
+
:return: 成长性对比
|
|
20
|
+
:rtype: pandas.DataFrame
|
|
21
|
+
"""
|
|
22
|
+
url = 'https://datacenter.eastmoney.com/securities/api/data/v1/get'
|
|
23
|
+
params = {
|
|
24
|
+
'reportName': 'RPT_PCF10_INDUSTRY_HKGROWTH',
|
|
25
|
+
'columns': 'SECUCODE,SECURITY_CODE,ORG_CODE,REPORT_DATE,TYPE_ID,TYPE_TYPE,'
|
|
26
|
+
'TYPE_NAME,TYPE_NAME_EN,CORRE_SECURITY_CODE,CORRE_SECUCODE,'
|
|
27
|
+
'CORRE_SECURITY_NAME,EPS_YOY,OPERATE_INCOME_YOY,OPERATE_PROFIT_YOY,'
|
|
28
|
+
'TOTAL_ASSET_YOY,EPS_YOY_RANK,OPINCOME_YOY_RANK,OPROFIT_YOY_RANK,TOASSET_YOY_RANK',
|
|
29
|
+
'quoteColumns': '',
|
|
30
|
+
'filter': f'(SECUCODE="{symbol}.HK")(CORRE_SECUCODE="{symbol}.HK")',
|
|
31
|
+
'pageNumber': '1',
|
|
32
|
+
'pageSize': '',
|
|
33
|
+
'sortTypes': '',
|
|
34
|
+
'sortColumns': '',
|
|
35
|
+
'source': 'F10',
|
|
36
|
+
'client': 'PC',
|
|
37
|
+
'v': '03313416193688571'
|
|
38
|
+
}
|
|
39
|
+
r = requests.get(url, params=params)
|
|
40
|
+
data_json = r.json()
|
|
41
|
+
field_mapping = {
|
|
42
|
+
'CORRE_SECURITY_CODE': '代码',
|
|
43
|
+
'CORRE_SECURITY_NAME': '简称',
|
|
44
|
+
'EPS_YOY': '基本每股收益同比增长率',
|
|
45
|
+
'EPS_YOY_RANK': '基本每股收益同比增长率排名',
|
|
46
|
+
'OPERATE_INCOME_YOY': '营业收入同比增长率',
|
|
47
|
+
'OPINCOME_YOY_RANK': '营业收入同比增长率排名',
|
|
48
|
+
'OPERATE_PROFIT_YOY': '营业利润率同比增长率',
|
|
49
|
+
'OPROFIT_YOY_RANK': '营业利润率同比增长率排名',
|
|
50
|
+
'TOTAL_ASSET_YOY': '基本每股收总资产同比增长率益同比增长率',
|
|
51
|
+
'TOASSET_YOY_RANK': '总资产同比增长率排名',
|
|
52
|
+
}
|
|
53
|
+
temp_df = pd.DataFrame(columns=field_mapping.values())
|
|
54
|
+
if data_json['result'] is not None:
|
|
55
|
+
temp_df = pd.DataFrame(data_json['result']['data'])
|
|
56
|
+
temp_df.rename(columns=field_mapping, inplace=True)
|
|
57
|
+
temp_df = temp_df[field_mapping.values()]
|
|
58
|
+
return temp_df
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def stock_hk_valuation_comparison_em(symbol: str = "03900") -> pd.DataFrame:
|
|
62
|
+
"""
|
|
63
|
+
东方财富-港股-行业对比-估值对比
|
|
64
|
+
https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/IndustryComparison
|
|
65
|
+
:param symbol: 股票代码
|
|
66
|
+
:type symbol: str
|
|
67
|
+
:return: 估值对比
|
|
68
|
+
:rtype: pandas.DataFrame
|
|
69
|
+
"""
|
|
70
|
+
url = 'https://datacenter.eastmoney.com/securities/api/data/v1/get'
|
|
71
|
+
params = {
|
|
72
|
+
'reportName': 'RPT_PCF10_INDUSTRY_HKCVALUE',
|
|
73
|
+
'columns': 'SECUCODE,SECURITY_CODE,ORG_CODE,REPORT_DATE,TYPE_ID,'
|
|
74
|
+
'TYPE_TYPE,TYPE_NAME,TYPE_NAME_EN,CORRE_SECURITY_CODE,'
|
|
75
|
+
'CORRE_SECUCODE,CORRE_SECURITY_NAME,PE_TTM,PE_LYR,PB_MQR,'
|
|
76
|
+
'PB_LYR,PS_TTM,PS_LYR,PCE_TTM,PCE_LYR,PE_TTM_RANK,PE_LYR_RANK,'
|
|
77
|
+
'PB_MQR_RANK,PB_LYR_RANK,PS_TTM_RANK,PS_LYR_RANK,PCE_TTM_RANK,PCE_LYR_RANK',
|
|
78
|
+
'quoteColumns': '',
|
|
79
|
+
'filter': f'(SECUCODE="{symbol}.HK")(CORRE_SECUCODE="{symbol}.HK")',
|
|
80
|
+
'pageNumber': '1',
|
|
81
|
+
'pageSize': '',
|
|
82
|
+
'sortTypes': '',
|
|
83
|
+
'sortColumns': '',
|
|
84
|
+
'source': 'F10',
|
|
85
|
+
'client': 'PC',
|
|
86
|
+
'v': '03445297742754925'
|
|
87
|
+
}
|
|
88
|
+
r = requests.get(url, params=params)
|
|
89
|
+
data_json = r.json()
|
|
90
|
+
field_mapping = {
|
|
91
|
+
'CORRE_SECURITY_CODE': '代码',
|
|
92
|
+
'CORRE_SECURITY_NAME': '简称',
|
|
93
|
+
'PE_TTM': '市盈率-TTM',
|
|
94
|
+
'PE_TTM_RANK': '市盈率-TTM排名',
|
|
95
|
+
'PE_LYR': '市盈率-LYR',
|
|
96
|
+
'PE_LYR_RANK': '市盈率-LYR排名',
|
|
97
|
+
'PB_MQR': '市净率-MRQ',
|
|
98
|
+
'PB_MQR_RANK': '市净率-MRQ排名',
|
|
99
|
+
'PB_LYR': '市净率-LYR',
|
|
100
|
+
'PB_LYR_RANK': '市净率-LYR排名',
|
|
101
|
+
'PS_TTM': '市销率-TTM',
|
|
102
|
+
'PS_TTM_RANK': '市销率-TTM排名',
|
|
103
|
+
'PS_LYR': '市销率-LYR',
|
|
104
|
+
'PS_LYR_RANK': '市销率-LYR排名',
|
|
105
|
+
'PCE_TTM': '市现率-TTM',
|
|
106
|
+
'PCE_TTM_RANK': '市现率-TTM排名',
|
|
107
|
+
'PCE_LYR': '市现率-LYR',
|
|
108
|
+
'PCE_LYR_RANK': '市现率-LYR排名',
|
|
109
|
+
}
|
|
110
|
+
temp_df = pd.DataFrame(columns=field_mapping.values())
|
|
111
|
+
if data_json['result'] is not None:
|
|
112
|
+
temp_df = pd.DataFrame(data_json['result']['data'])
|
|
113
|
+
temp_df.rename(columns=field_mapping, inplace=True)
|
|
114
|
+
temp_df = temp_df[field_mapping.values()]
|
|
115
|
+
return temp_df
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def stock_hk_scale_comparison_em(symbol: str = "03900") -> pd.DataFrame:
|
|
119
|
+
"""
|
|
120
|
+
东方财富-港股-行业对比-规模对比
|
|
121
|
+
https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/IndustryComparison
|
|
122
|
+
:param symbol: 股票代码
|
|
123
|
+
:type symbol: str
|
|
124
|
+
:return: 规模对比
|
|
125
|
+
:rtype: pandas.DataFrame
|
|
126
|
+
"""
|
|
127
|
+
url = 'https://datacenter.eastmoney.com/securities/api/data/v1/get'
|
|
128
|
+
params = {
|
|
129
|
+
'reportName': 'RPT_PCF10_INDUSTRY_SCALE',
|
|
130
|
+
'columns': 'SECURITY_CODE,SECUCODE,TYPE_ID,TYPE_TYPE,TYPE_NAME,'
|
|
131
|
+
'TYPE_NAME_EN,CORRE_SECURITY_CODE,CORRE_SECUCODE,'
|
|
132
|
+
'CORRE_SECURITY_NAME,MAXSTDREPORTDATE,HKSDQMV,'
|
|
133
|
+
'HKTOTAL_MARKET_CAP,OPERATE_INCOME,GROSS_PROFIT,'
|
|
134
|
+
'HKSDQMV_RANK,HKTOTAL_CAP_RANK,OPERATE_INCOME_RANK,GROSS_PROFIT_RANK',
|
|
135
|
+
'quoteColumns': '',
|
|
136
|
+
'filter': f'(SECUCODE="{symbol}.HK")(CORRE_SECUCODE="{symbol}.HK")',
|
|
137
|
+
'pageNumber': '1',
|
|
138
|
+
'pageSize': '',
|
|
139
|
+
'sortTypes': '',
|
|
140
|
+
'sortColumns': '',
|
|
141
|
+
'source': 'F10',
|
|
142
|
+
'client': 'PC',
|
|
143
|
+
'v': '07839693368708753'
|
|
144
|
+
}
|
|
145
|
+
r = requests.get(url, params=params)
|
|
146
|
+
data_json = r.json()
|
|
147
|
+
field_mapping = {
|
|
148
|
+
'CORRE_SECURITY_CODE': '代码',
|
|
149
|
+
'CORRE_SECURITY_NAME': '简称',
|
|
150
|
+
'HKSDQMV': '总市值',
|
|
151
|
+
'HKSDQMV_RANK': '总市值排名',
|
|
152
|
+
'HKTOTAL_MARKET_CAP': '流通市值',
|
|
153
|
+
'HKTOTAL_CAP_RANK': '流通市值排名',
|
|
154
|
+
'OPERATE_INCOME': '营业总收入',
|
|
155
|
+
'OPERATE_INCOME_RANK': '营业总收入排名',
|
|
156
|
+
'GROSS_PROFIT': '净利润',
|
|
157
|
+
'GROSS_PROFIT_RANK': '净利润排名',
|
|
158
|
+
}
|
|
159
|
+
temp_df = pd.DataFrame(columns=field_mapping.values())
|
|
160
|
+
if data_json['result'] is not None:
|
|
161
|
+
temp_df = pd.DataFrame(data_json['result']['data'])
|
|
162
|
+
temp_df.rename(columns=field_mapping, inplace=True)
|
|
163
|
+
temp_df = temp_df[field_mapping.values()]
|
|
164
|
+
return temp_df
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
if __name__ == "__main__":
|
|
168
|
+
stock_hk_growth_comparison_em_df = stock_hk_growth_comparison_em(symbol="03900")
|
|
169
|
+
print(stock_hk_growth_comparison_em_df)
|
|
170
|
+
|
|
171
|
+
stock_hk_valuation_comparison_em_df = stock_hk_valuation_comparison_em(symbol="03900")
|
|
172
|
+
print(stock_hk_valuation_comparison_em_df)
|
|
173
|
+
|
|
174
|
+
stock_hk_scale_comparison_em_df = stock_hk_scale_comparison_em(symbol="03900")
|
|
175
|
+
print(stock_hk_scale_comparison_em_df)
|
akshare/stock/stock_hk_famous.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2025/2/24 18:30
|
|
5
5
|
Desc: 东方财富网-行情中心-港股市场-知名港股
|
|
6
6
|
https://quote.eastmoney.com/center/gridlist.html#hk_wellknown
|
|
7
7
|
"""
|
|
@@ -20,9 +20,9 @@ def stock_hk_famous_spot_em() -> pd.DataFrame:
|
|
|
20
20
|
url = "https://69.push2.eastmoney.com/api/qt/clist/get"
|
|
21
21
|
params = {
|
|
22
22
|
"pn": "1",
|
|
23
|
-
"pz": "
|
|
23
|
+
"pz": "50000",
|
|
24
24
|
"po": "1",
|
|
25
|
-
"np": "
|
|
25
|
+
"np": "2",
|
|
26
26
|
"ut": "bd1d9ddb04089700cf9c27f6f7426281",
|
|
27
27
|
"fltt": "2",
|
|
28
28
|
"invt": "2",
|
|
@@ -32,11 +32,10 @@ def stock_hk_famous_spot_em() -> pd.DataFrame:
|
|
|
32
32
|
"fs": "b:DLMK0106",
|
|
33
33
|
"fields": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,"
|
|
34
34
|
"f25,f26,f22,f33,f11,f62,f128,f136,f115,f152",
|
|
35
|
-
"_": "1631271634231",
|
|
36
35
|
}
|
|
37
36
|
r = requests.get(url, params=params)
|
|
38
37
|
data_json = r.json()
|
|
39
|
-
temp_df = pd.DataFrame(data_json["data"]["diff"])
|
|
38
|
+
temp_df = pd.DataFrame(data_json["data"]["diff"]).T
|
|
40
39
|
temp_df.columns = [
|
|
41
40
|
"_",
|
|
42
41
|
"最新价",
|
|
@@ -5,6 +5,7 @@ Date: 2024/1/16 15:30
|
|
|
5
5
|
Desc: 同花顺-港股-分红派息
|
|
6
6
|
https://stockpage.10jqka.com.cn/HK0700/bonus/
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
from io import StringIO
|
|
9
10
|
|
|
10
11
|
import pandas as pd
|
|
@@ -57,7 +58,7 @@ def stock_hk_fhpx_detail_ths(symbol: str = "0700") -> pd.DataFrame:
|
|
|
57
58
|
temp_df["过户日期起止日-截止"] = pd.to_datetime(
|
|
58
59
|
temp_df["过户日期起止日-截止"], format="%Y-%m-%d", errors="coerce"
|
|
59
60
|
).dt.date
|
|
60
|
-
temp_df.sort_values([
|
|
61
|
+
temp_df.sort_values(["公告日期"], inplace=True, ignore_index=True)
|
|
61
62
|
return temp_df
|
|
62
63
|
|
|
63
64
|
|