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.
- mns_common/api/ths/company/__init__.py +7 -0
- mns_common/api/ths/company/ths_company_info_api.py +122 -0
- mns_common/component/common_service_fun_api.py +5 -0
- mns_common/component/cookie/__init__.py +7 -0
- mns_common/component/cookie/cookie_info_service.py +26 -0
- mns_common/constant/db_name_constant.py +3 -0
- {mns_common-1.2.6.5.dist-info → mns_common-1.2.6.7.dist-info}/METADATA +1 -1
- {mns_common-1.2.6.5.dist-info → mns_common-1.2.6.7.dist-info}/RECORD +10 -6
- {mns_common-1.2.6.5.dist-info → mns_common-1.2.6.7.dist-info}/WHEEL +0 -0
- {mns_common-1.2.6.5.dist-info → mns_common-1.2.6.7.dist-info}/top_level.txt +0 -0
|
@@ -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,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
|
|
@@ -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=
|
|
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=
|
|
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.
|
|
124
|
-
mns_common-1.2.6.
|
|
125
|
-
mns_common-1.2.6.
|
|
126
|
-
mns_common-1.2.6.
|
|
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,,
|
|
File without changes
|
|
File without changes
|