提交 81ed21f4 作者: 薛凌堃

68定时任务脚本维护

上级 16d20518
import pandas as pd
import pandas as pd
import requests,pymysql,time,re,json
from bs4 import BeautifulSoup
# 近期市值
#cnx = pymysql.connect(host='114.115.159.144',user='root', password='zzsn9988', db='clb_project', charset='utf8mb4') # mysql数据库链接
cnx = pymysql.connect(host='114.116.44.11',user='caiji', password='f7s0&7qqtK', db='clb_project', charset='utf8mb4') # mysql数据库链接
def tableUpdate(social_id, v):
with cnx.cursor() as cursor:
Upsql = ''' update ranklist_state_holding set recent_market_value = %s where social_credit_code = "{}" '''.format(social_id)
cursor.execute(Upsql,v) # 更新
cnx.commit() # 提交
print("更新完成:{}".format(social_id))
df_1 = pd.read_excel('./需要补全的数据.xlsx', dtype=str)
for j in range(len(df_1)):
code = df_1['A股代码'][j]
code1 = str(code)
while True:
if len(code1)<6:
code1 = '0'+code1
else:
break
if code1[0] == '0' or code1[0] == '3':
com_code = 'SZ'+code1
elif code1[0] == '6':
com_code = 'SH'+code1
elif code1[0] == '8' or code1[0] == '4':
com_code = 'BJ'+code1
t = int(time.time()*1000)
if 'SZ' in com_code:
code_sz = com_code[2:]
url2 = f'https://push2.eastmoney.com/api/qt/stock/get?invt=2&fltt=1&cb=jQuery35109980141635843787_1669189162845&fields=f58%2Cf734%2Cf107%2Cf57%2Cf43%2Cf59%2Cf169%2Cf170%2Cf152%2Cf177%2Cf111%2Cf46%2Cf60%2Cf44%2Cf45%2Cf47%2Cf260%2Cf48%2Cf261%2Cf279%2Cf277%2Cf278%2Cf288%2Cf19%2Cf17%2Cf531%2Cf15%2Cf13%2Cf11%2Cf20%2Cf18%2Cf16%2Cf14%2Cf12%2Cf39%2Cf37%2Cf35%2Cf33%2Cf31%2Cf40%2Cf38%2Cf36%2Cf34%2Cf32%2Cf211%2Cf212%2Cf213%2Cf214%2Cf215%2Cf210%2Cf209%2Cf208%2Cf207%2Cf206%2Cf161%2Cf49%2Cf171%2Cf50%2Cf86%2Cf84%2Cf85%2Cf168%2Cf108%2Cf116%2Cf167%2Cf164%2Cf162%2Cf163%2Cf92%2Cf71%2Cf117%2Cf292%2Cf51%2Cf52%2Cf191%2Cf192%2Cf262%2Cf294%2Cf295%2Cf269%2Cf270%2Cf256%2Cf257%2Cf285%2Cf286&secid=0.{code_sz}&ut=fa5fd1943c7b386f172d6893dbfba10b&wbp2u=%7C0%7C0%7C0%7Cweb&_={t}'
if 'SH' in com_code:
code_sh = com_code[2:]
url2 = f'https://push2.eastmoney.com/api/qt/stock/get?invt=2&fltt=1&cb=jQuery35109980141635843787_1669189162845&fields=f58%2Cf734%2Cf107%2Cf57%2Cf43%2Cf59%2Cf169%2Cf170%2Cf152%2Cf177%2Cf111%2Cf46%2Cf60%2Cf44%2Cf45%2Cf47%2Cf260%2Cf48%2Cf261%2Cf279%2Cf277%2Cf278%2Cf288%2Cf19%2Cf17%2Cf531%2Cf15%2Cf13%2Cf11%2Cf20%2Cf18%2Cf16%2Cf14%2Cf12%2Cf39%2Cf37%2Cf35%2Cf33%2Cf31%2Cf40%2Cf38%2Cf36%2Cf34%2Cf32%2Cf211%2Cf212%2Cf213%2Cf214%2Cf215%2Cf210%2Cf209%2Cf208%2Cf207%2Cf206%2Cf161%2Cf49%2Cf171%2Cf50%2Cf86%2Cf84%2Cf85%2Cf168%2Cf108%2Cf116%2Cf167%2Cf164%2Cf162%2Cf163%2Cf92%2Cf71%2Cf117%2Cf292%2Cf51%2Cf52%2Cf191%2Cf192%2Cf262%2Cf294%2Cf295%2Cf269%2Cf270%2Cf256%2Cf257%2Cf285%2Cf286&secid=1.{code_sh}&ut=fa5fd1943c7b386f172d6893dbfba10b&wbp2u=%7C0%7C0%7C0%7Cweb&_={t}'
if 'BJ' in com_code:
code_bj = com_code[2:]
url2 = f'https://push2.eastmoney.com/api/qt/stock/get?invt=2&fltt=1&cb=jQuery3510018928310900302447_1701854190163&fields=f58%2Cf107%2Cf57%2Cf43%2Cf59%2Cf169%2Cf301%2Cf60%2Cf170%2Cf152%2Cf46%2Cf44%2Cf45%2Cf47%2Cf48%2Cf19%2Cf17%2Cf531%2Cf15%2Cf13%2Cf11%2Cf20%2Cf18%2Cf16%2Cf14%2Cf12%2Cf39%2Cf37%2Cf35%2Cf33%2Cf31%2Cf40%2Cf38%2Cf36%2Cf34%2Cf32%2Cf211%2Cf212%2Cf213%2Cf214%2Cf215%2Cf210%2Cf209%2Cf208%2Cf207%2Cf206%2Cf161%2Cf49%2Cf171%2Cf50%2Cf86%2Cf84%2Cf85%2Cf168%2Cf108%2Cf116%2Cf167%2Cf164%2Cf162%2Cf92%2Cf71%2Cf117%2Cf292%2Cf51%2Cf52%2Cf191%2Cf192%2Cf177%2Cf740&secid=0.{code_bj}&ut=fa5fd1943c7b386f172d6893dbfba10b&wbp2u=%7C0%7C0%7C0%7Cweb&_={t}'
for i in range(0,5):
try:
res2 = requests.get(url2)
break
except:
if i >=3:
time.sleep(100)
continue
time.sleep(3)
continue
ttt = re.findall('\((.*?)\)',res2.text)[0]
try:
zongshizhi = json.loads(ttt)['data']['f116']
except:
continue
df_1['近期市值'][j] = str(zongshizhi)
df_1.to_excel('./需要补全的数据.xlsx', index=False)
print(com_code)
\ No newline at end of file
import requests, json, time, pymysql, sys
import requests, json, time, pymysql, sys
import pandas as pd
from bs4 import BeautifulSoup
from selenium import webdriver
cnx = pymysql.connect(host='114.116.44.11', user='root', password='f7s0&7qqtK', db='clb_project', charset='utf8mb4')
list_com_code = []
with cnx.cursor() as cursor:
# selece_sql = '''SELECT securities_code,exchange FROM sys_base_enterprise_ipo where category = '1' '''
selece_sql = '''select i.securities_code,i.exchange from sys_base_enterprise_ipo i inner join sys_base_label_type_map m on i.social_credit_code = m.relation_id where m.label_id = '1624235171922227202' and i.priority = 1 '''
cursor.execute(selece_sql)
selects = cursor.fetchall()
for row in selects:
com_code = row[0]
com_type = row[1]
if com_type == 1:
com_code = 'BJ' + com_code
elif com_type == 2:
com_code = 'SH' + com_code
elif com_type == 3:
com_code = 'SZ' + com_code
else:
print(111)
list_com_code.append(com_code)
headers = {
'cookie': 'device_id=72922798c76cce710281dd6a2404a7a7; s=d11bic2en8; xq_a_token=7da3658c0a79fd9ef135510bc5189429ce0e3035; xqat=7da3658c0a79fd9ef135510bc5189429ce0e3035; xq_r_token=c4e290f788b8c24ec35bd4b893dc8fa427e1f229; xq_id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1aWQiOi0xLCJpc3MiOiJ1YyIsImV4cCI6MTY3OTk2MjkxMiwiY3RtIjoxNjc4NDk2MzMwMzY5LCJjaWQiOiJkOWQwbjRBWnVwIn0.eteAa4NvugN2Ck4dO4r5xnNKTW-HbFKYrT86auaexzd4ESpeWFAdxrYMjhC4nQevwGuFDb0hZWb2Xsk8DKIpw5O42CjvotTBCv8ij4hHTZ1HoR1tNMwlcb3iibklvdSaeYeF-4Mcp_sOY4BSzb3dcEDxUlwvPSpvU94aX5FGgubkVnXbbhrTQ05NxqumlqqULuqrc3U8tMCrkufef3sVNj4L_8TwbZBuYo58OEYF5zTWEyWVkvRswo9snE7Q242qghidhYpG34G04SSlmG6chyShNGLnV1hA5k3TI6ELLGPArEey7mxtpBcRpEp3jhou0tJWUqjHeyvqMvGxGbPwng; u=301678496364087; Hm_lvt_1db88642e346389874251b5a1eded6e3=1676337877,1677743855,1678191984,1678496365; Hm_lpvt_1db88642e346389874251b5a1eded6e3=1678497585',
# 'referer': 'https://xueqiu.com/snowman/S/SZ002931/detail',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
}
list_all_info = []
for com_code in list_com_code[0:]:
print(com_code)
url_xueqiu = f'https://stock.xueqiu.com/v5/stock/f10/cn/company.json?symbol={com_code}'
json_xueqiu = requests.get(url_xueqiu, headers=headers).json()
dic_com = json_xueqiu['data']['company']
com_type = dic_com['classi_name']
# com_money = dic_com['issue_price']*dic_com['actual_issue_vol']
url_dongfang = f'https://emweb.eastmoney.com/PC_HSF10/CompanySurvey/PageAjax?code={com_code}'
json_dongfang = requests.get(url_dongfang).json()
com_money = json_dongfang['fxxg'][0]['TOTAL_FUNDS']
com_c = com_code[2:]
t = int(time.time() * 1000)
if 'SZ' in com_code or 'BJ' in com_code:
url_shizhi = f'https://push2.eastmoney.com/api/qt/stock/get?invt=2&fltt=1&fields=f58%2Cf734%2Cf107%2Cf57%2Cf43%2Cf59%2Cf169%2Cf170%2Cf152%2Cf177%2Cf111%2Cf46%2Cf60%2Cf44%2Cf45%2Cf47%2Cf260%2Cf48%2Cf261%2Cf279%2Cf277%2Cf278%2Cf288%2Cf19%2Cf17%2Cf531%2Cf15%2Cf13%2Cf11%2Cf20%2Cf18%2Cf16%2Cf14%2Cf12%2Cf39%2Cf37%2Cf35%2Cf33%2Cf31%2Cf40%2Cf38%2Cf36%2Cf34%2Cf32%2Cf211%2Cf212%2Cf213%2Cf214%2Cf215%2Cf210%2Cf209%2Cf208%2Cf207%2Cf206%2Cf161%2Cf49%2Cf171%2Cf50%2Cf86%2Cf84%2Cf85%2Cf168%2Cf108%2Cf116%2Cf167%2Cf164%2Cf162%2Cf163%2Cf92%2Cf71%2Cf117%2Cf292%2Cf51%2Cf52%2Cf191%2Cf192%2Cf262%2Cf294%2Cf295%2Cf269%2Cf270%2Cf256%2Cf257%2Cf285%2Cf286&secid=0.{com_c}&ut=fa5fd1943c7b386f172d6893dbfba10b&wbp2u=%7C0%7C0%7C0%7Cweb&_={t}'
if 'SH' in com_code:
url_shizhi = f'https://push2.eastmoney.com/api/qt/stock/get?invt=2&fltt=1&fields=f58%2Cf734%2Cf107%2Cf57%2Cf43%2Cf59%2Cf169%2Cf170%2Cf152%2Cf177%2Cf111%2Cf46%2Cf60%2Cf44%2Cf45%2Cf47%2Cf260%2Cf48%2Cf261%2Cf279%2Cf277%2Cf278%2Cf288%2Cf19%2Cf17%2Cf531%2Cf15%2Cf13%2Cf11%2Cf20%2Cf18%2Cf16%2Cf14%2Cf12%2Cf39%2Cf37%2Cf35%2Cf33%2Cf31%2Cf40%2Cf38%2Cf36%2Cf34%2Cf32%2Cf211%2Cf212%2Cf213%2Cf214%2Cf215%2Cf210%2Cf209%2Cf208%2Cf207%2Cf206%2Cf161%2Cf49%2Cf171%2Cf50%2Cf86%2Cf84%2Cf85%2Cf168%2Cf108%2Cf116%2Cf167%2Cf164%2Cf162%2Cf163%2Cf92%2Cf71%2Cf117%2Cf292%2Cf51%2Cf52%2Cf191%2Cf192%2Cf262%2Cf294%2Cf295%2Cf269%2Cf270%2Cf256%2Cf257%2Cf285%2Cf286&secid=1.{com_c}&ut=fa5fd1943c7b386f172d6893dbfba10b&wbp2u=%7C0%7C0%7C0%7Cweb&_={t}'
json_shizhi = requests.get(url_shizhi).json()
com_zongshizhi = json_shizhi['data']['f116']
url_lirun = f'https://emweb.eastmoney.com/PC_HSF10/NewFinanceAnalysis/lrbAjaxNew?companyType=4&reportDateType=1&reportType=1&dates=2021-12-31&code={com_code}'
json_lirun = requests.get(url_lirun).json()
com_yingye = json_lirun['data'][0]['TOTAL_OPERATE_INCOME']
com_yingye_yoy = json_lirun['data'][0]['TOTAL_OPERATE_INCOME_YOY']
com_lirun = json_lirun['data'][0]['TOTAL_PROFIT']
com_lirun_yoy = json_lirun['data'][0]['TOTAL_PROFIT_YOY']
for companyType in range(4, 0, -1):
try:
url_zichan = f'https://emweb.eastmoney.com/PC_HSF10/NewFinanceAnalysis/zcfzbAjaxNew?companyType={companyType}&reportDateType=1&reportType=1&dates=2021-12-31&code={com_code}'
json_zichan = requests.get(url_zichan).json()
com_zichan = json_zichan['data'][0]['TOTAL_ASSETS']
com_gudong = json_zichan['data'][0]['TOTAL_EQUITY']
break
except:
if companyType == 1:
sys.exit(0)
url_zhuyao = f'https://emweb.eastmoney.com/PC_HSF10/NewFinanceAnalysis/ZYZBAjaxNew?type=1&code={com_code}'
json_zhuyao = requests.get(url_zhuyao).json()
com_zichan_shouyi = json_zhuyao['data'][0]['ROEJQ']
if com_money:
com_money = round(com_money, 4)
if com_zongshizhi:
com_zongshizhi = round(com_zongshizhi, 4)
if com_yingye:
com_yingye = round(com_yingye, 4)
if com_yingye_yoy:
com_yingye_yoy = round(com_yingye_yoy, 4)
if com_lirun:
com_lirun = round(com_lirun, 4)
if com_lirun_yoy:
com_lirun_yoy = round(com_lirun_yoy, 4)
if com_zichan:
com_zichan = round(com_zichan, 4)
if com_zichan_shouyi:
com_zichan_shouyi = round(com_zichan_shouyi, 4)
if com_gudong:
com_gudong = round(com_gudong, 4)
list_info = [
com_type,
com_money,
com_zongshizhi,
com_yingye,
com_yingye_yoy,
com_lirun,
com_lirun_yoy,
com_zichan,
com_zichan_shouyi,
com_gudong,
com_c
]
list_all_info.append(list_info)
list_all_info_tuple = []
for list_info in list_all_info:
list_all_info_tuple.append(tuple(list_info))
with cnx.cursor() as cursor:
Upsql = ''' update sys_base_enterprise_ipo set enterprise_type = %s,total_market_value = %s,before_total_market_value = %s,operating_revenue = %s,operating_revenue_rate = %s,profit = %s,profit_rate = %s,assets = %s,return_on_assets = %s,shareholders_equity = %s where securities_code = %s '''
cursor.executemany(Upsql, list_all_info_tuple)
cnx.commit()
import requests, json, time, pymysql, sys
import requests, json, time, pymysql, sys
import pandas as pd
from bs4 import BeautifulSoup
from selenium import webdriver
headers = {
'cookie': 'device_id=72922798c76cce710281dd6a2404a7a7; s=d11bic2en8; xq_a_token=7da3658c0a79fd9ef135510bc5189429ce0e3035; xqat=7da3658c0a79fd9ef135510bc5189429ce0e3035; xq_r_token=c4e290f788b8c24ec35bd4b893dc8fa427e1f229; xq_id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1aWQiOi0xLCJpc3MiOiJ1YyIsImV4cCI6MTY3OTk2MjkxMiwiY3RtIjoxNjc4NDk2MzMwMzY5LCJjaWQiOiJkOWQwbjRBWnVwIn0.eteAa4NvugN2Ck4dO4r5xnNKTW-HbFKYrT86auaexzd4ESpeWFAdxrYMjhC4nQevwGuFDb0hZWb2Xsk8DKIpw5O42CjvotTBCv8ij4hHTZ1HoR1tNMwlcb3iibklvdSaeYeF-4Mcp_sOY4BSzb3dcEDxUlwvPSpvU94aX5FGgubkVnXbbhrTQ05NxqumlqqULuqrc3U8tMCrkufef3sVNj4L_8TwbZBuYo58OEYF5zTWEyWVkvRswo9snE7Q242qghidhYpG34G04SSlmG6chyShNGLnV1hA5k3TI6ELLGPArEey7mxtpBcRpEp3jhou0tJWUqjHeyvqMvGxGbPwng; u=301678496364087; Hm_lvt_1db88642e346389874251b5a1eded6e3=1676337877,1677743855,1678191984,1678496365; Hm_lpvt_1db88642e346389874251b5a1eded6e3=1678497585',
# 'referer': 'https://xueqiu.com/snowman/S/SZ002931/detail',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
}
df_1 = pd.read_excel('./需要补全的数据.xlsx', dtype=str)
for j in range(len(df_1))[560:]:
code = df_1['A股代码'][j]
code1 = str(code)
while True:
if len(code1)<6:
code1 = '0'+code1
else:
break
if code1[0] == '0' or code1[0] == '3':
com_code = 'SZ'+code1
elif code1[0] == '6':
com_code = 'SH'+code1
elif code1[0] == '8' or code1[0] == '4':
com_code = 'BJ'+code1
print(com_code)
url_dongfang = f'https://emweb.eastmoney.com/PC_HSF10/CompanySurvey/PageAjax?code={com_code}'
json_dongfang = requests.get(url_dongfang).json()
try:
com_money = json_dongfang['fxxg'][0]['TOTAL_FUNDS']
except:
continue
# 企业总市值
if com_money:
com_money = round(com_money, 4)
df_1['上市总市值'][j] = str(com_money)
df_1.to_excel('./需要补全的数据.xlsx', index=False)
import pandas as pd
import pandas as pd
import requests
headers = {
'Accept': 'application/json, text/plain, */*',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Cookie': 'cookiesu=181695108116155; device_id=46ec772dfdf04c691b8e58a2b65c3c1a; s=cb12c0lym8; u=181695108116155; Hm_lvt_1db88642e346389874251b5a1eded6e3=1701745994; xq_a_token=a97fa15a5bb947c53ed434a6c0364dd03f36962c; xqat=a97fa15a5bb947c53ed434a6c0364dd03f36962c; xq_r_token=457987e3f3df9d22b53ad50b975087ff84ee9a79; xq_id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1aWQiOi0xLCJpc3MiOiJ1YyIsImV4cCI6MTcwNDU4NzkwNCwiY3RtIjoxNzAyMzQ4NjQzOTYxLCJjaWQiOiJkOWQwbjRBWnVwIn0.h0h-Jt7KL4s9FcnOeRJcDU6vlIg4DfKt32jlL9fMloWP3ZywcTZ9MqWx2ij3AJR1qgqnBUiAcRZ2_reBImFfQtusEZ_-ns23zey-PyCeY2wOLoXvOGq0yUdKqYKGzlJTYgiXLTTbZnblVZ0YkikIYGHpCROv-xt_n0b5s1abRJUXgI_uOU35a7JTh_JAPIxHXKI2VxPdibEAPjI0HBOJMVKPpUlQoGmuiI_vtQ-HdGpRODNsxSuS2QywKQvP6Zgr-h7VIVACUO76cN40kv9q3zY3-_Ce_VlHCEtsrjPoh0nsjfVy1sL_DgNa6uMk4SIZqtVHiFEuw0zKIFknLEMRAA; Hm_lpvt_1db88642e346389874251b5a1eded6e3=1702364350',
'Origin': 'https://xueqiu.com',
'Referer': 'https://xueqiu.com/snowman/S/SZ301380/detail',
'Sec-Ch-Ua': '"Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24"',
'Sec-Ch-Ua-Mobile': '?0',
'Sec-Ch-Ua-Platform': '"Windows"',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-site',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
}
df_1 = pd.read_excel('./需要补全的数据.xlsx', dtype=str)
for j in range(len(df_1)):
code = df_1['A股代码'][j]
code1 = str(code)
while True:
if len(code1)<6:
code1 = '0'+code1
else:
break
if code1[0] == '0' or code1[0] == '3':
com_code = 'SZ'+code1
elif code1[0] == '6':
com_code = 'SH'+code1
elif code1[0] == '8' or code1[0] == '4':
com_code = 'BJ'+code1
url = f'https://stock.xueqiu.com/v5/stock/f10/cn/company.json?symbol={com_code}'
request = requests.get(url=url, headers=headers)
json_data = request.json()
info = json_data['data']['company']
controlling_person =info['actual_controller']
arear = info['provincial_name']
# com_name = info['org_name_cn']
# english_name = info['org_name_en']
# short_name = info['org_short_name_cn']
# website = info['org_website']
# com_type = info['classi_name']
# frdb = info['legal_representative']
df_1['实控人'][j] = str(controlling_person)
# df_1['所属区域'][j] = str(arear)
df_1.to_excel('./需要补全的数据.xlsx', index=False)
\ No newline at end of file
import pandas as pd
import pandas as pd
import requests
headers = {
'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Host': 'datacenter.eastmoney.com',
'Origin': 'https://emweb.securities.eastmoney.com',
'Referer': 'https://emweb.securities.eastmoney.com/',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-site',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36',
'sec-ch-ua': '"Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"'
}
df_1 = pd.read_excel('./需要补全的数据.xlsx', dtype=str)
for j in range(len(df_1)):
code = df_1['A股代码'][j]
code1 = str(code)
while True:
if len(code1)<6:
code1 = '0'+code1
else:
break
if code1[0] == '0' or code1[0] == '3':
com_code = 'SZ'+code1
elif code1[0] == '6':
com_code = 'SH'+code1
elif code1[0] == '8' or code1[0] == '4':
com_code = 'BJ'+code1
url = f'https://datacenter.eastmoney.com/securities/api/data/v1/get?reportName=RPT_F10_EH_RELATION&columns=SECUCODE%2CSECURITY_CODE%2CHOLDER_NAME%2CHOLD_RATIO&quoteColumns=&filter=(SECUCODE%3D%22{code1}.{com_code[:2]}%22)(RELATED_RELATION%3D%22%E5%AE%9E%E9%99%85%E6%8E%A7%E5%88%B6%E4%BA%BA%22)&pageNumber=1&pageSize=&sortTypes=&sortColumns=&source=HSF10&client=PC&v=05061020920974106'
request = requests.get(url=url,headers=headers)
json_data = request.json()
controlling_person = []
dic_info = {}
try:
info_list = json_data['result']['data']
except:
continue
for info in info_list:
holder_name = info['HOLDER_NAME']
holde_ratio = info['HOLD_RATIO']
dic_info['totalratio'] = holde_ratio
try:
controlling_person = holder_name.split(',')
for name in controlling_person:
dic_info[name] = ''
except:
continue
print(dic_info)
holders = []
url_1 = f'https://datacenter.eastmoney.com/securities/api/data/v1/get?reportName=RPT_F10_EH_HOLDERS&columns=SECUCODE%2CSECURITY_CODE%2CEND_DATE%2CHOLDER_RANK%2CHOLDER_NAME%2CSHARES_TYPE%2CHOLD_NUM%2CHOLD_NUM_RATIO%2CHOLD_NUM_CHANGE%2CCHANGE_RATIO&quoteColumns=&filter=(SECUCODE%3D%22{code1}.{com_code[:2]}%22)(END_DATE%3D%272023-09-30%27)&pageNumber=1&pageSize=&sortTypes=1&sortColumns=HOLDER_RANK&source=HSF10&client=PC&v=09613150754547122'
request = requests.get(url=url_1, headers=headers)
json_data_1 = request.json()
try:
top_holders = json_data_1['result']['data']
except:
continue
for holder in top_holders:
holder_name_1 = holder['HOLDER_NAME']
holde_ratio_1 = holder['HOLD_NUM_RATIO']
for name in controlling_person:
if name == holder_name_1:
holders.append(f'{holder_name_1}({holde_ratio_1}%)')
dic_info[name] = holde_ratio_1
print(dic_info)
if dic_info['totalratio']:
ratio = sum(value for value in dic_info.values() if value)
for key, value in dic_info.items():
if value == "" or value is None:
dic_info[key] = dic_info['totalratio'] - ratio
holders.append(f'{key}({dic_info[key]}%)')
else:
del dic_info['totalratio']
for key, value in dic_info.items():
holders.append(f'{key}')
print(holders)
result = ','.join(holders)
print(result)
df_1['实控人'][j] = str(result)
df_1.to_excel('./需要补全的数据.xlsx', index=False)
# 十大控股股东
# 十大控股股东
from datetime import datetime
import pandas as pd
import requests
headers = {
'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Host': 'datacenter.eastmoney.com',
'Origin': 'https://emweb.securities.eastmoney.com',
'Referer': 'https://emweb.securities.eastmoney.com/',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-site',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36',
'sec-ch-ua': '"Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"'
}
def getData(url):
request = requests.get(url=url, headers=headers)
json_data_1 = request.json()
return json_data_1
def getReportTime():
list_date = []
# 获取当前日期和时间
current_date_ = datetime.now()
year = int(current_date_.strftime('%Y'))
list_month = ['-12-31', '-09-30', '-06-30', '-03-31']
for year in range(year, 2017, -1):
for month in list_month:
date = str(year) + month
#todo:判断拼接的报告期是否大于当前日期,如果大于当前日期,怎说明还没到这个时间,跳过
current_date = current_date_.strftime('%Y-%m-%d')
if current_date < date:
continue
list_date.append(date)
return list_date
if __name__=="__main__":
df_1 = pd.read_excel('./需要补全的数据.xlsx', dtype=str)
for j in range(len(df_1)):
data = df_1['控股股东'][j]
if data != 'None':
# print(data)
continue
code = df_1['A股代码'][j]
code1 = str(code)
while True:
if len(code1)<6:
code1 = '0'+code1
else:
break
if code1[0] == '0' or code1[0] == '3':
com_code = 'SZ'+code1
elif code1[0] == '6':
com_code = 'SH'+code1
elif code1[0] == '8' or code1[0] == '4':
com_code = 'BJ'+code1
holders = []
top_holders = []
time_list = getReportTime()
for time in time_list:
# https://datacenter.eastmoney.com/securities/api/data/v1/get?reportName=RPT_F10_EH_HOLDERS&columns=SECUCODE%2CSECURITY_CODE%2CEND_DATE%2CHOLDER_RANK%2CHOLDER_NAME%2CSHARES_TYPE%2CHOLD_NUM%2CHOLD_NUM_RATIO%2CHOLD_NUM_CHANGE%2CCHANGE_RATIO&quoteColumns=&filter=(SECUCODE%3D%22002604.SZ%22)(END_DATE%3D%272023-06-30%27)&pageNumber=1&pageSize=&sortTypes=1&sortColumns=HOLDER_RANK&source=HSF10&client=PC&v=09727151187367775
url_1 = f'https://datacenter.eastmoney.com/securities/api/data/v1/get?reportName=RPT_F10_EH_HOLDERS&columns=SECUCODE%2CSECURITY_CODE%2CEND_DATE%2CHOLDER_RANK%2CHOLDER_NAME%2CSHARES_TYPE%2CHOLD_NUM%2CHOLD_NUM_RATIO%2CHOLD_NUM_CHANGE%2CCHANGE_RATIO&quoteColumns=&filter=(SECUCODE%3D%22{code1}.{com_code[:2]}%22)(END_DATE%3D%27{time}%27)&pageNumber=1&pageSize=&sortTypes=1&sortColumns=HOLDER_RANK&source=HSF10&client=PC&v=09613150754547122'
json_data_1 = getData(url_1)
try:
top_holders = json_data_1['result']['data']
except:
continue
if top_holders:
for holder in top_holders:
holder_name_1 = holder['HOLDER_NAME']
holde_ratio_1 = holder['HOLD_NUM_RATIO']
holders.append(f'{holder_name_1}({holde_ratio_1}%)')
print(holders)
result = ','.join(holders)
print(result)
df_1['控股股东'][j] = str(result)
df_1.to_excel('./需要补全的数据.xlsx', index=False)
break
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论