akshare 1.14.36__py3-none-any.whl → 1.14.37__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.
Files changed (45) hide show
  1. akshare/__init__.py +2 -1
  2. akshare/air/air_zhenqi.py +3 -3
  3. akshare/bond/bond_issue_cninfo.py +1 -1
  4. akshare/bond/bond_zh_cov.py +1 -1
  5. akshare/bond/bond_zh_sina.py +1 -1
  6. akshare/fund/fund_etf_sina.py +2 -1
  7. akshare/fund/fund_report_cninfo.py +41 -30
  8. akshare/futures/futures_zh_sina.py +1 -1
  9. akshare/index/index_fear_greed_funddb.py +1 -1
  10. akshare/index/index_stock_hk.py +1 -1
  11. akshare/index/index_stock_us_sina.py +1 -1
  12. akshare/index/index_stock_zh.py +1 -1
  13. akshare/movie/artist_yien.py +32 -5
  14. akshare/movie/movie_yien.py +1 -1
  15. akshare/movie/video_yien.py +28 -5
  16. akshare/stock/stock_allotment_cninfo.py +1 -1
  17. akshare/stock/stock_cg_equity_mortgage.py +5 -2
  18. akshare/stock/stock_cg_guarantee.py +1 -1
  19. akshare/stock/stock_cg_lawsuit.py +36 -35
  20. akshare/stock/stock_dividend_cninfo.py +1 -1
  21. akshare/stock/stock_hk_sina.py +8 -7
  22. akshare/stock/stock_hold_control_cninfo.py +2 -1
  23. akshare/stock/stock_hold_num_cninfo.py +8 -3
  24. akshare/stock/stock_industry_cninfo.py +1 -1
  25. akshare/stock/stock_industry_pe_cninfo.py +1 -1
  26. akshare/stock/stock_ipo_summary_cninfo.py +1 -1
  27. akshare/stock/stock_new_cninfo.py +17 -6
  28. akshare/stock/stock_profile_cninfo.py +1 -1
  29. akshare/stock/stock_rank_forecast.py +2 -1
  30. akshare/stock/stock_share_changes_cninfo.py +1 -1
  31. akshare/stock/stock_us_sina.py +8 -9
  32. akshare/stock/stock_zh_a_sina.py +1 -1
  33. akshare/stock/stock_zh_b_sina.py +10 -9
  34. akshare/stock/stock_zh_kcb_report.py +11 -9
  35. akshare/stock_feature/stock_a_pe_and_pb.py +1 -1
  36. akshare/stock_feature/stock_board_industry_ths.py +52 -324
  37. akshare/stock_feature/stock_cyq_em.py +1 -1
  38. akshare/stock_feature/stock_fund_flow.py +8 -3
  39. akshare/stock_feature/stock_technology_ths.py +44 -57
  40. akshare/tool/trade_date_hist.py +1 -1
  41. {akshare-1.14.36.dist-info → akshare-1.14.37.dist-info}/METADATA +2 -3
  42. {akshare-1.14.36.dist-info → akshare-1.14.37.dist-info}/RECORD +45 -45
  43. {akshare-1.14.36.dist-info → akshare-1.14.37.dist-info}/WHEEL +1 -1
  44. {akshare-1.14.36.dist-info → akshare-1.14.37.dist-info}/LICENSE +0 -0
  45. {akshare-1.14.36.dist-info → akshare-1.14.37.dist-info}/top_level.txt +0 -0
@@ -1,22 +1,23 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/7/19 14:20
5
- Desc: 同花顺-板块-行业板块
4
+ Date: 2024/7/21 18:20
5
+ Desc: 同花顺-板块-同花顺行业
6
6
  https://q.10jqka.com.cn/thshy/
