akshare 1.12.99__py3-none-any.whl → 1.15.73__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.
Potentially problematic release.
This version of akshare might be problematic. Click here for more details.
- akshare/__init__.py +442 -138
- akshare/air/air_hebei.py +79 -53
- akshare/air/air_zhenqi.py +29 -43
- akshare/air/sunrise_tad.py +32 -17
- akshare/bank/bank_cbirc_2020.py +12 -9
- akshare/bond/bond_cb_ths.py +17 -9
- akshare/bond/bond_china.py +38 -39
- akshare/bond/bond_china_money.py +75 -48
- akshare/bond/bond_info_cm.py +28 -8
- akshare/bond/bond_issue_cninfo.py +73 -30
- akshare/bond/bond_zh_cov.py +1 -1
- akshare/bond/bond_zh_sina.py +57 -51
- akshare/cal/__init__.py +0 -0
- akshare/cal/rv.py +170 -0
- akshare/cost/cost_living.py +7 -5
- akshare/currency/currency_safe.py +7 -6
- akshare/data/cninfo.js +15 -0
- akshare/datasets.py +10 -21
- akshare/economic/macro_bank.py +95 -653
- akshare/economic/macro_china.py +772 -1024
- akshare/economic/macro_china_hk.py +65 -243
- akshare/economic/macro_china_nbs.py +24 -7
- akshare/economic/macro_constitute.py +17 -12
- akshare/economic/macro_euro.py +13 -6
- akshare/economic/macro_finance_ths.py +133 -0
- akshare/economic/macro_info_ws.py +100 -0
- akshare/economic/macro_japan.py +5 -4
- akshare/economic/macro_other.py +12 -9
- akshare/economic/macro_usa.py +376 -1940
- akshare/economic/marco_cnbs.py +11 -6
- akshare/energy/energy_carbon.py +94 -125
- akshare/event/migration.py +3 -2
- akshare/exceptions.py +43 -0
- akshare/file_fold/calendar.json +245 -2
- akshare/fortune/fortune_500.py +15 -48
- akshare/fund/fund_amac.py +157 -75
- akshare/fund/fund_em.py +191 -184
- akshare/fund/fund_etf_em.py +16 -15
- akshare/fund/fund_etf_sina.py +71 -23
- akshare/fund/fund_etf_ths.py +93 -0
- akshare/fund/fund_fee_em.py +98 -0
- akshare/fund/fund_portfolio_em.py +60 -50
- akshare/fund/fund_rank_em.py +91 -82
- akshare/fund/fund_report_cninfo.py +63 -48
- akshare/fund/fund_scale_sina.py +20 -10
- akshare/fund/fund_xq.py +139 -109
- akshare/futures/cons.py +8 -31
- akshare/futures/cot.py +185 -137
- akshare/futures/futures_basis.py +97 -32
- akshare/futures/futures_comm_ctp.py +37 -0
- akshare/futures/futures_comm_qihuo.py +74 -45
- akshare/futures/futures_daily_bar.py +121 -184
- akshare/futures/futures_hf_em.py +66 -61
- akshare/futures/futures_hq_sina.py +79 -61
- akshare/futures/futures_index_ccidx.py +6 -3
- akshare/futures/futures_inventory_99.py +61 -272
- akshare/futures/futures_news_shmet.py +4 -2
- akshare/futures/futures_roll_yield.py +12 -25
- akshare/futures/futures_spot_stock_em.py +19 -13
- akshare/futures/futures_stock_js.py +14 -12
- akshare/futures/futures_to_spot.py +38 -33
- akshare/futures/futures_warehouse_receipt.py +75 -71
- akshare/futures/futures_zh_sina.py +5 -5
- akshare/futures/symbol_var.py +18 -13
- akshare/futures_derivative/futures_contract_info_czce.py +60 -52
- akshare/futures_derivative/futures_contract_info_ine.py +43 -34
- akshare/futures_derivative/futures_contract_info_shfe.py +46 -35
- akshare/futures_derivative/futures_cot_sina.py +26 -19
- akshare/futures_derivative/futures_spot_sys.py +21 -8
- akshare/fx/currency_investing.py +19 -285
- akshare/index/index_cflp.py +29 -26
- akshare/index/index_cni.py +86 -88
- akshare/index/index_cons.py +26 -10
- akshare/index/index_cx.py +248 -47
- akshare/index/index_drewry.py +17 -16
- akshare/index/index_option_qvix.py +329 -0
- akshare/index/index_research_fund_sw.py +134 -0
- akshare/index/{index_sw_research.py → index_research_sw.py} +122 -58
- akshare/index/index_spot.py +9 -5
- akshare/index/index_stock_hk.py +35 -16
- akshare/index/index_stock_us_sina.py +1 -1
- akshare/index/index_stock_zh.py +180 -89
- akshare/index/index_stock_zh_csindex.py +15 -369
- akshare/index/index_sw.py +62 -34
- akshare/index/index_yw.py +46 -23
- akshare/index/index_zh_a_scope.py +48 -0
- akshare/index/index_zh_em.py +6 -4
- akshare/interest_rate/interbank_rate_em.py +14 -9
- akshare/movie/artist_yien.py +32 -5
- akshare/movie/movie_yien.py +92 -18
- akshare/movie/video_yien.py +28 -5
- akshare/news/news_baidu.py +78 -44
- akshare/news/news_cctv.py +38 -38
- akshare/news/news_stock.py +6 -3
- akshare/nlp/nlp_interface.py +7 -8
- akshare/option/cons.py +11 -11
- akshare/option/option_comm_qihuo.py +86 -0
- akshare/option/option_commodity.py +178 -51
- akshare/option/option_daily_stats_sse_szse.py +146 -0
- akshare/option/option_em.py +147 -138
- akshare/option/option_finance_sina.py +160 -137
- akshare/option/option_lhb_em.py +62 -56
- akshare/option/option_risk_indicator_sse.py +17 -14
- akshare/other/other_car_cpca.py +934 -0
- akshare/other/{other_car.py → other_car_gasgoo.py} +15 -54
- akshare/qdii/__init__.py +0 -0
- akshare/qdii/qdii_jsl.py +233 -0
- akshare/request.py +117 -0
- akshare/spot/spot_hog_soozhu.py +232 -0
- akshare/spot/spot_price_qh.py +121 -0
- akshare/spot/spot_sge.py +63 -10
- akshare/stock/stock_allotment_cninfo.py +10 -9
- akshare/stock/stock_board_concept_em.py +23 -14
- akshare/stock/stock_board_industry_em.py +40 -34
- akshare/stock/stock_cg_equity_mortgage.py +15 -11
- akshare/stock/stock_cg_guarantee.py +41 -51
- akshare/stock/stock_cg_lawsuit.py +36 -35
- akshare/stock/stock_dividend_cninfo.py +12 -6
- akshare/stock/stock_dzjy_em.py +347 -260
- akshare/stock/stock_fund_em.py +332 -84
- akshare/stock/stock_hk_famous.py +108 -0
- akshare/stock/stock_hk_sina.py +8 -7
- akshare/stock/stock_hold_control_cninfo.py +100 -15
- akshare/stock/stock_hold_control_em.py +4 -3
- akshare/stock/stock_hold_num_cninfo.py +18 -12
- akshare/stock/stock_hot_rank_em.py +2 -1
- akshare/stock/stock_hot_search_baidu.py +5 -2
- akshare/stock/stock_industry_cninfo.py +24 -18
- akshare/stock/stock_industry_pe_cninfo.py +45 -31
- akshare/stock/stock_industry_sw.py +9 -10
- akshare/stock/stock_info.py +25 -15
- akshare/stock/stock_info_em.py +5 -2
- akshare/stock/stock_intraday_em.py +5 -2
- akshare/stock/stock_intraday_sina.py +22 -18
- akshare/stock/stock_ipo_summary_cninfo.py +25 -10
- akshare/stock/stock_new_cninfo.py +32 -19
- akshare/stock/stock_news_cx.py +39 -0
- akshare/stock/stock_profile_cninfo.py +9 -8
- akshare/stock/stock_rank_forecast.py +8 -6
- akshare/stock/stock_share_changes_cninfo.py +18 -14
- akshare/stock/stock_share_hold.py +24 -19
- akshare/stock/stock_summary.py +54 -26
- akshare/stock/stock_us_famous.py +15 -6
- akshare/stock/stock_us_pink.py +7 -5
- akshare/stock/stock_us_sina.py +15 -12
- akshare/stock/stock_xq.py +38 -12
- akshare/stock/stock_zh_a_sina.py +53 -78
- akshare/stock/stock_zh_b_sina.py +32 -55
- akshare/stock/stock_zh_kcb_report.py +11 -9
- akshare/stock/stock_zh_kcb_sina.py +67 -64
- akshare/stock_feature/stock_a_below_net_asset_statistics.py +5 -2
- akshare/stock_feature/stock_a_high_low.py +5 -2
- akshare/stock_feature/stock_a_indicator.py +12 -9
- akshare/stock_feature/stock_a_pe_and_pb.py +27 -6
- akshare/stock_feature/stock_account_em.py +58 -40
- akshare/stock_feature/stock_analyst_em.py +36 -27
- akshare/stock_feature/stock_board_industry_ths.py +136 -400
- akshare/stock_feature/stock_comment_em.py +118 -85
- akshare/stock_feature/stock_concept_futu.py +183 -0
- akshare/stock_feature/stock_cyq_em.py +58 -54
- akshare/stock_feature/stock_disclosure_cninfo.py +147 -102
- akshare/stock_feature/stock_esg_sina.py +216 -11
- akshare/stock_feature/stock_fhps_em.py +60 -25
- akshare/stock_feature/stock_fhps_ths.py +25 -6
- akshare/stock_feature/stock_fund_flow.py +38 -25
- akshare/stock_feature/stock_gdfx_em.py +180 -95
- akshare/stock_feature/stock_gdhs.py +73 -49
- akshare/stock_feature/stock_gpzy_em.py +78 -46
- akshare/stock_feature/stock_hist_em.py +55 -23
- akshare/stock_feature/stock_hk_valuation_baidu.py +20 -8
- akshare/stock_feature/stock_hsgt_em.py +184 -452
- akshare/stock_feature/stock_info.py +52 -29
- akshare/stock_feature/stock_inner_trade_xq.py +39 -31
- akshare/stock_feature/stock_irm_cninfo.py +32 -9
- akshare/stock_feature/stock_jgdy_em.py +41 -38
- akshare/stock_feature/stock_lh_yybpm.py +36 -37
- akshare/stock_feature/stock_lhb_em.py +135 -71
- akshare/stock_feature/stock_lhb_sina.py +93 -46
- akshare/stock_feature/stock_margin_em.py +102 -0
- akshare/stock_feature/{stock_sse_margin.py → stock_margin_sse.py} +21 -15
- akshare/stock_feature/{stock_szse_margin.py → stock_margin_szse.py} +23 -19
- akshare/stock_feature/stock_market_legu.py +13 -8
- akshare/stock_feature/stock_pankou_em.py +72 -34
- akshare/stock_feature/stock_report_em.py +244 -54
- akshare/stock_feature/stock_research_report_em.py +48 -19
- akshare/stock_feature/stock_sns_sseinfo.py +15 -12
- akshare/stock_feature/stock_sy_em.py +86 -33
- akshare/stock_feature/stock_technology_ths.py +152 -120
- akshare/stock_feature/stock_tfp_em.py +35 -13
- akshare/stock_feature/stock_three_report_em.py +119 -77
- akshare/stock_feature/stock_ttm_lyr.py +4 -7
- akshare/stock_feature/stock_value_em.py +83 -0
- akshare/stock_feature/stock_wencai.py +21 -9
- akshare/stock_feature/stock_yjyg_em.py +63 -28
- akshare/stock_feature/stock_zf_pg.py +61 -38
- akshare/stock_feature/stock_zh_valuation_baidu.py +3 -2
- akshare/stock_feature/stock_ztb_em.py +62 -40
- akshare/stock_fundamental/stock_finance.py +150 -58
- akshare/stock_fundamental/stock_finance_ths.py +116 -31
- akshare/stock_fundamental/stock_mda_ym.py +5 -3
- akshare/stock_fundamental/stock_notice.py +29 -15
- akshare/stock_fundamental/stock_profit_forecast_em.py +31 -13
- akshare/stock_fundamental/stock_profit_forecast_ths.py +19 -10
- akshare/stock_fundamental/stock_register_em.py +448 -0
- akshare/stock_fundamental/stock_restricted_em.py +79 -32
- akshare/stock_fundamental/stock_zygc.py +10 -8
- akshare/stock_fundamental/stock_zyjs_ths.py +5 -3
- akshare/tool/trade_date_hist.py +4 -3
- akshare/utils/cons.py +10 -0
- akshare/utils/context.py +43 -0
- akshare/utils/demjson.py +2 -2
- akshare/utils/func.py +26 -0
- akshare/utils/tqdm.py +13 -3
- {akshare-1.12.99.dist-info → akshare-1.15.73.dist-info}/METADATA +52 -69
- akshare-1.15.73.dist-info/RECORD +385 -0
- {akshare-1.12.99.dist-info → akshare-1.15.73.dist-info}/WHEEL +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/fortune/fortune_it_juzi.py +0 -123
- 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 -51
- akshare/futures_derivative/futures_other_index_nh.py +0 -145
- akshare/index/index_fear_greed_funddb.py +0 -71
- akshare/index/index_investing.py +0 -232
- akshare/sport/sport_olympic_winter.py +0 -39
- akshare/stock_feature/stock_board_concept_ths.py +0 -422
- akshare/stock_fundamental/stock_register.py +0 -292
- akshare-1.12.99.dist-info/RECORD +0 -374
- {akshare-1.12.99.dist-info → akshare-1.15.73.dist-info}/LICENSE +0 -0
- {akshare-1.12.99.dist-info → akshare-1.15.73.dist-info}/top_level.txt +0 -0
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2024/10/19 21:30
|
|
5
5
|
Desc: 乐咕乐股-A 股市盈率和市净率
|
|
6
6
|
https://legulegu.com/stockdata/shanghaiPE
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
from datetime import datetime
|
|
9
10
|
|
|
10
11
|
import pandas as pd
|
|
12
|
+
import py_mini_racer
|
|
11
13
|
import requests
|
|
12
|
-
from py_mini_racer import py_mini_racer
|
|
13
14
|
|
|
14
15
|
from akshare.stock_feature.stock_a_indicator import get_cookie_csrf
|
|
15
16
|
|
|
@@ -367,7 +368,11 @@ def stock_market_pe_lg(symbol: str = "深证") -> pd.DataFrame:
|
|
|
367
368
|
else:
|
|
368
369
|
url = "https://legulegu.com/api/stockdata/get-ke-chuang-ban-pe"
|
|
369
370
|
params = {"token": token}
|
|
370
|
-
r = requests.get(
|
|
371
|
+
r = requests.get(
|
|
372
|
+
url,
|
|
373
|
+
params=params,
|
|
374
|
+
**get_cookie_csrf(url="https://legulegu.com/stockdata/ke-chuang-ban-pe"),
|
|
375
|
+
)
|
|
371
376
|
data_json = r.json()
|
|
372
377
|
temp_df = pd.DataFrame(data_json["data"])
|
|
373
378
|
temp_df["date"] = (
|
|
@@ -415,7 +420,11 @@ def stock_index_pe_lg(symbol: str = "沪深300") -> pd.DataFrame:
|
|
|
415
420
|
}
|
|
416
421
|
url = "https://legulegu.com/api/stockdata/index-basic-pe"
|
|
417
422
|
params = {"token": token, "indexCode": symbol_map[symbol]}
|
|
418
|
-
r = requests.get(
|
|
423
|
+
r = requests.get(
|
|
424
|
+
url,
|
|
425
|
+
params=params,
|
|
426
|
+
**get_cookie_csrf(url="https://legulegu.com/stockdata/sz50-ttm-lyr"),
|
|
427
|
+
)
|
|
419
428
|
data_json = r.json()
|
|
420
429
|
temp_df = pd.DataFrame(data_json["data"])
|
|
421
430
|
temp_df["date"] = (
|
|
@@ -518,7 +527,11 @@ def stock_index_pb_lg(symbol: str = "上证50") -> pd.DataFrame:
|
|
|
518
527
|
}
|
|
519
528
|
url = "https://legulegu.com/api/stockdata/index-basic-pb"
|
|
520
529
|
params = {"token": token, "indexCode": symbol_map[symbol]}
|
|
521
|
-
r = requests.get(
|
|
530
|
+
r = requests.get(
|
|
531
|
+
url,
|
|
532
|
+
params=params,
|
|
533
|
+
**get_cookie_csrf(url="https://legulegu.com/stockdata/zz500-ttm-lyr"),
|
|
534
|
+
)
|
|
522
535
|
data_json = r.json()
|
|
523
536
|
temp_df = pd.DataFrame(data_json["data"])
|
|
524
537
|
temp_df["date"] = (
|
|
@@ -546,10 +559,19 @@ def stock_index_pb_lg(symbol: str = "上证50") -> pd.DataFrame:
|
|
|
546
559
|
|
|
547
560
|
|
|
548
561
|
if __name__ == "__main__":
|
|
562
|
+
stock_market_pe_lg_df = stock_market_pe_lg(symbol="上证")
|
|
563
|
+
print(stock_market_pe_lg_df)
|
|
564
|
+
|
|
565
|
+
stock_market_pe_lg_df = stock_market_pe_lg(symbol="科创版")
|
|
566
|
+
print(stock_market_pe_lg_df)
|
|
567
|
+
|
|
549
568
|
for item in {"上证", "深证", "创业板", "科创版"}:
|
|
550
569
|
stock_market_pe_lg_df = stock_market_pe_lg(symbol=item)
|
|
551
570
|
print(stock_market_pe_lg_df)
|
|
552
571
|
|
|
572
|
+
stock_index_pe_lg_df = stock_index_pe_lg(symbol="上证50")
|
|
573
|
+
print(stock_index_pe_lg_df)
|
|
574
|
+
|
|
553
575
|
for item in [
|
|
554
576
|
"上证50",
|
|
555
577
|
"沪深300",
|
|
@@ -585,6 +607,5 @@ if __name__ == "__main__":
|
|
|
585
607
|
"中证100",
|
|
586
608
|
"中证800",
|
|
587
609
|
]:
|
|
588
|
-
print(item)
|
|
589
610
|
stock_index_pe_lg_df = stock_index_pb_lg(symbol=item)
|
|
590
611
|
print(stock_index_pe_lg_df)
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2024/4/21 17:00
|
|
5
5
|
Desc: 东方财富网-数据中心-特色数据-股票账户统计
|
|
6
6
|
东方财富网-数据中心-特色数据-股票账户统计: 股票账户统计详细数据
|
|
7
|
-
|
|
7
|
+
https://data.eastmoney.com/cjsj/gpkhsj.html
|
|
8
8
|
"""
|
|
9
|
+
|
|
9
10
|
import pandas as pd
|
|
10
11
|
import requests
|
|
11
12
|
|
|
@@ -13,28 +14,28 @@ import requests
|
|
|
13
14
|
def stock_account_statistics_em() -> pd.DataFrame:
|
|
14
15
|
"""
|
|
15
16
|
东方财富网-数据中心-特色数据-股票账户统计
|
|
16
|
-
|
|
17
|
+
https://data.eastmoney.com/cjsj/gpkhsj.html
|
|
17
18
|
:return: 股票账户统计数据
|
|
18
19
|
:rtype: pandas.DataFrame
|
|
19
20
|
"""
|
|
20
21
|
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
|
21
22
|
params = {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
23
|
+
"reportName": "RPT_STOCK_OPEN_DATA",
|
|
24
|
+
"columns": "ALL",
|
|
25
|
+
"pageSize": "500",
|
|
26
|
+
"sortColumns": "STATISTICS_DATE",
|
|
27
|
+
"sortTypes": "-1",
|
|
28
|
+
"source": "WEB",
|
|
29
|
+
"client": "WEB",
|
|
30
|
+
"p": "1",
|
|
31
|
+
"pageNo": "1",
|
|
32
|
+
"pageNum": "1",
|
|
33
|
+
"pageNumber": "1",
|
|
34
|
+
"_": "1640749656405",
|
|
34
35
|
}
|
|
35
36
|
r = requests.get(url, params=params)
|
|
36
37
|
data_json = r.json()
|
|
37
|
-
temp_df = pd.DataFrame(data_json[
|
|
38
|
+
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
38
39
|
temp_df.columns = [
|
|
39
40
|
"数据日期",
|
|
40
41
|
"新增投资者-数量",
|
|
@@ -47,31 +48,48 @@ def stock_account_statistics_em() -> pd.DataFrame:
|
|
|
47
48
|
"上证指数-涨跌幅",
|
|
48
49
|
"沪深总市值",
|
|
49
50
|
"沪深户均市值",
|
|
50
|
-
"-"
|
|
51
|
+
"-",
|
|
51
52
|
]
|
|
52
|
-
temp_df = temp_df[
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
temp_df[
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
temp_df[
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
temp_df[
|
|
74
|
-
|
|
53
|
+
temp_df = temp_df[
|
|
54
|
+
[
|
|
55
|
+
"数据日期",
|
|
56
|
+
"新增投资者-数量",
|
|
57
|
+
"新增投资者-环比",
|
|
58
|
+
"新增投资者-同比",
|
|
59
|
+
"期末投资者-总量",
|
|
60
|
+
"期末投资者-A股账户",
|
|
61
|
+
"期末投资者-B股账户",
|
|
62
|
+
"沪深总市值",
|
|
63
|
+
"沪深户均市值",
|
|
64
|
+
"上证指数-收盘",
|
|
65
|
+
"上证指数-涨跌幅",
|
|
66
|
+
]
|
|
67
|
+
]
|
|
68
|
+
temp_df["新增投资者-数量"] = pd.to_numeric(
|
|
69
|
+
temp_df["新增投资者-数量"], errors="coerce"
|
|
70
|
+
)
|
|
71
|
+
temp_df["新增投资者-环比"] = pd.to_numeric(
|
|
72
|
+
temp_df["新增投资者-环比"], errors="coerce"
|
|
73
|
+
)
|
|
74
|
+
temp_df["新增投资者-同比"] = pd.to_numeric(
|
|
75
|
+
temp_df["新增投资者-同比"], errors="coerce"
|
|
76
|
+
)
|
|
77
|
+
temp_df["期末投资者-总量"] = pd.to_numeric(
|
|
78
|
+
temp_df["期末投资者-总量"], errors="coerce"
|
|
79
|
+
)
|
|
80
|
+
temp_df["期末投资者-A股账户"] = pd.to_numeric(
|
|
81
|
+
temp_df["期末投资者-A股账户"], errors="coerce"
|
|
82
|
+
)
|
|
83
|
+
temp_df["期末投资者-B股账户"] = pd.to_numeric(
|
|
84
|
+
temp_df["期末投资者-B股账户"], errors="coerce"
|
|
85
|
+
)
|
|
86
|
+
temp_df["沪深总市值"] = pd.to_numeric(temp_df["沪深总市值"], errors="coerce")
|
|
87
|
+
temp_df["沪深户均市值"] = pd.to_numeric(temp_df["沪深户均市值"], errors="coerce")
|
|
88
|
+
temp_df["上证指数-收盘"] = pd.to_numeric(temp_df["上证指数-收盘"], errors="coerce")
|
|
89
|
+
temp_df["上证指数-涨跌幅"] = pd.to_numeric(
|
|
90
|
+
temp_df["上证指数-涨跌幅"], errors="coerce"
|
|
91
|
+
)
|
|
92
|
+
temp_df.sort_values(["数据日期"], ignore_index=True, inplace=True)
|
|
75
93
|
return temp_df
|
|
76
94
|
|
|
77
95
|
|
|
@@ -5,12 +5,14 @@ Date: 2023/8/20 20:00
|
|
|
5
5
|
Desc: 东方财富网-数据中心-研究报告-东方财富分析师指数
|
|
6
6
|
https://data.eastmoney.com/invest/invest/list.html
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
import pandas as pd
|
|
9
10
|
import requests
|
|
10
|
-
from tqdm import
|
|
11
|
+
from akshare.utils.tqdm import get_tqdm
|
|
12
|
+
from akshare.utils.cons import headers
|
|
11
13
|
|
|
12
14
|
|
|
13
|
-
def stock_analyst_rank_em(year: str = "
|
|
15
|
+
def stock_analyst_rank_em(year: str = "2024") -> pd.DataFrame:
|
|
14
16
|
"""
|
|
15
17
|
东方财富网-数据中心-研究报告-东方财富分析师指数-东方财富分析师指数
|
|
16
18
|
https://data.eastmoney.com/invest/invest/list.html
|
|
@@ -20,9 +22,6 @@ def stock_analyst_rank_em(year: str = "2023") -> pd.DataFrame:
|
|
|
20
22
|
:rtype: pandas.DataFrame
|
|
21
23
|
"""
|
|
22
24
|
url = "https://data.eastmoney.com/dataapi/invest/list"
|
|
23
|
-
headers = {
|
|
24
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
|
|
25
|
-
}
|
|
26
25
|
params = {
|
|
27
26
|
"sortColumns": "YEAR_YIELD",
|
|
28
27
|
"sortTypes": "-1",
|
|
@@ -40,12 +39,13 @@ def stock_analyst_rank_em(year: str = "2023") -> pd.DataFrame:
|
|
|
40
39
|
data_json = r.json()
|
|
41
40
|
total_page = data_json["result"]["pages"]
|
|
42
41
|
big_df = pd.DataFrame()
|
|
42
|
+
tqdm = get_tqdm()
|
|
43
43
|
for page in tqdm(range(1, total_page + 1), leave=False):
|
|
44
44
|
params.update({"pageNumber": page})
|
|
45
45
|
r = requests.get(url, params=params, headers=headers)
|
|
46
46
|
data_json = r.json()
|
|
47
47
|
data_df = pd.DataFrame(data_json["result"]["data"])
|
|
48
|
-
big_df = pd.concat([big_df, data_df], ignore_index=True)
|
|
48
|
+
big_df = pd.concat(objs=[big_df, data_df], ignore_index=True)
|
|
49
49
|
|
|
50
50
|
big_df.reset_index(inplace=True)
|
|
51
51
|
big_df["index"] = list(range(1, len(big_df) + 1))
|
|
@@ -92,7 +92,9 @@ def stock_analyst_rank_em(year: str = "2023") -> pd.DataFrame:
|
|
|
92
92
|
]
|
|
93
93
|
big_df["更新日期"] = pd.to_datetime(big_df["更新日期"], errors="coerce").dt.date
|
|
94
94
|
big_df["年度指数"] = pd.to_numeric(big_df["年度指数"], errors="coerce")
|
|
95
|
-
big_df[f"{year}年收益率"] = pd.to_numeric(
|
|
95
|
+
big_df[f"{year}年收益率"] = pd.to_numeric(
|
|
96
|
+
big_df[f"{year}年收益率"], errors="coerce"
|
|
97
|
+
)
|
|
96
98
|
big_df["3个月收益率"] = pd.to_numeric(big_df["3个月收益率"], errors="coerce")
|
|
97
99
|
big_df["6个月收益率"] = pd.to_numeric(big_df["6个月收益率"], errors="coerce")
|
|
98
100
|
big_df["12个月收益率"] = pd.to_numeric(big_df["12个月收益率"], errors="coerce")
|
|
@@ -114,9 +116,6 @@ def stock_analyst_detail_em(
|
|
|
114
116
|
:rtype: pandas.DataFrame
|
|
115
117
|
"""
|
|
116
118
|
url = "https://datacenter.eastmoney.com/special/api/data/v1/get"
|
|
117
|
-
headers = {
|
|
118
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
|
|
119
|
-
}
|
|
120
119
|
if indicator == "最新跟踪成分股":
|
|
121
120
|
params = {
|
|
122
121
|
"reportName": "RPT_RESEARCHER_NTCSTOCK",
|
|
@@ -132,7 +131,7 @@ def stock_analyst_detail_em(
|
|
|
132
131
|
}
|
|
133
132
|
r = requests.get(url, params=params, headers=headers)
|
|
134
133
|
data_json = r.json()
|
|
135
|
-
temp_df = pd.DataFrame(data_json["result"][
|
|
134
|
+
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
136
135
|
temp_df.reset_index(inplace=True)
|
|
137
136
|
temp_df["index"] = list(range(1, len(temp_df) + 1))
|
|
138
137
|
temp_df.columns = [
|
|
@@ -164,9 +163,15 @@ def stock_analyst_detail_em(
|
|
|
164
163
|
"阶段涨跌幅",
|
|
165
164
|
]
|
|
166
165
|
]
|
|
167
|
-
temp_df["调入日期"] = pd.to_datetime(
|
|
168
|
-
|
|
169
|
-
|
|
166
|
+
temp_df["调入日期"] = pd.to_datetime(
|
|
167
|
+
temp_df["调入日期"], errors="coerce"
|
|
168
|
+
).dt.date
|
|
169
|
+
temp_df["最新评级日期"] = pd.to_datetime(
|
|
170
|
+
temp_df["最新评级日期"], errors="coerce"
|
|
171
|
+
).dt.date
|
|
172
|
+
temp_df["成交价格(前复权)"] = pd.to_numeric(
|
|
173
|
+
temp_df["成交价格(前复权)"], errors="coerce"
|
|
174
|
+
)
|
|
170
175
|
temp_df["最新价格"] = pd.to_numeric(temp_df["最新价格"], errors="coerce")
|
|
171
176
|
temp_df["阶段涨跌幅"] = pd.to_numeric(temp_df["阶段涨跌幅"], errors="coerce")
|
|
172
177
|
return temp_df
|
|
@@ -185,7 +190,7 @@ def stock_analyst_detail_em(
|
|
|
185
190
|
}
|
|
186
191
|
r = requests.get(url, params=params, headers=headers)
|
|
187
192
|
data_json = r.json()
|
|
188
|
-
temp_df = pd.DataFrame(data_json["result"][
|
|
193
|
+
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
189
194
|
temp_df.reset_index(inplace=True)
|
|
190
195
|
temp_df["index"] = list(range(1, len(temp_df) + 1))
|
|
191
196
|
temp_df.columns = [
|
|
@@ -214,8 +219,12 @@ def stock_analyst_detail_em(
|
|
|
214
219
|
"累计涨跌幅",
|
|
215
220
|
]
|
|
216
221
|
]
|
|
217
|
-
temp_df["调入日期"] = pd.to_datetime(
|
|
218
|
-
|
|
222
|
+
temp_df["调入日期"] = pd.to_datetime(
|
|
223
|
+
temp_df["调入日期"], errors="coerce"
|
|
224
|
+
).dt.date
|
|
225
|
+
temp_df["调出日期"] = pd.to_datetime(
|
|
226
|
+
temp_df["调出日期"], errors="coerce"
|
|
227
|
+
).dt.date
|
|
219
228
|
temp_df["累计涨跌幅"] = pd.to_numeric(temp_df["累计涨跌幅"], errors="coerce")
|
|
220
229
|
return temp_df
|
|
221
230
|
elif indicator == "历史指数":
|
|
@@ -231,22 +240,22 @@ def stock_analyst_detail_em(
|
|
|
231
240
|
}
|
|
232
241
|
r = requests.get(url, params=params, headers=headers)
|
|
233
242
|
data_json = r.json()
|
|
234
|
-
temp_df = pd.DataFrame(
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
]
|
|
241
|
-
temp_df.columns = [
|
|
243
|
+
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
244
|
+
temp_df = temp_df[
|
|
245
|
+
[
|
|
246
|
+
"TRADE_DATE",
|
|
247
|
+
"INDEX_HVALUE",
|
|
248
|
+
]
|
|
249
|
+
]
|
|
250
|
+
temp_df.columns = ["date", "value"]
|
|
242
251
|
temp_df["date"] = pd.to_datetime(temp_df["date"], errors="coerce").dt.date
|
|
243
252
|
temp_df["value"] = pd.to_numeric(temp_df["value"], errors="coerce")
|
|
244
|
-
temp_df.sort_values([
|
|
253
|
+
temp_df.sort_values(["date"], inplace=True, ignore_index=True)
|
|
245
254
|
return temp_df
|
|
246
255
|
|
|
247
256
|
|
|
248
257
|
if __name__ == "__main__":
|
|
249
|
-
stock_analyst_rank_em_df = stock_analyst_rank_em(year="
|
|
258
|
+
stock_analyst_rank_em_df = stock_analyst_rank_em(year="2024")
|
|
250
259
|
print(stock_analyst_rank_em_df)
|
|
251
260
|
|
|
252
261
|
stock_analyst_detail_em_df = stock_analyst_detail_em(
|