Files
test/体彩/500足彩数据获取分析.py
2026-05-07 10:49:58 +08:00

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)