7
7
  """
8
8
 
9
9
  from datetime import datetime
10
+ from functools import lru_cache
10
11
  from io import StringIO
11
12
 
12
13
  import pandas as pd
13
14
  import requests
14
15
  from bs4 import BeautifulSoup
15
- from py_mini_racer import py_mini_racer
16
- from akshare.utils.tqdm import get_tqdm
16
+ import py_mini_racer
17
17
 
18
18
  from akshare.datasets import get_ths_js
19
19
  from akshare.utils import demjson
20
+ from akshare.utils.tqdm import get_tqdm
20
21
 
21
22
 
22
23
  def _get_file_content_ths(file: str = "ths.js") -> str:
@@ -33,6 +34,37 @@ def _get_file_content_ths(file: str = "ths.js") -> str:
33
34
  return file_data
34
35
 
35
36
 
37
+ @lru_cache()
38
+ def _get_stock_board_industry_name_ths() -> dict:
39
+ """
40
+ 获取同花顺行业代码和名称字典
41
+ :return: 获取同花顺行业代码和名称字典
42
+ :rtype: dict
43
+ """
44
+ js_code = py_mini_racer.MiniRacer()
45
+ js_content = _get_file_content_ths("ths.js")
46
+ js_code.eval(js_content)
47
+ v_code = js_code.call("v")
48
+ headers = {
49
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
50
+ "Chrome/89.0.4389.90 Safari/537.36",
51
+ "Cookie": f"v={v_code}",
52
+ }
53
+ url = "https://q.10jqka.com.cn/thshy/detail/code/881272/"
54
+ r = requests.get(url, headers=headers)
55
+ soup = BeautifulSoup(r.text, features="lxml")
56
+ code_list = [
57
+ item["href"].split("/")[-2]
58
+ for item in soup.find(name="div", attrs={"class": "cate_inner"}).find_all("a")
59
+ ]
60
+ name_list = [
61
+ item.text
62
+ for item in soup.find(name="div", attrs={"class": "cate_inner"}).find_all("a")
63
+ ]
64
+ name_code_map = dict(zip(name_list, code_list))
65
+ return name_code_map
66
+
67
+
36
68
  def stock_board_industry_name_ths() -> pd.DataFrame:
37
69
  """
38
70
  同花顺-板块-行业板块-行业
@@ -40,319 +72,10 @@ def stock_board_industry_name_ths() -> pd.DataFrame:
40
72
  :return: 所有行业板块的名称和链接
41
73
  :rtype: pandas.DataFrame
