mns-common 1.2.6.5__py3-none-any.whl → 1.2.6.6__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.
@@ -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)
@@ -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.6
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
@@ -105,7 +107,7 @@ mns_common/component/zt/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3Hi
105
107
  mns_common/component/zt/zt_common_service_api.py,sha256=6pHRLLJjKcLLBA-xXkAU8SE6DZ5dgVFBRVjJmhkL0II,11945
106
108
  mns_common/constant/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3HiJNIZE0,163
107
109
  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
110
+ mns_common/constant/db_name_constant.py,sha256=_uhPwSDZI_c6Lr1v5YxJcls7UWRhgkU0rEuPgWhk8Vw,3292
109
111
  mns_common/constant/price_enum.py,sha256=nhcPxk0AFdQAp8IsNr5EP9xURLqqJuSl6ljIzTp7Wyo,1093
110
112
  mns_common/constant/redis_msg_constant.py,sha256=fMtI_WbJ2IkMX4qGwvR5MkMO0NqU8XgUUZqQzHIRscU,501
111
113
  mns_common/constant/self_choose_constant.py,sha256=QJVSwUpnXvMYA62V3_8ptDqBdI2J8S5FqI5rYSJTwT0,496
@@ -120,7 +122,7 @@ mns_common/utils/date_handle_util.py,sha256=qkEyKLYiVq6qpKVp32MLKwRtGKVBK6AY5at2
120
122
  mns_common/utils/db_util.py,sha256=hSmfNAN4vEeEaUva6_cicZEhb2jSnib-Gvk2reke1vc,2590
121
123
  mns_common/utils/file_util.py,sha256=egWu6PenGPRp_ixrNTHKarT4dAnOT6FETR82EHUZJnQ,1042
122
124
  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,,
125
+ mns_common-1.2.6.6.dist-info/METADATA,sha256=ZN43JdDEfoyLPvsm-5waINGk1OuL7B5mbW6MVM4Buss,61
126
+ mns_common-1.2.6.6.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
127
+ mns_common-1.2.6.6.dist-info/top_level.txt,sha256=ZC58kAR-8Hvc6U2xhYNBNLAh3mb6sZazbdj5nZpvEkQ,11
128
+ mns_common-1.2.6.6.dist-info/RECORD,,