173 lines
7.1 KiB
Python
173 lines
7.1 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
# ------------------------------------
|
|
# Time : 2024/11/16
|
|
# File : test.py.py
|
|
# 脚本作用 : 竞彩数据
|
|
# 项目名称 : 澳客
|
|
# ------------------------------------
|
|
|
|
import os
|
|
import time
|
|
import requests
|
|
import datetime
|
|
from lxml import etree
|
|
import logging
|
|
from selenium import webdriver
|
|
from selenium.webdriver.chrome.service import Service
|
|
from selenium.webdriver.common.by import By
|
|
from selenium.webdriver.common.keys import Keys
|
|
from selenium.webdriver.chrome.options import ChromiumOptions
|
|
|
|
def logger(name):
|
|
'''
|
|
记录程序运行日志
|
|
:param name: 文件名称
|
|
:return:
|
|
'''
|
|
log = logging.getLogger(name)
|
|
log.setLevel(logging.DEBUG)
|
|
fmt_str = '%(asctime)s [%(levelname)2s] [%(lineno)d] %(message)s'
|
|
fmt = logging.Formatter(fmt_str)
|
|
stream_h = logging.FileHandler(name)
|
|
stream_h.setFormatter(fmt)
|
|
stream_h.setLevel(logging.DEBUG)
|
|
log.addHandler(stream_h)
|
|
return log
|
|
def len_list(data):
|
|
'''
|
|
判断列表长度
|
|
:param data: [a,b,c,d,e,f,g,h,i,j,k,l]
|
|
:return: a,b,c,d,e,f,g,h,i,j,k,l
|
|
'''
|
|
if len(data) == 0:
|
|
data = 0
|
|
return data
|
|
elif len(data) == 1:
|
|
return data[0]
|
|
else:
|
|
return data[0]+data[1]
|
|
|
|
def get_data(date):
|
|
'''获取数据'''
|
|
url = f'https://www.okooo.com/jingcai/shuju/zhishu/{date}/'
|
|
headers = {
|
|
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
|
|
'referer':'https://www.okooo.com/jingcai/shuju/zhishu/'
|
|
}
|
|
html = requests.get(url, headers=headers).content.decode('GBK')
|
|
etrees = etree.HTML(html)
|
|
trs = etrees.xpath('/html/body/div[3]/div/div[3]//tr')
|
|
db_data_list = []
|
|
for i in range(2,len(trs)+1):
|
|
changci = etrees.xpath(f'/html/body/div[3]/div/div[3]//tr[{i}]/td[1]/text()')
|
|
bisai = etrees.xpath(f'/html/body/div[3]/div/div[3]//tr[{i}]/td[2]/span/text()')
|
|
bisaishijian = etrees.xpath(f'/html/body/div[3]/div/div[3]//tr[{i}]/td[3]/text()')
|
|
zhudui = etrees.xpath(f'/html/body/div[3]/div/div[3]//tr[{i}]/td[4]/span/text()')
|
|
shengji = etrees.xpath(f'/html/body/div[3]/div/div[3]//tr[{i}]/td[5]/span/text()')
|
|
kedui = etrees.xpath(f'/html/body/div[3]/div/div[3]//tr[{i}]/td[6]/span/text()')
|
|
init_master = etrees.xpath(f'/html/body/div[3]/div/div[3]//tr[{i}]/td[7]/text()')
|
|
init_ping = etrees.xpath(f'/html/body/div[3]/div/div[3]//tr[{i}]/td[8]/text()')
|
|
init_slave = etrees.xpath(f'/html/body/div[3]/div/div[3]//tr[{i}]/td[9]/text()')
|
|
new_master = etrees.xpath(f'/html/body/div[3]/div/div[3]//tr[{i}]/td[10]/span/span/text()')
|
|
new_ping = etrees.xpath(f'/html/body/div[3]/div/div[3]//tr[{i}]/td[11]/span/span/text()')
|
|
new_slave = etrees.xpath(f'/html/body/div[3]/div/div[3]//tr[{i}]/td[12]/span/span/text()')
|
|
tidian = etrees.xpath(f'/html/body/div[3]/div/div[3]//tr[{i}]/td[13]/a/text()')
|
|
jieguo = etrees.xpath(f'/html/body/div[3]/div/div[3]//tr[{i}]/td[14]/text()')
|
|
date = datetime.datetime.now()
|
|
date = date.strftime(f"%m-%d %H:%M")
|
|
db_data = (date,len_list(changci),len_list(bisai),len_list(bisaishijian),len_list(zhudui),len_list(kedui),len_list(init_master),len_list(init_ping),len_list(init_slave),len_list(new_master),len_list(new_ping),len_list(new_slave),len_list(tidian),len_list(shengji),len_list(jieguo))
|
|
db_data_list.append(db_data)
|
|
return db_data_list
|
|
|
|
def get_bisi(date):
|
|
'''
|
|
获取当天比赛
|
|
:return: {'比赛时间': '周日002', '主队': '埃因', '客队': '马斯', '受让': '-1', '地址': '1261406'}
|
|
'''
|
|
G_data = get_data(date)
|
|
bisai_list = [i[1] for i in G_data]
|
|
url = 'https://www.okooo.com/jingcai/'
|
|
headers = {
|
|
'referer':'https://www.okooo.com/',
|
|
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36'
|
|
}
|
|
response = requests.get(url, headers=headers)
|
|
html = etree.HTML(response.content.decode('GBK'))
|
|
bisai = html.xpath('//*[@class="touzhu_1"]/@data-mid')
|
|
b_date = html.xpath('//*[@class="touzhu_1"]/@data-ordercn')
|
|
shouran = html.xpath('//*[@class="touzhu_1"]/@data-rq')
|
|
master = html.xpath('//*[@class="touzhu_1"]/@data-hname')
|
|
slave = html.xpath('//*[@class="touzhu_1"]/@data-aname')
|
|
data = zip(b_date,master,slave,shouran,bisai)
|
|
data_list = [i for i in data if i[0] in bisai_list]
|
|
all_data = zip(G_data,data_list)
|
|
all_data_list = []
|
|
for i in all_data:
|
|
all_list=i[0] + i[1]
|
|
all_data_list.append(all_list)
|
|
return all_data_list
|
|
|
|
def m_data(id):
|
|
url = f'https://m.okooo.com/match/exchanges.php?MatchID={id}&from=%2Fweixin%2Fjing%2F'
|
|
chrome_options = ChromiumOptions()
|
|
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36"
|
|
referer = f'https://m.okooo.com/match/odds.php?MatchID={id}&from=%2Fweixin%2Fjing%2F'
|
|
chrome_options.add_argument("--disable-bot-detection")
|
|
chrome_options.add_argument("--headless")
|
|
chrome_options.add_argument(f'--user - agent={user_agent}, referer={referer}')
|
|
S = Service(executable_path=f'/opt/project/env_ticai/bin/chromedriver',chrome_options=chrome_options)
|
|
driver = webdriver.Chrome(service=S)
|
|
driver.get(url)
|
|
time.sleep(2)
|
|
driver.refresh()
|
|
html = driver.page_source
|
|
time.sleep(3)
|
|
etrees = etree.HTML(html)
|
|
#五要素
|
|
jiaofeng_w = etrees.xpath('/html/body/div/div/section[7]/div[2]/table/tbody/tr[2]/td[5]/text()')
|
|
zhuangtai_w = etrees.xpath('/html/body/div/div/section[7]/div[2]/table/tbody/tr[3]/td[5]/text()')
|
|
zhuke_w = etrees.xpath('/html/body/div/div/section[7]/div[2]/table/tbody/tr[4]/td[5]/text()')
|
|
peilv_w = etrees.xpath('/html/body/div/div/section[7]/div[2]/table/tbody/tr[5]/td[5]/text()')
|
|
renqi_w = etrees.xpath('/html/body/div/div/section[7]/div[2]/table/tbody/tr[6]/td[5]/text()')
|
|
data = (len_list(jiaofeng_w),len_list(zhuangtai_w),len_list(zhuke_w),len_list(peilv_w),len_list(renqi_w))
|
|
return data
|
|
|
|
|
|
|
|
def main(date):
|
|
data = get_bisi(date)
|
|
data_list = []
|
|
for i in data:
|
|
data_list.append(m_data(i[-1]))
|
|
all_data = zip(data,data_list)
|
|
for i in all_data:
|
|
all_data = {
|
|
'时间': i[0][0],
|
|
'场次': i[0][1],
|
|
'类型': i[0][2],
|
|
'比赛开始时间': i[0][3],
|
|
'主队': i[0][4],
|
|
'客队': i[0][5],
|
|
'受让': i[0][-2],
|
|
'初始化_胜': i[0][6],
|
|
'初始化_平': i[0][7],
|
|
'初始化_负': i[0][8],
|
|
'最新_胜': i[0][9],
|
|
'最新_平': i[0][10],
|
|
'最新_负': i[0][11],
|
|
'交锋': i[1][0],
|
|
'状态': i[1][1],
|
|
'主客': i[1][2],
|
|
'赔率': i[1][3],
|
|
'人气': i[1][4],
|
|
'小澳推荐': i[0][12],
|
|
'比分': i[0][12],
|
|
'结果': i[0][14]
|
|
}
|
|
print(all_data)
|
|
if __name__ == '__main__':
|
|
date = datetime.date.today()
|
|
main(date)
|
|
|