mns-common 1.2.6.5__py3-none-any.whl → 1.2.6.7__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 mns-common might be problematic. Click here for more details.

@@ -0,0 +1,7 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 16
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
@@ -0,0 +1,122 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 16
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
8
+
9
+ import requests
10
+ from bs4 import BeautifulSoup
11
+ import pandas as pd
12
+ import mns_common.utils.data_frame_util as data_frame_util
13
+ from loguru import logger
14
+
15
+
16
+ # 获取参股公司 子公司 孙公司 联营企业
17
+ def get_company_hold_info(symbol, ths_cookie):
18
+ try:
19
+
20
+ url = "https://basic.10jqka.com.cn/new/" + symbol + "/company.html"
21
+
22
+ headers = {
23
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
24
+ "Accept-Language": "zh-CN,zh;q=0.9",
25
+ "Cache-Control": "max-age=0",
26
+ "Connection": "keep-alive",
27
+ "Sec-Fetch-Dest": "document",
28
+ "Sec-Fetch-Mode": "navigate",
29
+ "Sec-Fetch-Site": "cross-site",
30
+ "Sec-Fetch-User": "?1",
31
+ "Upgrade-Insecure-Requests": "1",
32
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36",
33
+ "sec-ch-ua": "\"Google Chrome\";v=\"129\", \"Not=A?Brand\";v=\"8\", \"Chromium\";v=\"129\"",
34
+ "sec-ch-ua-mobile": "?0",
35
+ "sec-ch-ua-platform": "\"Windows\"",
36
+ "cookie": ths_cookie
37
+ }
38
+ cookies = {
39
+ "searchGuide": "sg",
40
+ "skin_color": "white",
41
+ "Hm_lvt_722143063e4892925903024537075d0d": "1725031809,1725842892,1726621825,1727227162",
42
+ "Hm_lvt_929f8b362150b1f77b477230541dbbc2": "1725031809,1725842892,1726621825,1727227162",
43
+ "spversion": "20130314",
44
+ "user": "MDq%2BsNDQcE06Ok5vbmU6NTAwOjYxMzk4NTQ0ODo1LDEsMjA7NiwxLDIwOzcsMTExMTExMTExMTEwLDIwOzgsMTExMTAxMTEwMDAwMTExMTEwMDEwMDEwMDEwMDAwMDAsMjA7MzMsMDAwMTAwMDAwMDAwLDIwOzM2LDEwMDExMTExMDAwMDExMDAxMDExMTExMSwyMDs0NiwwMDAwMTExMTEwMDAwMDExMTExMTExMTEsMjA7NTEsMTEwMDAwMDAwMDAwMDAwMCwyMDs1OCwwMDAwMDAwMDAwMDAwMDAwMSwyMDs3OCwxLDIwOzg3LDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMCwyMDsxMTksMDAwMDAwMDAwMDAwMDAwMDAwMTAxMDAwMDAsMjA7MTI1LDExLDIwOzQ0LDExLDQwOzEsMTAxLDQwOzIsMSw0MDszLDEsNDA7MTAyLDEsNDA6Mjc6Ojo2MDM5ODU0NDg6MTcyODQ4NzEyNjo6OjE2MzQ1NjY5ODA6NjA0ODAwOjA6MTRhZjIxYmRiNTgzODUxOTgxZWVjZGQ4NjQxZjA2NDg5OmRlZmF1bHRfNDox",
45
+ "userid": "603985448",
46
+ "u_name": "%BE%B0%D0%D0pM",
47
+ "escapename": "%25u666f%25u884cpM",
48
+ "ticket": "955f0ee44d86aede75787f64ae45bae9",
49
+ "user_status": "0",
50
+ "utk": "2df15e757efe7d4a489cf764fa371ff9",
51
+ "Hm_lvt_78c58f01938e4d85eaf619eae71b4ed1": "1728463065,1728526291,1728541890,1728550124",
52
+ "historystock": "301551%7C*%7C002205%7C*%7C000627%7C*%7C300746%7C*%7C300139",
53
+ "reviewJump": "nojump",
54
+ "usersurvey": "1",
55
+ "v": "A8mumxxpynGwb7YF90Bxvvav2P4mFrxUJwzh32s-RzXtX-dgs2bNGLda8aj4"
56
+ }
57
+ response = requests.get(url, headers=headers, cookies=cookies)
58
+ soup = BeautifulSoup(response.content, "lxml")
59
+
60
+ # 找到表格
61
+ table = soup.find('table', id='ckg_table')
62
+
63
+ # 提取表头
64
+ table_headers = [header.get_text(strip=True) for header in table.find_all('th')]
65
+
66
+ # 提取表格数据
67
+ data = []
68
+ for row in table.find_all('tr')[1:]: # 跳过表头
69
+ cells = [cell.get_text(strip=True) for cell in row.find_all('td')]
70
+ if cells: # 确保行不为空
71
+ data.append(cells)
72
+
73
+ # 创建 DataFrame
74
+ df = pd.DataFrame(data, columns=table_headers)
75
+ if data_frame_util.is_empty(df):
76
+ return pd.DataFrame()
77
+ del df['序号']
78
+
79
+ ['序号', '关联公司名称', '参控关系', '参控比例', '投资金额(元)', '被参控公司净利润(元)', '是否报表合并',
80
+ '被参股公司主营业务']
81
+
82
+ df = df.rename(columns={"关联公司名称": "holding_company",
83
+ "参控关系": "holding_relation",
84
+ "参控比例": "holding_percent_name",
85
+ "投资金额(元)": "invest_amount_name",
86
+ "被参控公司净利润(元)": "holding_net_profit_name",
87
+ "是否报表合并": "consolidation_report",
88
+ "被参股公司主营业务": "holding_main_business"
89
+ })
90
+ df['holding_percent'] = df['holding_percent_name'].apply(convert_to_float)
91
+ df['invest_amount'] = df['invest_amount_name'].apply(convert_to_float)
92
+ df['holding_net_profit'] = df['holding_net_profit_name'].apply(convert_to_float)
93
+ df['symbol'] = symbol
94
+
95
+ return df
96
+ except BaseException as e:
97
+ logger.error("获取公司参股公司信息异常:{},{}", symbol, e)
98
+ return pd.DataFrame()
99
+
100
+
101
+ # 数据清洗与转换
102
+ # 定义一个函数将带有单位的字符串转换为数字
103
+ def convert_to_float(value):
104
+ if '亿' in value:
105
+ return float(value.replace('亿', '').replace(' ', '').replace('元', '')) * 1e8
106
+ elif '%' in value:
107
+ return float(value.replace('%', '').replace(' ', '')) / 100
108
+ elif '万' in value:
109
+ return float(value.replace('万', '').replace(' ', '').replace('元', '')) * 1e5
110
+ elif '未披露' in value:
111
+ return 0
112
+ return -1
113
+
114
+
115
+ from mns_common.db.MongodbUtil import MongodbUtil
116
+
117
+ mongodb_util = MongodbUtil('27017')
118
+ if __name__ == '__main__':
119
+ stock_account_info = mongodb_util.find_query_data('stock_account_info', {"type": "ths_cookie", })
120
+ ths_cookie_test = list(stock_account_info['cookie'])[0]
121
+ company_df_test = get_company_hold_info('000617', ths_cookie_test)
122
+ print(company_df_test)
@@ -143,3 +143,8 @@ def calculate_index(real_time_quotes_now_df):
143
143
  def group_by_industry_sum(real_time_quotes_now, field1, field2):
