功能:网站数据采集,对结果进行数据清洗,标注,存储EXCEL,
注:以前网站没有反扒,不知道哪一天网站进行了反扒,只限制了ip,加个代{过}{滤}理池就可以用
import re
import requests
import pandas as pd
import datetime
from openpyxl import Workbook
from openpyxl.styles import PatternFill
import os
# import time
# import sys
# import json
def fetch_and_process_data(start_date, end_date, output_file):
delta = datetime.timedelta(days=1)
# fmt = 'https://webapi.sporttery.cn/gateway/jc/football/getMatchResultV1.qry?matchPage=1&pcOrWap=0&leagueId=&matchBeginDate={date1:%Y-%m-%d}&matchEndDate={date1:%Y-%m-%d}'
# print(fmt)
fmt = Imh0dHBzOi8vd2ViYXBpLnNwb3J0dGVyeS5jbi9nYXRld2F5L2pjL2Zvb3RiYWxsL2dldE1hdGNoUmVzdWx0VjEucXJ5Ig==
url2=J2h0dHBzOi8vbS5zcG9ydHRlcnkuY24vbWpjL3pxZ2RqanYxLz9taWQ9MTAyMzQ5OCcnaHR0cHM6Ly9tLnNwb3J0dGVyeS5jbi9tamMvenFnZGpqdjEvP21pZD0xMDIzNDk4Jw==
df_list = []
while start_date 0: # 检查列表长度是否足够
rangqiu_list.append(combinationDes_list[0])
else:
rangqiu_list.append(None) # 如果列表长度不够,则添加空字符串或其他默认值
else:
rangqiu_list.append(None) # 如果列表为空,则添加空字符串或其他默认值
if odd_list: # 检查列表不为空
if len(odd_list) > 0: # 检查列表长度是否足够
peilv_0.append(odd_list[0])
else:
peilv_0.append(None) # 如果列表长度不够,则添加空字符串或其他默认值
else:
peilv_0.append(None) # 如果列表为空,则添加空字符串或其他默认值
if combinationDes_list: # 检查列表不为空
if len(combinationDes_list) > 1: # 检查列表长度是否足够
banqu_list.append(combinationDes_list[1])
else:
banqu_list.append(None) # 如果列表长度不够,则添加空字符串或其他默认值
else:
banqu_list.append(None) # 如果列表为空,则添加空字符串或其他默认值
if odd_list: # 检查列表不为空
if len(odd_list) > 1: # 检查列表长度是否足够
peilv_1.append(odd_list[1])
else:
peilv_1.append(None) # 如果列表长度不够,则添加空字符串或其他默认值
else:
peilv_1.append(None) # 如果列表为空,则添加空字符串或其他默认值
if combinationDes_list: # 检查列表不为空
if len(combinationDes_list) > 2: # 检查列表长度是否足够
bifen_list.append(combinationDes_list[2])
else:
bifen_list.append(None) # 如果列表长度不够,则添加空字符串或其他默认值
else:
bifen_list.append(None) # 如果列表为空,则添加空字符串或其他默认值
if odd_list: # 检查列表不为空
if len(odd_list) > 2: # 检查列表长度是否足够
peilv_2.append(odd_list[2])
else:
peilv_2.append(None) # 如果列表长度不够,则添加空字符串或其他默认值
else:
peilv_2.append(None) # 如果列表为空,则添加空字符串或其他默认值
if combinationDes_list: # 检查列表不为空
if len(combinationDes_list) > 3: # 检查列表长度是否足够
zongjiuqiu_list.append(combinationDes_list[3])
else:
zongjiuqiu_list.append(None) # 如果列表长度不够,则添加空字符串或其他默认值
else:
zongjiuqiu_list.append(None) # 如果列表为空,则添加空字符串或其他默认值
if odd_list: # 检查列表不为空
if len(odd_list) > 3: # 检查列表长度是否足够
peilv_3.append(odd_list[3])
else:
peilv_3.append(None) # 如果列表长度不够,则添加空字符串或其他默认值
else:
peilv_3.append(None) # 如果列表为空,则添加空字符串或其他默认值
if len(combinationDes_list) > 4:
jieguo_list.append(combinationDes_list[4])
peilv_4.append(odd_list[4])
else:
jieguo_list.append(None) # 如果最后一个元素不存在,则添加空字符串
peilv_4.append(None) # 对应的赔率列表也添加空字符串
hometeam = re.findall('"homeTeam":"(.*?)",', data)
# print(hometeam)
awayteam = re.findall('"awayTeam":"(.*?)",', data)
halfsccor = re.findall('sectionsNo1":"(.*?)",', data)
finalsccor = re.findall('sectionsNo999":"(.*?)",', data)
single = re.findall('"bettingSingle":(.*?),', data)
a = re.findall('"a":"(.*?)",', data)
b = re.findall('"d":"(.*?)",', data)
c = re.findall('"h":"(.*?)",', data)
concede = re.findall('"goalLine":"(.*?)",', data)
leagueNameAbbr = re.findall('"leagueNameAbbr":"(.*?)",', data)
ID = re.findall('"matchNumStr":"(.*?)",', data)
DATE = re.findall('"matchDate":"(.*?)"', data)
result = re.findall('"winFlag":"(.*?)"}', data)
result_replace = [r.replace('H', '胜').replace('D', '平').replace('A', '负') for r in result]
df = pd.DataFrame({
"编号":TeamId,
"Time": DATE,
"League": leagueNameAbbr,
"Number": ID,
"主队": hometeam,
# "Handicap": concede,
"让球":rangqiu_list,
"让赔率":peilv_0,
"客队": awayteam,
"主胜(H)": c,
"平 (D)": b,
"负 (A)": a,
"比分": bifen_list,
"比分赔率": peilv_2,
# "结果":jieguo_list,
# "结果赔率": peilv_4,
"半场": halfsccor,
"全场": finalsccor,
"单关": single,
"总进球": zongjiuqiu_list,
"进球赔率": peilv_3,
"半全场": banqu_list,
"半全场赔率": peilv_1,
"结果": result_replace
})
df_list.append(df)
print('第',date1,'已写入,输入时间较长请耐心等待。。。')
start_date = date2
final_df = pd.concat(df_list, ignore_index=True)
wb = Workbook()
ws = wb.active
ws.append(final_df.columns.tolist()) # Add column headers
for _, row in final_df.iterrows():
ws.append(row.tolist())
#一定要控制好列号码,这是对结果进行数据标红
for row_num, row in enumerate(ws.iter_rows(min_row=2, max_row=ws.max_row, min_col=ws.max_column, max_col=ws.max_column), start=2):
result_value = ws.cell(row=row_num, column=21).value
if result_value == '胜':
ws.cell(row=row_num, column=9).fill = PatternFill(start_color="FF0000", end_color="FF0000", fill_type="solid")
elif result_value == '平':
ws.cell(row=row_num, column=10).fill = PatternFill(start_color="FF0000", end_color="FF0000", fill_type="solid")
elif result_value == '负':
ws.cell(row=row_num, column=11).fill = PatternFill(start_color="FF0000", end_color="FF0000", fill_type="solid")
wb.save(output_file)
print('工程已保存在', output_file)
# while True:
# user_input = input("按下回车键退出程序:")
# if user_input == "":
# sys.exit() # 退出程序
# while True:
# print("作者:吾爱破解")
# start_date_input = input("请输入开始日期(YYYY-MM-DD)例如(2024-02-01):")
# try:
# start_date = datetime.datetime.strptime(start_date_input, '%Y-%m-%d')
# break # 如果日期格式有效,跳出循环
# except ValueError:
# print("日期格式无效。请使用 'YYYY-MM-DD' 格式。")
#
# while True:
# end_date_input = input("请输入截止日期的前一天(YYYY-MM-DD)例如(2024-02-16):")
# try:
# end_date = datetime.datetime.strptime(end_date_input, '%Y-%m-%d')
# break # 如果日期格式有效,跳出循环
# except ValueError:
# print("日期格式无效。请使用 'YYYY-MM-DD' 格式。例如(2024-02-01)")
# # output_file_path = r"C:\Users\17823\Desktop\excel\path1.xlsx"
# path1 = input("请输入输出文件名称,按 Enter 键退出:")
headers = {
#自己加
}
start_date = datetime.datetime(2024, 11, 1)
end_date = datetime.datetime(2024, 12, 1)
output_file_path = os.path.join(r"C:\Users\17823\Desktop\足球\xin.xlsx")
output_directory = os.path.dirname(output_file_path)
if not os.path.exists(output_directory):
os.makedirs(output_directory)
fetch_and_process_data(start_date, end_date, output_file_path)