akshare 1.14.30__py3-none-any.whl → 1.14.32__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 CHANGED
@@ -2841,9 +2841,11 @@ amac_manager_cancelled_info # 中国证券投资基金业协会-信息公示-诚
2841
2841
  1.14.28 fix: fix news_trade_notify_dividend_baidu interface
2842
2842
  1.14.29 fix: fix stock_individual_spot_xq interface
2843
2843
  1.14.30 fix: fix stock_us_hist_min_em interface
2844
+ 1.14.31 fix: fix option_shfe_daily interface
2845
+ 1.14.32 add: add stock_concept_cons_futu interface
2844
2846
  """
2845
2847
 
2846
- __version__ = "1.14.30"
2848
+ __version__ = "1.14.32"
2847
2849
  __author__ = "AKFamily"
2848
2850
 
2849
2851
  import sys
@@ -2865,6 +2867,11 @@ if sys.version_info < (3, 9):
2865
2867
 
2866
2868
  del sys
2867
2869
 
2870
+ """
2871
+ 富途牛牛-主题投资-概念板块-成分股
2872
+ """
2873
+ from akshare.stock_feature.stock_concept_futu import stock_concept_cons_futu
2874
+
2868
2875
  """
2869
2876
  商品期权手续费
2870
2877
  """
@@ -17,7 +17,7 @@ Desc: 商品期权数据
17
17
  import datetime
18
18
  import warnings
19
19
  from io import StringIO, BytesIO
20
- from typing import Tuple, Any
20
+ from typing import Tuple, Any, Optional
21
21
 
22
22
  import pandas as pd
23
23
  import requests
@@ -34,7 +34,7 @@ from akshare.option.cons import (
34
34
 
35
35
  def option_dce_daily(
36
36
  symbol: str = "聚乙烯期权", trade_date: str = "20210728"
37
- ) -> Tuple[Any, Any]:
37
+ ) -> Optional[Tuple[Any, Any]]:
38
38
  """
39
39
  大连商品交易所-期权-日频行情数据
40
40
  http://www.dce.com.cn/