144
144
  df_series = real_time_quotes_now.groupby(by=[field1])[field2].sum()
145
145
  return pd.DataFrame({field1: df_series.index, field2: df_series.values})
146
+
147
+
148
+
149
+
150
+
@@ -0,0 +1,7 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 16
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
@@ -0,0 +1,26 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 16
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
8
+ from mns_common.db.MongodbUtil import MongodbUtil
9
+
10
+ mongodb_util = MongodbUtil('27017')
11
+
12
+ from functools import lru_cache
13
+
14
+
15
+ @lru_cache(maxsize=None)
16
+ def get_ths_cookie():
17
+ stock_account_info = mongodb_util.find_query_data('stock_account_info', {"type": "ths_cookie", })
18
+ ths_cookie = list(stock_account_info['cookie'])[0]
19
+ return ths_cookie
20
+
21
+
22
+ @lru_cache(maxsize=None)
23
+ def get_em_cookie():
24
+ stock_account_info = mongodb_util.find_query_data('stock_account_info', {"type": "em_cookie", })
25
+ em_cookie = list(stock_account_info['cookie'])[0]
26
+ return em_cookie
@@ -123,3 +123,6 @@ DA_BAN_SELF_EXCLUDE = 'da_ban_self_exclude'
123
123
 
124
124
  # 港股公司行业列表