42
74
  """
43
- code_name_ths_map = {
44
- "881101": "种植业与林业",
45
- "881102": "养殖业",
46
- "881103": "农产品加工",
47
- "881104": "农业服务",
48
- "881105": "煤炭开采加工",
49
- "881107": "油气开采及服务",
50
- "881108": "化学原料",
51
- "881109": "化学制品",
52
- "881110": "化工合成材料",
53
- "881112": "钢铁",
54
- "881114": "金属新材料",
55
- "881115": "建筑材料",
56
- "881116": "建筑装饰",
57
- "881117": "通用设备",
58
- "881118": "专用设备",
59
- "881119": "仪器仪表",
60
- "881120": "电力设备",
61
- "881121": "半导体及元件",
62
- "881122": "光学光电子",
63
- "881123": "其他电子",
64
- "881124": "消费电子",
65
- "881125": "汽车整车",
66
- "881126": "汽车零部件",
67
- "881127": "非汽车交运",
68
- "881128": "汽车服务",
69
- "881129": "通信设备",
70
- "881130": "计算机设备",
71
- "881131": "白色家电",
72
- "881132": "黑色家电",
73
- "881133": "饮料制造",
74
- "881134": "食品加工制造",
75
- "881135": "纺织制造",
76
- "881136": "服装家纺",
77
- "881137": "造纸",
78
- "881138": "包装印刷",
79
- "881139": "家用轻工",
80
- "881140": "化学制药",
81
- "881141": "中药",
82
- "881142": "生物制品",
83
- "881143": "医药商业",
84
- "881144": "医疗器械",
85
- "881145": "电力",
86
- "881146": "燃气",
87
- "881148": "港口航运",
88
- "881149": "公路铁路运输",
89
- "881151": "机场航运",
90
- "881152": "物流",
91
- "881153": "房地产开发",
92
- "881155": "银行",
93
- "881156": "保险及其他",
94
- "881157": "证券",
95
- "881158": "零售",
96
- "881159": "贸易",
97
- "881160": "景点及旅游",
98
- "881161": "酒店及餐饮",
99
- "881162": "通信服务",
100
- "881163": "计算机应用",
101
- "881164": "传媒",
102
- "881165": "综合",
103
- "881166": "国防军工",
104
- "881167": "非金属材料",
105
- "881168": "工业金属",
106
- "881169": "贵金属",
107
- "881170": "小金属",
108
- "881171": "自动化设备",
109
- "881172": "电子化学品",
110
- "881173": "小家电",
111
- "881174": "厨卫电器",
112
- "881175": "医疗服务",
113
- "881176": "房地产服务",
114
- "881177": "互联网电商",
115
- "881178": "教育",
116
- "881179": "其他社会服务",
117
- "881180": "石油加工贸易",
118
- "881181": "环保",
119
- "881182": "美容护理",
120
- "881207": "元件", # 20240719
121
- "881266": "橡胶制品", # 20240719
122
- "884001": "种子生产",
123
- "884002": "粮食种植",
124
- "884003": "其他种植业",
125
- "884004": "林业",
126
- "884005": "海洋捕捞",
127
- "884006": "水产养殖",
128
- "884007": "畜禽养殖",
129
- "884008": "饲料",
130
- "884009": "果蔬加工",
131
- "884010": "粮油加工",
132
- "884011": "其他农产品加工",
133
- "884012": "农业综合",
134
- "884013": "动物保健",
135
- "884014": "煤炭开采",
136
- "884015": "焦炭加工",
137
- "884016": "油气开采",
138
- "884018": "油服工程",
139
- "884020": "石油加工",
140
- "884021": "油品石化贸易",
141
- "884022": "纯碱",
142
- "884023": "氯碱",
143
- "884024": "无机盐",
144
- "884025": "其他化学原料",
145
- "884026": "氮肥",
146
- "884027": "磷肥及磷化工",
147
- "884028": "农药",
148
- "884030": "涂料油墨",
149
- "884031": "钾肥",
150
- "884032": "民爆用品",
151
- "884033": "纺织化学用品",
152
- "884034": "其他化学制品",
153
- "884035": "复合肥",
154
- "884036": "氟化工",
155
- "884039": "聚氨酯",
156
- "884041": "涤纶",
157
- "884043": "粘胶",
158
- "884044": "其他纤维",
159
- "884045": "氨纶",
160
- "884046": "其他塑料制品",
161
- "884048": "改性塑料",
162
- "884050": "其他橡胶制品",
163
- "884051": "炭黑",
164
- "884052": "普钢",
165
- "884053": "铝",
166
- "884054": "铜",
167
- "884055": "铅锌",
168
- "884056": "其他金属新材料",
169
- "884057": "磁性材料",
170
- "884058": "非金属材料Ⅲ",
171
- "884059": "玻璃玻纤",
172
- "884060": "水泥",
173
- "884062": "其他建材",
174
- "884063": "耐火材料",
175
- "884064": "管材",
176
- "884065": "装饰园林",
177
- "884066": "房屋建设",
178
- "884067": "基础建设",
179
- "884068": "专业工程",
180
- "884069": "机床工具",
181
- "884071": "磨具磨料",
182
- "884073": "制冷空调设备",
183
- "884074": "其他通用设备",
184
- "884075": "金属制品",
185
- "884076": "纺织服装设备",
186
- "884077": "工程机械",
187
- "884078": "农用机械",
188
- "884080": "能源及重型设备",
189
- "884081": "印刷包装机械",
190
- "884082": "其他专用设备",
191
- "884083": "楼宇设备",
192
- "884084": "环保设备",
193
- "884085": "电机",
194
- "884086": "电气自控设备",
195
- "884088": "输变电设备",
196
- "884089": "线缆部件及其他",
197
- "884090": "分立器件",
198
- "884091": "半导体材料",
199
- "884092": "印制电路板",
200
- "884093": "被动元件",
201
- "884094": "面板",
202
- "884095": "LED",
203
- "884096": "光学元件",
204
- "884098": "消费电子零部件及组装",
205
- "884099": "乘用车",
206
- "884100": "商用载货车",
207
- "884101": "商用载客车",
208
- "884105": "轨交设备",
209
- "884106": "其他交运设备",
210
- "884107": "汽车服务Ⅲ",
211
- "884112": "冰洗",
212
- "884113": "空调",
213
- "884115": "小家电Ⅲ",
214
- "884116": "其他白色家电",
215
- "884117": "彩电",
216
- "884118": "其他黑色家电",
217
- "884119": "其他酒类",
218
- "884120": "软饮料",
219
- "884123": "肉制品",
220
- "884124": "调味发酵品",
221
- "884125": "乳品",
222
- "884126": "其他食品",
223
- "884128": "棉纺",
224
- "884130": "印染",
225
- "884131": "辅料",
226
- "884132": "其他纺织",
227
- "884136": "鞋帽及其他",
228
- "884137": "家纺",
229
- "884139": "家具",
230
- "884140": "其他家用轻工",
231
- "884141": "饰品",
232
- "884142": "文娱用品",
233
- "884143": "原料药",
234
- "884144": "化学制剂",
235
- "884145": "医疗设备",
236
- "884146": "火电",
237
- "884147": "水电",
238
- "884149": "热力",
239
- "884150": "新能源发电",
240
- "884152": "燃气Ⅲ",
241
- "884153": "港口",
242
- "884154": "高速公路",
243
- "884155": "铁路运输",
244
- "884156": "机场",
245
- "884157": "航空运输",
246
- "884158": "多元金融",
247
- "884159": "保险",
248
- "884160": "百货零售",
249
- "884161": "专业连锁",
250
- "884162": "商业物业经营",
251
- "884163": "人工景点",
252
- "884164": "自然景点",
253
- "884165": "旅游综合",
254
- "884167": "酒店",
255
- "884168": "餐饮",
256
- "884172": "有线电视网络",
257
- "884173": "通信服务Ⅲ",
258
- "884174": "软件开发",
259
- "884176": "出版",
260
- "884177": "影视院线",
261
- "884178": "广告营销",
262
- "884179": "其他传媒",
263
- "884180": "航天装备",
264
- "884181": "航空装备",
265
- "884182": "地面兵装",
266
- "884183": "航海装备",
267
- "884184": "特钢",
268
- "884185": "贵金属Ⅲ",
269
- "884186": "其他小金属",
270
- "884188": "白酒",
271
- "884189": "啤酒",
272
- "884191": "航运",
273
- "884192": "仪器仪表Ⅲ",
274
- "884193": "其他电子Ⅲ",
275
- "884194": "汽车零部件Ⅲ",
276
- "884195": "造纸Ⅲ",
277
- "884197": "中药Ⅲ",
278
- "884199": "医药商业Ⅲ",
279
- "884200": "公交",
280
- "884201": "物流Ⅲ",
281
- "884202": "住宅开发",
282
- "884203": "产业地产",
283
- "884205": "证券Ⅲ",
284
- "884206": "贸易Ⅲ",
285
- "884207": "计算机设备Ⅲ",
286
- "884208": "综合Ⅲ",
287
- "884209": "钛白粉",
288
- "884210": "食品及饲料添加剂",
289
- "884211": "有机硅",
290
- "884212": "合成树脂",
291
- "884213": "膜材料",
292
- "884214": "冶钢原料",
293
- "884215": "稀土",
294
- "884216": "能源金属",
295
- "884217": "工程咨询服务",
296
- "884218": "机器人",
297
- "884219": "工控设备",
298
- "884220": "激光设备",
299
- "884221": "其他自动化设备",
300
- "884222": "光伏设备",
301
- "884223": "风电设备",
302
- "884224": "电池",
303
- "884225": "其他电源设备",
304
- "884226": "集成电路设计",
305
- "884227": "集成电路制造",
306
- "884228": "集成电路封测",
307
- "884229": "半导体设备",
308
- "884230": "品牌消费电子",
309
- "884231": "电子化学品Ⅲ",
310
- "884232": "厨卫电器Ⅲ",
311
- "884233": "休闲食品",
312
- "884234": "服装",
313
- "884235": "印刷",
314
- "884236": "包装",
315
- "884237": "瓷砖地板",
316
- "884238": "血液制品",
317
- "884239": "疫苗",
318
- "884240": "其他生物制品",
319
- "884242": "医疗耗材",
320
- "884243": "体外诊断",
321
- "884244": "医疗研发外包",
322
- "884245": "其他医疗服务",
323
- "884246": "电能综合服务",
324
- "884247": "商业地产",
325
- "884248": "房地产服务Ⅲ",
326
- "884249": "国有大型银行",
327
- "884250": "股份制银行",
328
- "884251": "城商行",
329
- "884252": "农商行",
330
- "884253": "其他银行",
331
- "884254": "旅游零售",
332
- "884255": "互联网电商Ⅲ",
333
- "884256": "教育Ⅲ",
334
- "884257": "专业服务",
335
- "884258": "体育",
336
- "884259": "其他社会服务Ⅲ",
337
- "884260": "游戏",
338
- "884261": "数字媒体",
339
- "884262": "通信网络设备及器件",
340
- "884263": "通信线缆及配套",
341
- "884264": "通信终端及配件",
342
- "884265": "其他通信设备",
343
- "884266": "军工电子",
344
- "884267": "大气治理",
345
- "884268": "水务及水治理",
346
- "884269": "固废治理",
347
- "884270": "综合环境治理",
348
- "884271": "个护用品",
349
- "884272": "化妆品",
350
- "884273": "医疗美容",
351
- "884274": "IT服务",
352
- }
75
+ code_name_ths_map = _get_stock_board_industry_name_ths()
353
76
  temp_df = pd.DataFrame.from_dict(code_name_ths_map, orient="index")
354
77
  temp_df.reset_index(inplace=True)
355
- temp_df.columns = ["code", "name"]
78
+ temp_df.columns = ["name", "code"]
356
79
  temp_df = temp_df[
357
80
  [
358
81
  "name",
@@ -362,7 +85,7 @@ def stock_board_industry_name_ths() -> pd.DataFrame:
362
85
  return temp_df
363
86
 
364
87
 
365
- def stock_board_industry_info_ths(symbol: str = "半导体及元件") -> pd.DataFrame:
88
+ def stock_board_industry_info_ths(symbol: str = "半导体") -> pd.DataFrame:
366
89
  """
