192 lines
7.5 KiB
Python
192 lines
7.5 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
# @Time : 2025/1/8 下午5:20
|
|
# @Author : cmk
|
|
# @File : 500足彩数据获取分析.py
|
|
# @Email : 15726649712@163.com
|
|
|
|
from DrissionPage import ChromiumPage
|
|
from DrissionPage import ChromiumOptions
|
|
import datetime
|
|
import pymysql
|
|
import time
|
|
|
|
class MySql():
|
|
def __init__(self, host, port, user, passwd, db):
|
|
self.host = host
|
|
self.port = port
|
|
self.user = user
|
|
self.password = passwd
|
|
self.db = db
|
|
self.conn = pymysql.connect(host=self.host, port=self.port, user=self.user, password=self.password,
|
|
database=self.db)
|
|
self.cursor = self.conn.cursor()
|
|
|
|
def select(self, sql):
|
|
self.cursor.execute(sql)
|
|
return self.cursor.fetchall()
|
|
|
|
def insert_update_delete(self, sql):
|
|
self.cursor.execute(sql)
|
|
self.conn.commit()
|
|
return self.cursor.lastrowid
|
|
|
|
def json_install(self, table, datas):
|
|
for data in datas:
|
|
keys = ', '.join(data.keys())
|
|
values = ', '.join(['%s'] * len(data))
|
|
sql = 'INSERT ignore INTO {} ({}) VALUES ({})'.format(table, keys, values)
|
|
self.cursor.execute(sql, tuple(data.values()))
|
|
self.conn.commit()
|
|
|
|
def close(self):
|
|
self.conn.close()
|
|
class pages:
|
|
def __init__(self):
|
|
co = ChromiumOptions()
|
|
co.headless()
|
|
self.page = ChromiumPage(co)
|
|
def login(self,gongshi):
|
|
self.page.get('https://odds.500.com/europe_sfc.shtml')
|
|
self.page.ele('x:/html/body/div[7]/div[3]/div/div[2]/div[1]/span/span').click()
|
|
self.page.wait.load_start()
|
|
self.page.ele(f'x:{gongshi}').click()
|
|
self.page.ele('x:/html/body/div[7]/div[3]/div/div[2]/div[2]/div[2]/input[1]').click()
|
|
self.page.wait.load_start()
|
|
trs = self.page.eles('x://*[@id="main-tbody"]/tr')
|
|
data_list = []
|
|
for i in range(1,len(trs)+1):
|
|
if i % 2 !=0:
|
|
id = self.page.s_eles(f'x://*[@id="main-tbody"]/tr[{i}][@data-fid]')[0].attr('data-fid')
|
|
changci = self.page.ele(f'x://*[@id="main-tbody"]/tr[{i}]/td[1]/label').text
|
|
type = self.page.ele(f'x://*[@id="main-tbody"]/tr[{i}]/td[2]/a').text
|
|
bs_data = self.page.ele(f'x://*[@id="main-tbody"]/tr[{i}]/td[4]').text
|
|
master = self.page.ele(f'x://*[@id="main-tbody"]/tr[{i}]/td[5]/a').text
|
|
slave = self.page.ele(f'x://*[@id="main-tbody"]/tr[{i}]/td[7]/a').text
|
|
init_s = self.page.ele(f'x://*[@id="main-tbody"]/tr[{i}]/td[8]').text
|
|
init_p = self.page.ele(f'x://*[@id="main-tbody"]/tr[{i}]/td[9]').text
|
|
init_f = self.page.ele(f'x://*[@id="main-tbody"]/tr[{i}]/td[10]').text
|
|
init_s = init_s if init_s else 10
|
|
init_p = init_p if init_p else 10
|
|
init_f = init_f if init_f else 10
|
|
d = {
|
|
'id': id,
|
|
'场次': changci,
|
|
'比赛类型': type,
|
|
'比赛开始时间': bs_data,
|
|
'主队': master,
|
|
'客队': slave,
|
|
'初始胜': init_s,
|
|
'初始平': init_p,
|
|
'初始负': init_f,
|
|
}
|
|
data_list.append(d)
|
|
else:
|
|
id = self.page.eles(f'x://*[@id="main-tbody"]/tr[{i}][@data-fid]')[0].attr('data-fid')
|
|
init_s = self.page.ele(f'x://*[@id="main-tbody"]/tr[{i}]/td[1]').text
|
|
init_p = self.page.ele(f'x://*[@id="main-tbody"]/tr[{i}]/td[2]').text
|
|
init_f = self.page.ele(f'x://*[@id="main-tbody"]/tr[{i}]/td[3]').text
|
|
init_s = init_s if init_s else 10
|
|
init_p = init_p if init_p else 10
|
|
init_f = init_f if init_f else 10
|
|
d = {
|
|
'id': id,
|
|
'即时胜': init_s,
|
|
'即时平': init_p,
|
|
'即时负': init_f
|
|
}
|
|
data_list.append(d)
|
|
return data_list
|
|
|
|
def data(self,gongshi):
|
|
data_list = self.login(gongshi)
|
|
merged_data = {}
|
|
for item in data_list:
|
|
id_value = item['id']
|
|
if id_value not in merged_data:
|
|
merged_data[id_value] = item.copy()
|
|
else:
|
|
merged_data[id_value].update(item)
|
|
result_list = list(merged_data.values())
|
|
return result_list
|
|
def quit(self):
|
|
self.page.quit()
|
|
def slave(self,xpat,gongshi,time_str):
|
|
data_list = self.data(xpat)
|
|
all_list = []
|
|
for i in data_list:
|
|
s = float(i['即时胜'])/float(i['初始胜'])
|
|
p = float(i['即时平'])/float(i['初始平'])
|
|
f = float(i['即时负'])/float(i['初始负'])
|
|
min_value = min(s,p,f)
|
|
equal_count = sum(1 for num in [s, p, f] if num == min_value)
|
|
if equal_count == 1:
|
|
if min_value == s:
|
|
jieguo = 3
|
|
elif min_value == p:
|
|
jieguo = 1
|
|
elif min_value == f:
|
|
jieguo = 0
|
|
elif equal_count == 2:
|
|
if min_value == s and min_value == p:
|
|
jieguo = '3,1' #4 #4()
|
|
elif min_value == p and min_value == f:
|
|
jieguo = '1,0'#5 #5()
|
|
elif min_value == f and min_value == s:
|
|
jieguo = '0,3'#6 #6(0, 3)
|
|
elif equal_count == 3:
|
|
jieguo = '3,1,0'#10 #10(3, 1, 0)
|
|
data = {
|
|
'new':time_str,
|
|
'id':i['id'],
|
|
'changci': i['场次'],
|
|
'bisai_type': i['比赛类型'],
|
|
'bisai_date': i['比赛开始时间'],
|
|
'master': i['主队'],
|
|
'slave': i['客队'],
|
|
'init_s': i['初始胜'],
|
|
'init_p': i['初始平'],
|
|
'init_f': i['初始负'],
|
|
'jishi_s': i['即时胜'],
|
|
'jishi_p': i['即时平'],
|
|
'jishi_f': i['即时负'],
|
|
'data_s':s,
|
|
'data_p':p,
|
|
'data_f':f,
|
|
'jieguo':jieguo,
|
|
'gongshi':gongshi
|
|
}
|
|
all_list.append(data)
|
|
return all_list
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
i = 0
|
|
while i < 40:
|
|
page = pages()
|
|
db = MySql('127.0.0.1', 3306, 'root', 'password', 'zucai')
|
|
gongshi_dis = {
|
|
'平均赔率':'//*[@id="company-tbody"]/tr[1]/td[1]/label/input',
|
|
'立博':'//*[@id="company-tbody"]/tr[1]/td[2]/label/input',
|
|
'Bet365':'//*[@id="company-tbody"]/tr[1]/td[3]/label/input',
|
|
'澳门':'//*[@id="company-tbody"]/tr[2]/td[1]/label/input',
|
|
'韦德': '//*[@id="company-tbody"]/tr[2]/td[2]/label/input',
|
|
'snai': '//*[@id="company-tbody"]/tr[2]/td[3]/label/input',
|
|
'威廉':'//*[@id="company-tbody"]/tr[3]/td[1]/label/input',
|
|
'平博': '//*[@id="company-tbody"]/tr[3]/td[2]/label/input',
|
|
}
|
|
now = datetime.datetime.now()
|
|
time_str = now.strftime("%Y-%m-%d %H:%M:%S")
|
|
print(i)
|
|
for gongshi in gongshi_dis:
|
|
print(f'开始获取:{gongshi}的数据')
|
|
xpat = gongshi_dis[gongshi]
|
|
data = page.slave(gongshi=gongshi,xpat=xpat,time_str=time_str)
|
|
print(f'数据写入:{gongshi}的数据')
|
|
db.json_install('o_pei',data)
|
|
page.quit()
|
|
i += 1
|
|
time.sleep(600) |