@@ -225,7 +225,7 @@ def option_czce_daily(
225
225
 
226
226
  def option_shfe_daily(
227
227
  symbol: str = "铝期权", trade_date: str = "20200827"
228
- ) -> pd.DataFrame:
228
+ ) -> Optional[pd.DataFrame]:
229
229
  """
230
230
  上海期货交易所-期权-日频行情数据
231
231
  https://tsite.shfe.com.cn/statements/dataview.html?paramid=kxQ
@@ -0,0 +1,175 @@
1
+ import json
2
+
3
+ import pandas as pd
4
+ import requests
5
+ from bs4 import BeautifulSoup
6
+
7
+
8
+ def _stock_concept_cons_futu(symbol: str = "巴菲特持仓") -> pd.DataFrame:
9
+ """
10
+ 富途牛牛-主题投资-概念板块-成分股
11
+ https://www.futunn.com/quote/sparks-us?global_content=%7B%22promote_id%22%3A13766,%22sub_promote_id%22%3A24%7D
12
+ :param symbol: 板块名称; choice of {"巴菲特持仓", "佩洛西持仓"}
13
+ :type symbol: str
14
+ :return: 概念板块
15
+ :rtype: pandas.DataFrame
16
+ """
17
+ symbol_map = {
18
+ "巴菲特持仓": "BK2999",
19
+ "佩洛西持仓": "BK20883",
20
+ }
21
+ url = f"https://www.futunn.com/stock/{symbol_map[symbol]}"
22
+ # 定义查询参数
23
+ params = {"global_content": json.dumps({"promote_id": 13766, "sub_promote_id": 24})}
24
+ headers = {
25
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
26
+ "(KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
27
+ }
28
+ r = requests.get(url, params=params, headers=headers)
29
+ soup = BeautifulSoup(r.text, features="lxml")
30
+ temp_code_name = [
31
+ item.find_all("div", attrs={"class": "fix-left"})
32
+ for item in soup.find(name="div", attrs={"class": "content-main"}).find_all("a")
33
+ ]
34
+ temp_value_list = [
35
+ item.find_all("div", attrs={"class": "middle"})
36
+ for item in soup.find(name="div", attrs={"class": "content-main"}).find_all("a")
37
+ ]
38
+ code_name_list = [item[0].find_all("span") for item in temp_code_name]
39
+
40
+ quant_list = [item[0].find_all("span") for item in temp_value_list]
41
+ temp_df = pd.DataFrame(
42
+ [
43
+ [item[0]["title"] for item in code_name_list],
44
+ [item[1]["title"] for item in code_name_list],
45
+ [item[0]["title"] for item in quant_list],
46
+ [item[1]["title"] for item in quant_list],
47
+ [item[2]["title"] for item in quant_list],
48
+ [item[3]["title"] for item in quant_list],
49
+ [item[4]["title"] for item in quant_list],
50
+ [item[5]["title"] for item in quant_list],
51
+ [item[6]["title"] for item in quant_list],
52
+ [item[7]["title"] for item in quant_list],
53
+ [item[8]["title"] for item in quant_list],
54
+ [item[9]["title"] for item in quant_list],
55
+ [item[10]["title"] for item in quant_list],
56
+ [item[11]["title"] for item in quant_list],
57
+ [item[12]["title"] for item in quant_list],
58
+ [item[13]["title"] for item in quant_list],
59
+ [item[14]["title"] for item in quant_list],
60
+ ]
61
+ ).T
62
+ temp_df.columns = [
63
+ "代码",
64
+ "股票名称",
65
+ "最新价",
66
+ "涨跌额",
67
+ "涨跌幅",
68
+ "成交量",
69
+ "成交额",
70
+ "-",
71
+ "-",
72
+ "-",
73
+ "-",
74
+ "-",
75
+ "-",
76
+ "-",
77
+ "-",
78
+ "-",
79
+ "-",
80
+ ]
81
+ temp_df = temp_df[
82
+ [
83
+ "代码",
84
+ "股票名称",
85
+ "最新价",
86
+ "涨跌额",
87
+ "涨跌幅",
88
+ "成交量",
89
+ "成交额",
90
+ ]
91
+ ]
92
+ return temp_df
93
+
94
+
95
+ def stock_concept_cons_futu(symbol: str = "特朗普概念股") -> pd.DataFrame:
96
+ """
97
+ 富途牛牛-主题投资-概念板块-成分股
98
+ https://www.futunn.com/quote/sparks-us
99
+ :param symbol: 板块名称; choice of {"巴菲特持仓", "佩洛西持仓", "特朗普概念股"}
100
+ :type symbol: str
101
+ :return: 概念板块
102
+ :rtype: pandas.DataFrame
103
+ """
104
+ if symbol == "特朗普概念股":
105
+ url = "https://www.futunn.com/quote-api/quote-v2/get-plate-stock"
106
+ params = {
107
+ "marketType": "2",
108
+ "plateId": "10102960",
109
+ "page": "0",
110
+ "pageSize": "30",
111
+ }
112
+ headers = {
113
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
114
+ "(KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
115
+ "Quote-Token": "7f74cd2a5e",
116
+ }
117
+ r = requests.get(url, params=params, headers=headers)
118
+ data_json = r.json()
119
+ total_page = data_json["data"]["pagination"]["pageCount"]
120
+ big_df = pd.DataFrame()
121
+ for page in range(0, total_page):
122
+ params.update(
123
+ {
124
+ "page": page,
125
+ }
126
+ )
127
+ if page == 1:
128
+ headers.update({"Quote-Token": "a3043d6fed"})
129
+ r = requests.get(url, params=params, headers=headers)
130
+ data_json = r.json()
131
+ temp_df = pd.DataFrame(data_json["data"]["list"])
132
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
133
+
134
+ big_df.rename(
135
+ columns={
136
+ "stockCode": "代码",
137
+ "name": "股票名称",
138
+ "price": "最新价",
139
+ "change": "涨跌额",
140
+ "changeRatio": "涨跌幅",
141
+ "tradeVolumn": "成交量",
142
+ "tradeTrunover": "成交额",
143
+ },
144
+ inplace=True,
145
+ )
146
+ big_df = big_df[
147
+ [
148
+ "代码",
149
+ "股票名称",
150
+ "最新价",
151
+ "涨跌额",
152
+ "涨跌幅",
153
+ "成交量",
154
+ "成交额",
155
+ ]
156
+ ]
157
+ big_df["最新价"] = pd.to_numeric(big_df["最新价"], errors="coerce")
158
+ big_df["涨跌额"] = pd.to_numeric(big_df["涨跌额"], errors="coerce")
159
+ return big_df
160
+ else:
161
+ temp_df = _stock_concept_cons_futu(symbol)
162
+ temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce")
163
+ temp_df["涨跌额"] = pd.to_numeric(temp_df["涨跌额"], errors="coerce")
164
+ return temp_df
165
+
166
+
167
+ if __name__ == "__main__":
168
+ stock_concept_cons_futu_df = stock_concept_cons_futu(symbol="特朗普概念股")
169
+ print(stock_concept_cons_futu_df)
170
+
171
+ stock_concept_cons_futu_df = stock_concept_cons_futu(symbol="巴菲特持仓")
172
+ print(stock_concept_cons_futu_df)
173
+
174
+ stock_concept_cons_futu_df = stock_concept_cons_futu(symbol="佩洛西持仓")
175
+ print(stock_concept_cons_futu_df)
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/4/7 20:28
4
+ Date: 2024/7/15 16:30
5
5
  Desc: 新浪财经-ESG评级中心
6
6
  https://finance.sina.com.cn/esg/
7
7
  """