367
90
  同花顺-板块-行业板块-板块简介
368
91
  http://q.10jqka.com.cn/gn/detail/code/301558/
@@ -396,13 +119,13 @@ def stock_board_industry_info_ths(symbol: str = "半导体及元件") -> pd.Data
396
119
 
397
120
 
398
121
  def stock_board_industry_index_ths(
399
- symbol: str = "半导体及元件",
122
+ symbol: str = "元件",
400
123
  start_date: str = "20200101",
401
124
  end_date: str = "20240108",
402
125
  ) -> pd.DataFrame:
403
126
  """
404
127
  同花顺-板块-行业板块-指数数据
405
- https://q.10jqka.com.cn/gn/detail/code/301558/
128
+ https://q.10jqka.com.cn/thshy/detail/code/881270/
406
129
  :param start_date: 开始时间
407
130
  :type start_date: str
408
131
  :param end_date: 结束时间
@@ -412,13 +135,16 @@ def stock_board_industry_index_ths(
412
135
  :return: 指数数据
413
136
  :rtype: pandas.DataFrame
414
137
  """
415
- code_map = stock_board_industry_name_ths()
416
- code_map = dict(zip(code_map["name"].values, code_map["code"].values))
138
+ code_map = _get_stock_board_industry_name_ths()
417
139
  symbol_code = code_map[symbol]
