对体育cp结果的采集

查看 29|回复 2
作者:dabiaoge144   
记录对体育cp开奖结果的采集,这是我以前写的,现在分享出来供大家学习
功能:网站数据采集,对结果进行数据清洗,标注,存储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)

列表, 或其他

kidneyissource   

哥们没事喜欢玩点cp啊
dabiaoge144
OP
  


kidneyissource 发表于 2024-12-8 15:13
哥们没事喜欢玩点cp啊

cp只是生活,探讨技术才是真的
您需要登录后才可以回帖 登录 | 立即注册

返回顶部