@@ -64,8 +64,8 @@ def stock_esg_msci_sina() -> pd.DataFrame:
64
64
  "factset_sector_name": "-",
65
65
  "factset_industry_code": "-",
66
66
  "factset_industry_name": "-",
67
- "date": "评级日期",
68
- "quarter": "评级季度",
67
+ "date": "-",
68
+ "quarter_date": "评级日期",
69
69
  "grade": "ESG等级",
70
70
  "score": "-",
71
71
  "env_score": "环境总评",
@@ -83,17 +83,13 @@ def stock_esg_msci_sina() -> pd.DataFrame:
83
83
  )
84
84
  big_df = big_df[
85
85
  [
86
- "股票名称",
87
86
  "股票代码",
88
87
  "ESG评分",
89
88
  "环境总评",
90
89
  "社会责任总评",
91
90
  "治理总评",
92
91
  "评级日期",
93
- "评级机构",
94
92
  "交易市场",
95
- "行业名称",
96
- "评级季度",
97
93
  ]
98
94
  ]
99
95
  big_df["评级日期"] = pd.to_datetime(big_df["评级日期"], errors="coerce").dt.date
@@ -177,7 +173,7 @@ def stock_esg_rate_sina() -> pd.DataFrame:
177
173
  url = "https://global.finance.sina.com.cn/api/openapi.php/EsgService.getEsgStocks?page=1&num=200"
178
174
  r = requests.get(url)
179
175
  data_json = r.json()
180
- page_num = math.ceil(data_json["result"]["data"]["info"]["total"] / 200)
176
+ page_num = math.ceil(int(data_json["result"]["data"]["info"]["total"]) / 200)
181
177
  big_df = pd.DataFrame()
182
178
  for page in tqdm(range(1, page_num + 1), leave=False):
183
179
  url = f"https://global.finance.sina.com.cn/api/openapi.php/EsgService.getEsgStocks?page={page}&num=200"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: akshare