418
140
  big_df = pd.DataFrame()
419
141
  current_year = datetime.now().year
420
142
  begin_year = int(start_date[:4])
421
143
  tqdm = get_tqdm()
144
+ js_code = py_mini_racer.MiniRacer()
145
+ js_content = _get_file_content_ths("ths.js")
146
+ js_code.eval(js_content)
147
+ v_code = js_code.call("v")
422
148
  for year in tqdm(range(begin_year, current_year + 1), leave=False):
423
149
  url = f"https://d.10jqka.com.cn/v4/line/bk_{symbol_code}/01/{year}.js"
424
150
  headers = {
@@ -426,9 +152,11 @@ def stock_board_industry_index_ths(
426
152
  "Chrome/89.0.4389.90 Safari/537.36",
427
153
  "Referer": "http://q.10jqka.com.cn",
428
154
  "Host": "d.10jqka.com.cn",
155
+ "Cookie": f"v={v_code}",
429
156
  }
430
157
  r = requests.get(url, headers=headers)
431
158
  data_text = r.text
159
+
432
160
  try:
433
161
  demjson.decode(data_text[data_text.find("{") : -1])
434
162
  except: # noqa: E722
@@ -610,13 +338,10 @@ if __name__ == "__main__":
610
338
  print(stock_board_industry_info_ths_df)
611
339
 
612
340
  stock_board_industry_index_ths_df = stock_board_industry_index_ths(
613
- symbol="通信服务", start_date="20230825", end_date="20240221"
341
+ symbol="元件", start_date="20240101", end_date="20240718"
614
342
  )
615
343
  print(stock_board_industry_index_ths_df)
616
344
 
617
- stock_ipo_benefit_ths_df = stock_ipo_benefit_ths()
618
- print(stock_ipo_benefit_ths_df)
619
-
620
345
  stock_board_industry_summary_ths_df = stock_board_industry_summary_ths()
621
346
  print(stock_board_industry_summary_ths_df)
622
347
 
@@ -624,3 +349,6 @@ if __name__ == "__main__":
624
349
  print(stock)
625
350
  stock_board_industry_index_ths_df = stock_board_industry_index_ths(symbol=stock)
626
351
  print(stock_board_industry_index_ths_df)
352
+
353
+ stock_ipo_benefit_ths_df = stock_ipo_benefit_ths()
354
+ print(stock_ipo_benefit_ths_df)
@@ -11,7 +11,7 @@ from datetime import datetime
11
11
 
12
12
  import pandas as pd
13
13
  import requests
14
- from py_mini_racer import py_mini_racer
14
+ import py_mini_racer
15
15
 
16
16
  from akshare.stock_feature.stock_hist_em import code_id_map_em
17
17
 
@@ -12,12 +12,13 @@ https://data.10jqka.com.cn/funds/hyzjl/#refCountId=data_55f13c2c_254
12
12
  同花顺-数据中心-资金流向-打单追踪
13
13
  https://data.10jqka.com.cn/funds/ddzz/#refCountId=data_55f13c2c_254
14
14
  """
15
+
15
16
  from io import StringIO
16
17
 
17
18
  import pandas as pd
18
19
  import requests
19
20
  from bs4 import BeautifulSoup
20
- from py_mini_racer import py_mini_racer
21
+ import py_mini_racer
21
22
  from akshare.utils.tqdm import get_tqdm
22
23
 
23
24
  from akshare.datasets import get_ths_js
@@ -218,7 +219,9 @@ def stock_fund_flow_concept(symbol: str = "即时") -> pd.DataFrame:
218
219
  big_df["行业-涨跌幅"] = big_df["行业-涨跌幅"].str.strip("%")
219
220
  big_df["领涨股-涨跌幅"] = big_df["领涨股-涨跌幅"].str.strip("%")
220
221
  big_df["行业-涨跌幅"] = pd.to_numeric(big_df["行业-涨跌幅"], errors="coerce")
221
- big_df["领涨股-涨跌幅"] = pd.to_numeric(big_df["领涨股-涨跌幅"], errors="coerce")
222
+ big_df["领涨股-涨跌幅"] = pd.to_numeric(
223
+ big_df["领涨股-涨跌幅"], errors="coerce"
224
+ )
222
225
  else:
223
226
  big_df.columns = [
224
227
  "序号",
@@ -320,7 +323,9 @@ def stock_fund_flow_industry(symbol: str = "即时") -> pd.DataFrame:
320
323
  big_df["行业-涨跌幅"] = big_df["行业-涨跌幅"].str.strip("%")
321
324
  big_df["领涨股-涨跌幅"] = big_df["领涨股-涨跌幅"].str.strip("%")
322
325
  big_df["行业-涨跌幅"] = pd.to_numeric(big_df["行业-涨跌幅"], errors="coerce")
323
- big_df["领涨股-涨跌幅"] = pd.to_numeric(big_df["领涨股-涨跌幅"], errors="coerce")
326
+ big_df["领涨股-涨跌幅"] = pd.to_numeric(
327
+ big_df["领涨股-涨跌幅"], errors="coerce"
328
+ )
324
329
  else:
325
330
  big_df.columns = [
326
331
  "序号",