125
125
  HK_COMPANY_INDUSTRY = 'hk_company_industry'
126
+
127
+ # 公司控股信息 子孙公司 联营公司
128
+ COMPANY_HOLDING_INFO = 'company_holding_info'
@@ -1,4 +1,4 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mns_common
3
- Version: 1.2.6.5
3
+ Version: 1.2.6.7
4
4
 
@@ -39,6 +39,8 @@ mns_common/api/msg/push_msg_api.py,sha256=z8jDqFWygfxnCFFfQp4K-llgg27nRLv7Mx72lO
39
39
  mns_common/api/ths/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3HiJNIZE0,163
40
40
  mns_common/api/ths/big_deal/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3HiJNIZE0,163
41
41
  mns_common/api/ths/big_deal/ths_big_deal_api.py,sha256=gxtIUbowxx8gDJZfT2RISrhXVmvsgbdclYbxUiZsTlY,3644
42
+ mns_common/api/ths/company/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
43
+ mns_common/api/ths/company/ths_company_info_api.py,sha256=dwncEtzmYCI36T8aGMaT96pgMf3F54R5PQ8z2W7-hrQ,5929
42
44
  mns_common/api/ths/concept/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3HiJNIZE0,163
43
45
  mns_common/api/ths/concept/app/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3HiJNIZE0,163
44
46
  mns_common/api/ths/concept/app/ths_concept_detail_app.py,sha256=pPrpntV1tQlgdsSeHaNfde-Q6RM_bRH2kVH_MCloW8s,7087
@@ -56,7 +58,7 @@ mns_common/api/ths/zt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
56
58
  mns_common/api/ths/zt/ths_stock_zt_pool_api.py,sha256=GIYdc5J7ZrV25Elbf0n3bBZOc7x4OrlI0jFrO3du8lY,10756
57
59
  mns_common/api/ths/zt/ths_stock_zt_pool_v2_api.py,sha256=ohkeXyUSvxie2YqFPxqy9eLAHyFKQ5nx9U0JcR5LKeQ,16349
58
60
  mns_common/component/__init__.py,sha256=8b2PuXJM5fLoq71cWPXp695czQuaRtyR6OVHajGjDPc,161
59
- mns_common/component/common_service_fun_api.py,sha256=71_w6mKAmdISumjlc5xPPMmO8W_nWeiw11arRohh9Ts,5211
61
+ mns_common/component/common_service_fun_api.py,sha256=3wlD3FlZ8W5X6indKZIX-ol48xNZX_UmeLnDxP10vvA,5221
60
62
  mns_common/component/cache/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3HiJNIZE0,163
61
63
  mns_common/component/cache/cache_service.py,sha256=QX7tjR1iGsoCyGt6O41w8aRbZ-3xXQ-53Ps3nmUzAGQ,809
62
64
  mns_common/component/classify/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
@@ -68,6 +70,8 @@ mns_common/component/company/company_common_service_new_api.py,sha256=FX3Uwk1dEz
68
70
  mns_common/component/concept/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3HiJNIZE0,163