3
- Version: 1.14.30
3
+ Version: 1.14.32
4
4
  Summary: AKShare is an elegant and simple financial data interface library for Python, built for human beings!
5
5
  Home-page: https://github.com/akfamily/akshare
6
6
  Author: AKFamily
@@ -1,4 +1,4 @@
1
- akshare/__init__.py,sha256=gZjCh4_xtzsji7DR1iSNIDwALya3EPInUkLwW7NAROI,179021
1
+ akshare/__init__.py,sha256=d-y1mQUZJUih4kh5hTFn6l1oVvxrVi3WLAVLtcYZugE,179252
2
2
  akshare/datasets.py,sha256=oIu1zC7o_LMHY22lQmdM7vCnryHibKrJLBqJwQiitlI,1167
3
3
  akshare/air/__init__.py,sha256=RMTf1bT5EOE3ttWpn3hGu1LtUmsVxDoa0W7W0gXHOy8,81
4
4
  akshare/air/air_hebei.py,sha256=xIXNGLK7IGYqrkteM9fxnHAwWqk6PCQs6D9-ggZ7byY,4442
@@ -195,7 +195,7 @@ akshare/nlp/nlp_interface.py,sha256=PyZjT3PkuTbloop-JwLwZ2kNi22zdO-r_pRUWQ5SmgM,
195
195
  akshare/option/__init__.py,sha256=RMTf1bT5EOE3ttWpn3hGu1LtUmsVxDoa0W7W0gXHOy8,81
196
196
  akshare/option/cons.py,sha256=zTRZ62RFwOcAKfmso-7nZJtT3a8Dt1nQbNnEjSqgjpI,4811
197
197
  akshare/option/option_comm_qihuo.py,sha256=kjbdp-94KJJJi1ex5U03abtlgviqwP0Aahb6FwddPkk,3128
198
- akshare/option/option_commodity.py,sha256=UdhkZSs6ZjQFx9KMQPOI93AuGCnFKD6N5MMkuVGN6Io,20082
198
+ akshare/option/option_commodity.py,sha256=MVxFaGLeBE1Qh-IdLBkmDumyLNy8oObauptwAbcpxcU,20112
199
199
  akshare/option/option_commodity_sina.py,sha256=r6qK_K7w3A6Uqp5ZtBb4pW7vH04oMyeCEZLLGqi0jpA,7776
200
200
  akshare/option/option_czce.py,sha256=L4i7TVKcOns5ZKoqq-mrSykdx3SGwu6OL4eI77-A_lc,1812
201
201
  akshare/option/option_daily_stats_sse_szse.py,sha256=Ip_vE81qbEGt4ocbtWfUT7XGu0HWU0zKkzauZeq9RJA,4962
@@ -296,12 +296,13 @@ akshare/stock_feature/stock_board_industry_ths.py,sha256=ZJ-lODgxGNluMp3z72qpXoa
296
296
  akshare/stock_feature/stock_buffett_index_lg.py,sha256=NpNccHmGjtqLz6aUladB6InPzO2pjoImbgCgmNEYUuM,2027
297
297
  akshare/stock_feature/stock_classify_sina.py,sha256=Lg7ROG5W9HioFRplJI2rZ6tAAHM09N3g9qF6kReIQYI,3210
298
298
  akshare/stock_feature/stock_comment_em.py,sha256=3HpMZkCiIC6o6LzLZLNA-rYKBMRPeuTaj6xfuU7o4J0,14252
299
+ akshare/stock_feature/stock_concept_futu.py,sha256=Fut1t3F4gxQvVAhwE1qV6V-csj2UloIx5UAhKcIVHKg,6130
299
300
  akshare/stock_feature/stock_congestion_lg.py,sha256=iTEcmL0HoSqWGfxv_gSM-qA4O23aqUH7qHl9asDtoO0,1299
