akshare 1.12.99__py3-none-any.whl → 1.15.72__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 +441 -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.72.dist-info}/METADATA +52 -69
- akshare-1.15.72.dist-info/RECORD +385 -0
- {akshare-1.12.99.dist-info → akshare-1.15.72.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.72.dist-info}/LICENSE +0 -0
- {akshare-1.12.99.dist-info → akshare-1.15.72.dist-info}/top_level.txt +0 -0
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2024/6/18 18:30
|
|
5
5
|
Desc: 巨潮资讯-数据中心-行业分析-行业市盈率
|
|
6
6
|
http://webapi.cninfo.com.cn/#/thematicStatistics?name=%E6%8A%95%E8%B5%84%E8%AF%84%E7%BA%A7
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
import pandas as pd
|
|
9
10
|
import requests
|
|
10
|
-
|
|
11
|
+
import py_mini_racer
|
|
11
12
|
|
|
12
13
|
from akshare.datasets import get_ths_js
|
|
13
14
|
|
|
@@ -21,12 +22,14 @@ def _get_file_content_ths(file: str = "cninfo.js") -> str:
|
|
|
21
22
|
:rtype: str
|
|
22
23
|
"""
|
|
23
24
|
setting_file_path = get_ths_js(file)
|
|
24
|
-
with open(setting_file_path) as f:
|
|
25
|
+
with open(setting_file_path, encoding="utf-8") as f:
|
|
25
26
|
file_data = f.read()
|
|
26
27
|
return file_data
|
|
27
28
|
|
|
28
29
|
|
|
29
|
-
def stock_industry_pe_ratio_cninfo(
|
|
30
|
+
def stock_industry_pe_ratio_cninfo(
|
|
31
|
+
symbol: str = "证监会行业分类", date: str = "20210910"
|
|
32
|
+
) -> pd.DataFrame:
|
|
30
33
|
"""
|
|
31
34
|
巨潮资讯-数据中心-行业分析-行业市盈率
|
|
32
35
|
http://webapi.cninfo.com.cn/#/thematicStatistics
|
|
@@ -37,14 +40,12 @@ def stock_industry_pe_ratio_cninfo(symbol: str = "证监会行业分类", date:
|
|
|
37
40
|
:return: 行业市盈率
|
|
38
41
|
:rtype: pandas.DataFrame
|
|
39
42
|
"""
|
|
40
|
-
sort_code_map = {
|
|
41
|
-
"证监会行业分类": "008001",
|
|
42
|
-
"国证行业分类": "008200"
|
|
43
|
-
}
|
|
43
|
+
sort_code_map = {"证监会行业分类": "008001", "国证行业分类": "008200"}
|
|
44
44
|
url = "http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1087"
|
|
45
|
-
params = {
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
params = {
|
|
46
|
+
"tdate": "-".join([date[:4], date[4:6], date[6:]]),
|
|
47
|
+
"sortcode": sort_code_map[symbol],
|
|
48
|
+
}
|
|
48
49
|
js_code = py_mini_racer.MiniRacer()
|
|
49
50
|
js_content = _get_file_content_ths("cninfo.js")
|
|
50
51
|
js_code.eval(js_content)
|
|
@@ -61,7 +62,8 @@ def stock_industry_pe_ratio_cninfo(symbol: str = "证监会行业分类", date:
|
|
|
61
62
|
"Pragma": "no-cache",
|
|
62
63
|
"Proxy-Connection": "keep-alive",
|
|
63
64
|
"Referer": "http://webapi.cninfo.com.cn/",
|
|
64
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
65
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
66
|
+
"Chrome/93.0.4577.63 Safari/537.36",
|
|
65
67
|
"X-Requested-With": "XMLHttpRequest",
|
|
66
68
|
}
|
|
67
69
|
r = requests.post(url, params=params, headers=headers)
|
|
@@ -81,31 +83,43 @@ def stock_industry_pe_ratio_cninfo(symbol: str = "证监会行业分类", date:
|
|
|
81
83
|
"变动日期",
|
|
82
84
|
"公司数量",
|
|
83
85
|
]
|
|
84
|
-
temp_df = temp_df[
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
86
|
+
temp_df = temp_df[
|
|
87
|
+
[
|
|
88
|
+
"变动日期",
|
|
89
|
+
"行业分类",
|
|
90
|
+
"行业层级",
|
|
91
|
+
"行业编码",
|
|
92
|
+
"行业名称",
|
|
93
|
+
"公司数量",
|
|
94
|
+
"纳入计算公司数量",
|
|
95
|
+
"总市值-静态",
|
|
96
|
+
"净利润-静态",
|
|
97
|
+
"静态市盈率-加权平均",
|
|
98
|
+
"静态市盈率-中位数",
|
|
99
|
+
"静态市盈率-算术平均",
|
|
100
|
+
]
|
|
101
|
+
]
|
|
98
102
|
temp_df["行业层级"] = pd.to_numeric(temp_df["行业层级"], errors="coerce")
|
|
99
103
|
temp_df["公司数量"] = pd.to_numeric(temp_df["公司数量"], errors="coerce")
|
|
100
|
-
temp_df["纳入计算公司数量"] = pd.to_numeric(
|
|
104
|
+
temp_df["纳入计算公司数量"] = pd.to_numeric(
|
|
105
|
+
temp_df["纳入计算公司数量"], errors="coerce"
|
|
106
|
+
)
|
|
101
107
|
temp_df["总市值-静态"] = pd.to_numeric(temp_df["总市值-静态"], errors="coerce")
|
|
102
108
|
temp_df["净利润-静态"] = pd.to_numeric(temp_df["净利润-静态"], errors="coerce")
|
|
103
|
-
temp_df["静态市盈率-加权平均"] = pd.to_numeric(
|
|
104
|
-
|
|
105
|
-
|
|
109
|
+
temp_df["静态市盈率-加权平均"] = pd.to_numeric(
|
|
110
|
+
temp_df["静态市盈率-加权平均"], errors="coerce"
|
|
111
|
+
)
|
|
112
|
+
temp_df["静态市盈率-中位数"] = pd.to_numeric(
|
|
113
|
+
temp_df["静态市盈率-中位数"], errors="coerce"
|
|
114
|
+
)
|
|
115
|
+
temp_df["静态市盈率-算术平均"] = pd.to_numeric(
|
|
116
|
+
temp_df["静态市盈率-算术平均"], errors="coerce"
|
|
117
|
+
)
|
|
106
118
|
return temp_df
|
|
107
119
|
|
|
108
120
|
|
|
109
121
|
if __name__ == "__main__":
|
|
110
|
-
stock_industry_pe_ratio_cninfo_df = stock_industry_pe_ratio_cninfo(
|
|
122
|
+
stock_industry_pe_ratio_cninfo_df = stock_industry_pe_ratio_cninfo(
|
|
123
|
+
symbol="国证行业分类", date="20240617"
|
|
124
|
+
)
|
|
111
125
|
print(stock_industry_pe_ratio_cninfo_df)
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2024/7/22 17:30
|
|
5
5
|
Desc: 申万宏源研究-行业分类
|
|
6
|
-
|
|
6
|
+
http://www.swhyresearch.com/institute_sw/allIndex/downloadCenter/industryType
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
import io
|
|
9
|
-
from datetime import datetime
|
|
10
10
|
|
|
11
11
|
import pandas as pd
|
|
12
12
|
import requests
|
|
13
13
|
|
|
14
|
+
from akshare.utils.cons import headers
|
|
15
|
+
|
|
14
16
|
|
|
15
17
|
def stock_industry_clf_hist_sw() -> pd.DataFrame:
|
|
16
18
|
"""
|
|
@@ -19,14 +21,11 @@ def stock_industry_clf_hist_sw() -> pd.DataFrame:
|
|
|
19
21
|
:return: 个股行业分类变动历史
|
|
20
22
|
:rtype: pandas.DataFrame
|
|
21
23
|
"""
|
|
22
|
-
url =
|
|
23
|
-
"https://www.swsresearch.com/swindex/pdf/SwClass2021/StockClassifyUse_stock.xls"
|
|
24
|
-
)
|
|
25
|
-
headers = {
|
|
26
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36"
|
|
27
|
-
}
|
|
24
|
+
url = "https://www.swsresearch.com/swindex/pdf/SwClass2021/StockClassifyUse_stock.xls" # 此处为 https
|
|
28
25
|
r = requests.get(url, headers=headers)
|
|
29
|
-
temp_df = pd.read_excel(
|
|
26
|
+
temp_df = pd.read_excel(
|
|
27
|
+
io.BytesIO(r.content), dtype={"股票代码": "str", "行业代码": "str"}
|
|
28
|
+
)
|
|
30
29
|
temp_df.rename(
|
|
31
30
|
columns={
|
|
32
31
|
"股票代码": "symbol",
|
akshare/stock/stock_info.py
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date: 2024/
|
|
4
|
+
Date: 2024/5/27 15:30
|
|
5
5
|
Desc: 股票基本信息
|
|
6
6
|
"""
|
|
7
|
+
|
|
7
8
|
import json
|
|
8
9
|
import warnings
|
|
9
10
|
from functools import lru_cache
|
|
@@ -133,7 +134,8 @@ def stock_info_sh_name_code(symbol: str = "主板A股") -> pd.DataFrame:
|
|
|
133
134
|
"Host": "query.sse.com.cn",
|
|
134
135
|
"Pragma": "no-cache",
|
|
135
136
|
"Referer": "https://www.sse.com.cn/assortment/stock/list/share/",
|
|
136
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
137
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
138
|
+
"Chrome/81.0.4044.138 Safari/537.36",
|
|
137
139
|
}
|
|
138
140
|
params = {
|
|
139
141
|
"STOCK_TYPE": indicator_map[symbol],
|
|
@@ -194,11 +196,12 @@ def stock_info_bj_name_code() -> pd.DataFrame:
|
|
|
194
196
|
"sorttype": "asc",
|
|
195
197
|
}
|
|
196
198
|
headers = {
|
|
197
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
199
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
200
|
+
"Chrome/110.0.0.0 Safari/537.36"
|
|
198
201
|
}
|
|
199
202
|
r = requests.post(url, data=payload, headers=headers)
|
|
200
203
|
data_text = r.text
|
|
201
|
-
data_json = json.loads(data_text[data_text.find("["): -1])
|
|
204
|
+
data_json = json.loads(data_text[data_text.find("[") : -1])
|
|
202
205
|
total_page = data_json[0]["totalPages"]
|
|
203
206
|
big_df = pd.DataFrame()
|
|
204
207
|
tqdm = get_tqdm()
|
|
@@ -206,7 +209,7 @@ def stock_info_bj_name_code() -> pd.DataFrame:
|
|
|
206
209
|
payload.update({"page": page})
|
|
207
210
|
r = requests.post(url, data=payload, headers=headers)
|
|
208
211
|
data_text = r.text
|
|
209
|
-
data_json = json.loads(data_text[data_text.find("["): -1])
|
|
212
|
+
data_json = json.loads(data_text[data_text.find("[") : -1])
|
|
210
213
|
temp_df = data_json[0]["content"]
|
|
211
214
|
temp_df = pd.DataFrame(temp_df)
|
|
212
215
|
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
@@ -280,7 +283,7 @@ def stock_info_bj_name_code() -> pd.DataFrame:
|
|
|
280
283
|
def stock_info_sh_delist(symbol: str = "全部") -> pd.DataFrame:
|
|
281
284
|
"""
|
|
282
285
|
上海证券交易所-终止上市公司
|
|
283
|
-
|
|
286
|
+
https://www.sse.com.cn/assortment/stock/list/delisting/
|
|
284
287
|
:param symbol: choice of {"全部", "沪市", "科创板"}
|
|
285
288
|
:type symbol: str
|
|
286
289
|
:return: 终止上市公司
|
|
@@ -300,8 +303,9 @@ def stock_info_sh_delist(symbol: str = "全部") -> pd.DataFrame:
|
|
|
300
303
|
"Connection": "keep-alive",
|
|
301
304
|
"Host": "query.sse.com.cn",
|
|
302
305
|
"Pragma": "no-cache",
|
|
303
|
-
"Referer": "
|
|
304
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
306
|
+
"Referer": "https://www.sse.com.cn/",
|
|
307
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
308
|
+
"Chrome/97.0.4692.71 Safari/537.36",
|
|
305
309
|
}
|
|
306
310
|
params = {
|
|
307
311
|
"sqlId": "COMMON_SSE_CP_GPJCTPZ_GPLB_GP_L",
|
|
@@ -340,7 +344,9 @@ def stock_info_sh_delist(symbol: str = "全部") -> pd.DataFrame:
|
|
|
340
344
|
]
|
|
341
345
|
]
|
|
342
346
|
temp_df["上市日期"] = pd.to_datetime(temp_df["上市日期"], errors="coerce").dt.date
|
|
343
|
-
temp_df["暂停上市日期"] = pd.to_datetime(
|
|
347
|
+
temp_df["暂停上市日期"] = pd.to_datetime(
|
|
348
|
+
temp_df["暂停上市日期"], errors="coerce"
|
|
349
|
+
).dt.date
|
|
344
350
|
return temp_df
|
|
345
351
|
|
|
346
352
|
|
|
@@ -416,13 +422,15 @@ def stock_info_change_name(symbol: str = "000503") -> pd.DataFrame:
|
|
|
416
422
|
temp_df.columns = ["item", "value"]
|
|
417
423
|
temp_df["item"] = temp_df["item"].str.split(":", expand=True)[0]
|
|
418
424
|
try:
|
|
419
|
-
name_list =
|
|
425
|
+
name_list = (
|
|
426
|
+
temp_df[temp_df["item"] == "证券简称更名历史"].value.tolist()[0].split(" ")
|
|
427
|
+
)
|
|
420
428
|
big_df = pd.DataFrame(name_list)
|
|
421
429
|
big_df.reset_index(inplace=True)
|
|
422
430
|
big_df["index"] = big_df.index + 1
|
|
423
431
|
big_df.columns = ["index", "name"]
|
|
424
432
|
return big_df
|
|
425
|
-
except IndexError
|
|
433
|
+
except IndexError:
|
|
426
434
|
return pd.DataFrame()
|
|
427
435
|
|
|
428
436
|
|
|
@@ -439,7 +447,9 @@ def stock_info_a_code_name() -> pd.DataFrame:
|
|
|
439
447
|
|
|
440
448
|
stock_sz = stock_info_sz_name_code(symbol="A股列表")
|
|
441
449
|
stock_sz["A股代码"] = stock_sz["A股代码"].astype(str).str.zfill(6)
|
|
442
|
-
big_df = pd.concat(
|
|
450
|
+
big_df = pd.concat(
|
|
451
|
+
objs=[big_df, stock_sz[["A股代码", "A股简称"]]], ignore_index=True
|
|
452
|
+
)
|
|
443
453
|
big_df.columns = ["证券代码", "证券简称"]
|
|
444
454
|
|
|
445
455
|
stock_kcb = stock_info_sh_name_code(symbol="科创板")
|
|
@@ -449,9 +459,9 @@ def stock_info_a_code_name() -> pd.DataFrame:
|
|
|
449
459
|
stock_bse = stock_bse[["证券代码", "证券简称"]]
|
|
450
460
|
stock_bse.columns = ["证券代码", "证券简称"]
|
|
451
461
|
|
|
452
|
-
big_df = pd.concat([big_df, stock_sh], ignore_index=True)
|
|
453
|
-
big_df = pd.concat([big_df, stock_kcb], ignore_index=True)
|
|
454
|
-
big_df = pd.concat([big_df, stock_bse], ignore_index=True)
|
|
462
|
+
big_df = pd.concat(objs=[big_df, stock_sh], ignore_index=True)
|
|
463
|
+
big_df = pd.concat(objs=[big_df, stock_kcb], ignore_index=True)
|
|
464
|
+
big_df = pd.concat(objs=[big_df, stock_bse], ignore_index=True)
|
|
455
465
|
big_df.columns = ["code", "name"]
|
|
456
466
|
return big_df
|
|
457
467
|
|
akshare/stock/stock_info_em.py
CHANGED
|
@@ -5,13 +5,16 @@ Date: 2023/8/11 11:44
|
|
|
5
5
|
Desc: 东方财富网-个股-股票信息
|
|
6
6
|
https://quote.eastmoney.com/concept/sh603777.html?from=classic
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
import pandas as pd
|
|
9
10
|
import requests
|
|
10
11
|
|
|
11
12
|
from akshare.stock_feature.stock_hist_em import code_id_map_em
|
|
12
13
|
|
|
13
14
|
|
|
14
|
-
def stock_individual_info_em(
|
|
15
|
+
def stock_individual_info_em(
|
|
16
|
+
symbol: str = "603777", timeout: float = None
|
|
17
|
+
) -> pd.DataFrame:
|
|
15
18
|
"""
|
|
16
19
|
东方财富-个股-股票信息
|
|
17
20
|
https://quote.eastmoney.com/concept/sh603777.html?from=classic
|
|
@@ -64,5 +67,5 @@ def stock_individual_info_em(symbol: str = "603777", timeout: float = None) -> p
|
|
|
64
67
|
|
|
65
68
|
|
|
66
69
|
if __name__ == "__main__":
|
|
67
|
-
stock_individual_info_em_df = stock_individual_info_em(symbol="
|
|
70
|
+
stock_individual_info_em_df = stock_individual_info_em(symbol="000002")
|
|
68
71
|
print(stock_individual_info_em_df)
|
|
@@ -5,6 +5,7 @@ Date: 2023/10/14 22:00
|
|
|
5
5
|
Desc: 东财财富-日内分时数据
|
|
6
6
|
https://quote.eastmoney.com/f1.html?newcode=0.000001
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
import json
|
|
9
10
|
from functools import lru_cache
|
|
10
11
|
|
|
@@ -130,11 +131,13 @@ def stock_intraday_em(symbol: str = "000001") -> pd.DataFrame:
|
|
|
130
131
|
temp_df = pd.DataFrame(
|
|
131
132
|
[item.split(",") for item in event_json["data"]["details"]]
|
|
132
133
|
)
|
|
133
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
134
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
134
135
|
break
|
|
135
136
|
|
|
136
137
|
big_df.columns = ["时间", "成交价", "手数", "-", "买卖盘性质"]
|
|
137
|
-
big_df[
|
|
138
|
+
big_df["买卖盘性质"] = big_df["买卖盘性质"].map(
|
|
139
|
+
{"2": "买盘", "1": "卖盘", "4": "中性盘"}
|
|
140
|
+
)
|
|
138
141
|
big_df = big_df[["时间", "成交价", "手数", "买卖盘性质"]]
|
|
139
142
|
big_df["成交价"] = pd.to_numeric(big_df["成交价"], errors="coerce")
|
|
140
143
|
big_df["手数"] = pd.to_numeric(big_df["手数"], errors="coerce")
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2024/3/22 17:00
|
|
5
5
|
Desc: 新浪财经-日内分时数据
|
|
6
6
|
https://quote.eastmoney.com/f1.html?newcode=0.000001
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
import math
|
|
9
10
|
|
|
10
11
|
import pandas as pd
|
|
@@ -13,7 +14,9 @@ import requests
|
|
|
13
14
|
from akshare.utils.tqdm import get_tqdm
|
|
14
15
|
|
|
15
16
|
|
|
16
|
-
def stock_intraday_sina(
|
|
17
|
+
def stock_intraday_sina(
|
|
18
|
+
symbol: str = "sz000001", date: str = "20240321"
|
|
19
|
+
) -> pd.DataFrame:
|
|
17
20
|
"""
|
|
18
21
|
新浪财经-日内分时数据
|
|
19
22
|
https://vip.stock.finance.sina.com.cn/quotes_service/view/cn_bill.php?symbol=sz000001
|
|
@@ -26,19 +29,20 @@ def stock_intraday_sina(symbol: str = "sz000001", date: str = "20231108") -> pd.
|
|
|
26
29
|
"""
|
|
27
30
|
url = "https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/CN_Bill.GetBillListCount"
|
|
28
31
|
params = {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
32
|
+
"symbol": f"{symbol}",
|
|
33
|
+
"num": "60",
|
|
34
|
+
"page": "1",
|
|
35
|
+
"sort": "ticktime",
|
|
36
|
+
"asc": "0",
|
|
37
|
+
"volume": "0",
|
|
38
|
+
"amount": "0",
|
|
39
|
+
"type": "0",
|
|
40
|
+
"day": "-".join([date[:4], date[4:6], date[6:]]),
|
|
38
41
|
}
|
|
39
42
|
headers = {
|
|
40
43
|
"Referer": f"https://vip.stock.finance.sina.com.cn/quotes_service/view/cn_bill.php?symbol={symbol}",
|
|
41
|
-
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
44
|
+
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
45
|
+
"Chrome/107.0.0.0 Safari/537.36",
|
|
42
46
|
}
|
|
43
47
|
r = requests.get(url=url, params=params, headers=headers)
|
|
44
48
|
data_json = r.json()
|
|
@@ -47,18 +51,18 @@ def stock_intraday_sina(symbol: str = "sz000001", date: str = "20231108") -> pd.
|
|
|
47
51
|
big_df = pd.DataFrame()
|
|
48
52
|
tqdm = get_tqdm()
|
|
49
53
|
for page in tqdm(range(1, total_page + 1), leave=False):
|
|
50
|
-
params.update({
|
|
54
|
+
params.update({"page": page})
|
|
51
55
|
r = requests.get(url=url, params=params, headers=headers)
|
|
52
56
|
data_json = r.json()
|
|
53
57
|
temp_df = pd.DataFrame(data_json)
|
|
54
58
|
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
55
|
-
big_df.sort_values(by=[
|
|
56
|
-
big_df[
|
|
57
|
-
big_df[
|
|
58
|
-
big_df[
|
|
59
|
+
big_df.sort_values(by=["ticktime"], inplace=True, ignore_index=True)
|
|
60
|
+
big_df["price"] = pd.to_numeric(big_df["price"], errors="coerce")
|
|
61
|
+
big_df["volume"] = pd.to_numeric(big_df["volume"], errors="coerce")
|
|
62
|
+
big_df["prev_price"] = pd.to_numeric(big_df["prev_price"], errors="coerce")
|
|
59
63
|
return big_df
|
|
60
64
|
|
|
61
65
|
|
|
62
66
|
if __name__ == "__main__":
|
|
63
|
-
stock_intraday_sina_df = stock_intraday_sina(symbol="sz000001", date="
|
|
67
|
+
stock_intraday_sina_df = stock_intraday_sina(symbol="sz000001", date="20240321")
|
|
64
68
|
print(stock_intraday_sina_df)
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date: 2024/
|
|
4
|
+
Date: 2024/4/25 15:00
|
|
5
5
|
Desc: 巨潮资讯-个股-上市相关
|
|
6
6
|
https://webapi.cninfo.com.cn/#/company
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
import pandas as pd
|
|
9
10
|
import requests
|
|
10
|
-
|
|
11
|
+
import py_mini_racer
|
|
11
12
|
|
|
12
13
|
from akshare.datasets import get_ths_js
|
|
13
14
|
|
|
@@ -21,7 +22,7 @@ def _get_file_content_ths(file: str = "cninfo.js") -> str:
|
|
|
21
22
|
:rtype: str
|
|
22
23
|
"""
|
|
23
24
|
setting_file_path = get_ths_js(file)
|
|
24
|
-
with open(setting_file_path) as f:
|
|
25
|
+
with open(setting_file_path, encoding="utf8") as f:
|
|
25
26
|
file_data = f.read()
|
|
26
27
|
return file_data
|
|
27
28
|
|
|
@@ -77,19 +78,33 @@ def stock_ipo_summary_cninfo(symbol: str = "600030") -> pd.DataFrame:
|
|
|
77
78
|
"上网发行中签率",
|
|
78
79
|
"主承销商",
|
|
79
80
|
]
|
|
80
|
-
temp_df["招股公告日期"] = pd.to_datetime(
|
|
81
|
-
|
|
82
|
-
|
|
81
|
+
temp_df["招股公告日期"] = pd.to_datetime(
|
|
82
|
+
temp_df["招股公告日期"], errors="coerce"
|
|
83
|
+
).dt.date
|
|
84
|
+
temp_df["中签率公告日"] = pd.to_datetime(
|
|
85
|
+
temp_df["中签率公告日"], errors="coerce"
|
|
86
|
+
).dt.date
|
|
87
|
+
temp_df["上网发行日期"] = pd.to_datetime(
|
|
88
|
+
temp_df["上网发行日期"], errors="coerce"
|
|
89
|
+
).dt.date
|
|
83
90
|
temp_df["上市日期"] = pd.to_datetime(temp_df["上市日期"], errors="coerce").dt.date
|
|
84
91
|
temp_df["每股面值"] = pd.to_numeric(temp_df["每股面值"], errors="coerce")
|
|
85
92
|
temp_df["总发行数量"] = pd.to_numeric(temp_df["总发行数量"], errors="coerce")
|
|
86
|
-
temp_df["发行前每股净资产"] = pd.to_numeric(
|
|
87
|
-
|
|
93
|
+
temp_df["发行前每股净资产"] = pd.to_numeric(
|
|
94
|
+
temp_df["发行前每股净资产"], errors="coerce"
|
|
95
|
+
)
|
|
96
|
+
temp_df["摊薄发行市盈率"] = pd.to_numeric(
|
|
97
|
+
temp_df["摊薄发行市盈率"], errors="coerce"
|
|
98
|
+
)
|
|
88
99
|
temp_df["募集资金净额"] = pd.to_numeric(temp_df["募集资金净额"], errors="coerce")
|
|
89
100
|
temp_df["发行价格"] = pd.to_numeric(temp_df["发行价格"], errors="coerce")
|
|
90
101
|
temp_df["发行费用总额"] = pd.to_numeric(temp_df["发行费用总额"], errors="coerce")
|
|
91
|
-
temp_df["发行后每股净资产"] = pd.to_numeric(
|
|
92
|
-
|
|
102
|
+
temp_df["发行后每股净资产"] = pd.to_numeric(
|
|
103
|
+
temp_df["发行后每股净资产"], errors="coerce"
|
|
104
|
+
)
|
|
105
|
+
temp_df["上网发行中签率"] = pd.to_numeric(
|
|
106
|
+
temp_df["上网发行中签率"], errors="coerce"
|
|
107
|
+
)
|
|
93
108
|
return temp_df
|
|
94
109
|
|
|
95
110
|
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2024/7/25 14:30
|
|
5
5
|
Desc: 巨潮资讯-数据中心-新股数据
|
|
6
|
-
|
|
6
|
+
https://webapi.cninfo.com.cn/#/xinguList
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
import pandas as pd
|
|
10
|
+
import py_mini_racer
|
|
9
11
|
import requests
|
|
10
|
-
from py_mini_racer import py_mini_racer
|
|
11
12
|
|
|
12
13
|
from akshare.datasets import get_ths_js
|
|
13
14
|
|
|
@@ -21,7 +22,7 @@ def _get_file_content_cninfo(file: str = "cninfo.js") -> str:
|
|
|
21
22
|
:rtype: str
|
|
22
23
|
"""
|
|
23
24
|
setting_file_path = get_ths_js(file)
|
|
24
|
-
with open(setting_file_path) as f:
|
|
25
|
+
with open(setting_file_path, encoding="utf-8") as f:
|
|
25
26
|
file_data = f.read()
|
|
26
27
|
return file_data
|
|
27
28
|
|
|
@@ -29,11 +30,11 @@ def _get_file_content_cninfo(file: str = "cninfo.js") -> str:
|
|
|
29
30
|
def stock_new_gh_cninfo() -> pd.DataFrame:
|
|
30
31
|
"""
|
|
31
32
|
巨潮资讯-数据中心-新股数据-新股过会
|
|
32
|
-
|
|
33
|
+
https://webapi.cninfo.com.cn/#/xinguList
|
|
33
34
|
:return: 新股过会
|
|
34
35
|
:rtype: pandas.DataFrame
|
|
35
36
|
"""
|
|
36
|
-
url = "
|
|
37
|
+
url = "https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1098"
|
|
37
38
|
js_code = py_mini_racer.MiniRacer()
|
|
38
39
|
js_content = _get_file_content_cninfo("cninfo.js")
|
|
39
40
|
js_code.eval(js_content)
|
|
@@ -46,11 +47,12 @@ def stock_new_gh_cninfo() -> pd.DataFrame:
|
|
|
46
47
|
"Cache-Control": "no-cache",
|
|
47
48
|
"Content-Length": "0",
|
|
48
49
|
"Host": "webapi.cninfo.com.cn",
|
|
49
|
-
"Origin": "
|
|
50
|
+
"Origin": "https://webapi.cninfo.com.cn",
|
|
50
51
|
"Pragma": "no-cache",
|
|
51
52
|
"Proxy-Connection": "keep-alive",
|
|
52
|
-
"Referer": "
|
|
53
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
53
|
+
"Referer": "https://webapi.cninfo.com.cn/",
|
|
54
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
55
|
+
"Chrome/93.0.4577.63 Safari/537.36",
|
|
54
56
|
"X-Requested-With": "XMLHttpRequest",
|
|
55
57
|
}
|
|
56
58
|
r = requests.post(url, headers=headers)
|
|
@@ -65,18 +67,20 @@ def stock_new_gh_cninfo() -> pd.DataFrame:
|
|
|
65
67
|
"审核公告日",
|
|
66
68
|
]
|
|
67
69
|
temp_df["上会日期"] = pd.to_datetime(temp_df["上会日期"], errors="coerce").dt.date
|
|
68
|
-
temp_df["审核公告日"] = pd.to_datetime(
|
|
70
|
+
temp_df["审核公告日"] = pd.to_datetime(
|
|
71
|
+
temp_df["审核公告日"], errors="coerce"
|
|
72
|
+
).dt.date
|
|
69
73
|
return temp_df
|
|
70
74
|
|
|
71
75
|
|
|
72
76
|
def stock_new_ipo_cninfo() -> pd.DataFrame:
|
|
73
77
|
"""
|
|
74
78
|
巨潮资讯-数据中心-新股数据-新股发行
|
|
75
|
-
|
|
79
|
+
https://webapi.cninfo.com.cn/#/xinguList
|
|
76
80
|
:return: 新股发行
|
|
77
81
|
:rtype: pandas.DataFrame
|
|
78
82
|
"""
|
|
79
|
-
url = "
|
|
83
|
+
url = "https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1097"
|
|
80
84
|
js_code = py_mini_racer.MiniRacer()
|
|
81
85
|
js_content = _get_file_content_cninfo("cninfo.js")
|
|
82
86
|
js_code.eval(js_content)
|
|
@@ -89,11 +93,12 @@ def stock_new_ipo_cninfo() -> pd.DataFrame:
|
|
|
89
93
|
"Cache-Control": "no-cache",
|
|
90
94
|
"Content-Length": "0",
|
|
91
95
|
"Host": "webapi.cninfo.com.cn",
|
|
92
|
-
"Origin": "
|
|
96
|
+
"Origin": "https://webapi.cninfo.com.cn",
|
|
93
97
|
"Pragma": "no-cache",
|
|
94
98
|
"Proxy-Connection": "keep-alive",
|
|
95
|
-
"Referer": "
|
|
96
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
99
|
+
"Referer": "https://webapi.cninfo.com.cn/",
|
|
100
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
101
|
+
"Chrome/93.0.4577.63 Safari/537.36",
|
|
97
102
|
"X-Requested-With": "XMLHttpRequest",
|
|
98
103
|
}
|
|
99
104
|
params = {
|
|
@@ -135,13 +140,21 @@ def stock_new_ipo_cninfo() -> pd.DataFrame:
|
|
|
135
140
|
"上网发行数量",
|
|
136
141
|
]
|
|
137
142
|
]
|
|
138
|
-
temp_df["摇号结果公告日"] = pd.to_datetime(
|
|
139
|
-
|
|
143
|
+
temp_df["摇号结果公告日"] = pd.to_datetime(
|
|
144
|
+
temp_df["摇号结果公告日"], errors="coerce"
|
|
145
|
+
).dt.date
|
|
146
|
+
temp_df["中签公告日"] = pd.to_datetime(
|
|
147
|
+
temp_df["中签公告日"], errors="coerce"
|
|
148
|
+
).dt.date
|
|
140
149
|
temp_df["上市日期"] = pd.to_datetime(temp_df["上市日期"], errors="coerce").dt.date
|
|
141
|
-
temp_df["中签缴款日"] = pd.to_datetime(
|
|
150
|
+
temp_df["中签缴款日"] = pd.to_datetime(
|
|
151
|
+
temp_df["中签缴款日"], errors="coerce"
|
|
152
|
+
).dt.date
|
|
142
153
|
temp_df["申购日期"] = pd.to_datetime(temp_df["申购日期"], errors="coerce").dt.date
|
|
143
154
|
temp_df["发行价"] = pd.to_numeric(temp_df["发行价"], errors="coerce")
|
|
144
|
-
temp_df["上网发行中签率"] = pd.to_numeric(
|
|
155
|
+
temp_df["上网发行中签率"] = pd.to_numeric(
|
|
156
|
+
temp_df["上网发行中签率"], errors="coerce"
|
|
157
|
+
)
|
|
145
158
|
temp_df["总发行数量"] = pd.to_numeric(temp_df["总发行数量"], errors="coerce")
|
|
146
159
|
temp_df["发行市盈率"] = pd.to_numeric(temp_df["发行市盈率"], errors="coerce")
|
|
147
160
|
temp_df["上网发行数量"] = pd.to_numeric(temp_df["上网发行数量"], errors="coerce")
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# -*- coding:utf-8 -*-
|
|
3
|
+
"""
|
|
4
|
+
Date: 2024/11/18 16:00
|
|
5
|
+
Desc: 财新网-财新数据通
|
|
6
|
+
https://cxdata.caixin.com/pc/
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import pandas as pd
|
|
10
|
+
|
|
11
|
+
from akshare.request import make_request_with_retry_json
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def stock_news_main_cx() -> pd.DataFrame:
|
|
15
|
+
"""
|
|
16
|
+
财新网-财新数据通
|
|
17
|
+
https://cxdata.caixin.com/pc/
|
|
18
|
+
:return: 特定时间表示的字典
|
|
19
|
+
:rtype: pandas.DataFrame
|
|
20
|
+
"""
|
|
21
|
+
url = "https://cxdata.caixin.com/api/dataplus/sjtPc/jxNews"
|
|
22
|
+
params = {
|
|
23
|
+
"pageNum": "1",
|
|
24
|
+
"pageSize": "20000",
|
|
25
|
+
"showLabels": "true",
|
|
26
|
+
}
|
|
27
|
+
data_json = make_request_with_retry_json(url, params=params)
|
|
28
|
+
temp_df = pd.DataFrame(data_json["data"]["data"])
|
|
29
|
+
temp_df = temp_df[["tag", "summary", "intervalTime", "pubTime", "url"]]
|
|
30
|
+
temp_df.columns = ["tag", "summary", "interval_time", "pub_time", "url"]
|
|
31
|
+
temp_df["pub_time"] = pd.to_datetime(
|
|
32
|
+
temp_df["pub_time"], errors="coerce", unit="ms"
|
|
33
|
+
).astype(str)
|
|
34
|
+
return temp_df
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
if __name__ == "__main__":
|
|
38
|
+
stock_news_main_cx_df = stock_news_main_cx()
|
|
39
|
+
print(stock_news_main_cx_df)
|