69
71
  mns_common/component/concept/kpl_concept_common_service_api.py,sha256=Ruc3INOhVjB0X1LeMRX0zL3uhv9OLweG2hj6wkZffow,3235
70
72
  mns_common/component/concept/ths_concept_common_service_api.py,sha256=KkbEnBTz3HZs8mSJ-2FX-UrPSlJfMOd8xSXRmtDpqPc,9682
73
+ mns_common/component/cookie/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
74
+ mns_common/component/cookie/cookie_info_service.py,sha256=IIFKj84dnBrUOt2Wl6kbCj-BDdFX_X9z8IIk4LxLNTc,754
71
75
  mns_common/component/data/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3HiJNIZE0,163
72
76
  mns_common/component/data/data_init_api.py,sha256=MydFBrwP61pka9jK7rrMz3HF00meRUOi4m4_5FfyfUw,5030
73
77
  mns_common/component/deal/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
@@ -105,7 +109,7 @@ mns_common/component/zt/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3Hi
105
109
  mns_common/component/zt/zt_common_service_api.py,sha256=6pHRLLJjKcLLBA-xXkAU8SE6DZ5dgVFBRVjJmhkL0II,11945
106
110
  mns_common/constant/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3HiJNIZE0,163
107
111
  mns_common/constant/black_list_classify_enum.py,sha256=I8U_DcltzYvlWjgn-TFLImgVgPuO0lxMnEJAQJBljdo,3995
108
- mns_common/constant/db_name_constant.py,sha256=wvS6UPGeopeCevSbnVCOha4Vks3vDTu-b9H8LId8LEk,3194
112
+ mns_common/constant/db_name_constant.py,sha256=_uhPwSDZI_c6Lr1v5YxJcls7UWRhgkU0rEuPgWhk8Vw,3292
109
113
  mns_common/constant/price_enum.py,sha256=nhcPxk0AFdQAp8IsNr5EP9xURLqqJuSl6ljIzTp7Wyo,1093
110
114
  mns_common/constant/redis_msg_constant.py,sha256=fMtI_WbJ2IkMX4qGwvR5MkMO0NqU8XgUUZqQzHIRscU,501
111
115
  mns_common/constant/self_choose_constant.py,sha256=QJVSwUpnXvMYA62V3_8ptDqBdI2J8S5FqI5rYSJTwT0,496
@@ -120,7 +124,7 @@ mns_common/utils/date_handle_util.py,sha256=qkEyKLYiVq6qpKVp32MLKwRtGKVBK6AY5at2
120
124
  mns_common/utils/db_util.py,sha256=hSmfNAN4vEeEaUva6_cicZEhb2jSnib-Gvk2reke1vc,2590
121
125
  mns_common/utils/file_util.py,sha256=egWu6PenGPRp_ixrNTHKarT4dAnOT6FETR82EHUZJnQ,1042
122
126
  mns_common/utils/ip_util.py,sha256=UTcYfz_uytB__6nlBf7T-izuI7hi4XdB6ET0sJgEel4,969
123
- mns_common-1.2.6.5.dist-info/METADATA,sha256=VvjdSIkYU87SiXnwQMQot6J5aFEp68c57eZhDLXqhj0,61
124
- mns_common-1.2.6.5.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
125
- mns_common-1.2.6.5.dist-info/top_level.txt,sha256=ZC58kAR-8Hvc6U2xhYNBNLAh3mb6sZazbdj5nZpvEkQ,11
126
- mns_common-1.2.6.5.dist-info/RECORD,,
127
+ mns_common-1.2.6.7.dist-info/METADATA,sha256=eGZgoz3tuX6XgnkvVOA9opLBnAoWZ1KGrip_ULRO2hU,61
128
+ mns_common-1.2.6.7.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
129
+ mns_common-1.2.6.7.dist-info/top_level.txt,sha256=ZC58kAR-8Hvc6U2xhYNBNLAh3mb6sZazbdj5nZpvEkQ,11
130
+ mns_common-1.2.6.7.dist-info/RECORD,,