300
301
  akshare/stock_feature/stock_cyq_em.py,sha256=z670B8Hxkq3iTjzqWoN8w6oQBHwmLLMaa0YERySk60g,11036
301
302
  akshare/stock_feature/stock_disclosure_cninfo.py,sha256=1Eje6abqk6HNOlpCueGnaR_r1-aqTv2f51h4QAHCQzo,10661
302
303
  akshare/stock_feature/stock_dxsyl_em.py,sha256=9d5tfHCB9Ls1FQdyOCElZt8YF5ltKwPa4AvnXL8u48o,18789
303
304
  akshare/stock_feature/stock_ebs_lg.py,sha256=rnFbOHnZPZUJ3K7-QdTZXqbIFazL1wSkTvn4Mpwn7bI,1750
304
- akshare/stock_feature/stock_esg_sina.py,sha256=anhg9jnouUFtWzyzQHe0MxoQFPTNScSimCoup31_U00,10741
305
+ akshare/stock_feature/stock_esg_sina.py,sha256=MCTfn2uGG3GO0mUDz3Av_YBC2IUcxymbqaUTXT7kJzA,10629
305
306
  akshare/stock_feature/stock_fhps_em.py,sha256=85gfdMP3OtA3wsEGlB2RkdHiOEZjFff1ls5x1oWSQPQ,9469
306
307
  akshare/stock_feature/stock_fhps_ths.py,sha256=NosH1xyT1Pif4T9tchdtJTBEpe6g1Wq2kjvxJDsZD_Y,1805
307
308
  akshare/stock_feature/stock_fund_flow.py,sha256=bRFRUzMgJOUJ9hiUt-cVYKPGTAspsPdKZEBSlsXmQH0,18445
@@ -378,8 +379,8 @@ akshare/utils/token_process.py,sha256=K4rGXjh_tgugbRcyOK2h2x0jP3PT65IIK7nxhUKhOe
378
379
  akshare/utils/tqdm.py,sha256=MuPNwcswkOGjwWQOMWXi9ZvQ_RmW4obCWRj2i7HM7FE,847
379
380
  tests/__init__.py,sha256=gNzhlO0UPjFq6Ieb38kaVIODXv4cTDByrdohAZnDYt4,82
380
381
  tests/test_func.py,sha256=tfvy_YnYmDra2dkKZ5JvprU1gNW5X9T634PszdSdH1A,944
381
- akshare-1.14.30.dist-info/LICENSE,sha256=mmSZCPgfHiVw34LXuFArd-SUgQtBJ_QsIlh-kWlDHfs,1073
382
- akshare-1.14.30.dist-info/METADATA,sha256=U01SFsemXoqTabtkHwpgzv2BmACRXuNULDVqqAspHFw,14010
383
- akshare-1.14.30.dist-info/WHEEL,sha256=Z4pYXqR_rTB7OWNDYFOm1qRk0RX6GFP2o8LgvP453Hk,91
384
- akshare-1.14.30.dist-info/top_level.txt,sha256=jsf9ZzZPmHaISTVumQPsAw7vv7Yv-PdEVW70SMEelQQ,14
385
- akshare-1.14.30.dist-info/RECORD,,
382
+ akshare-1.14.32.dist-info/LICENSE,sha256=mmSZCPgfHiVw34LXuFArd-SUgQtBJ_QsIlh-kWlDHfs,1073
383
+ akshare-1.14.32.dist-info/METADATA,sha256=4piFGt54YUfpoLakR6T5cKP_A4wOQJyJanvr1-ImQB4,14010
384
+ akshare-1.14.32.dist-info/WHEEL,sha256=Z4pYXqR_rTB7OWNDYFOm1qRk0RX6GFP2o8LgvP453Hk,91
385
+ akshare-1.14.32.dist-info/top_level.txt,sha256=jsf9ZzZPmHaISTVumQPsAw7vv7Yv-PdEVW70SMEelQQ,14
386
+ akshare-1.14.32.dist-info/RECORD,,