吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 439|回复: 4
上一主题 下一主题
收起左侧

[Python 原创] 对体育cp结果的采集

[复制链接]
跳转到指定楼层
楼主
dabiaoge144 发表于 2024-12-8 13:59 回帖奖励
记录对体育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 < end_date:
        date1 = start_date
        date2 = start_date + delta
        # url = fmt.format(date1=date1, date2=date2)
        formatted_date1 = date1.strftime("%Y-%m-%d")
        params = {
            "matchPage": "1",
            "matchBeginDate": formatted_date1,
            "matchEndDate": formatted_date1,
            "leagueId": "",
            "pageSize": "30",
            "pageNo": "1",
            "isFix": "0",
            "pcOrWap": "1"
        }
        print(params)
        with requests.get(fmt, params=params) as r:
            data = r.text
            print(data)
        TeamId=re.findall('"matchId":(.*?),', data)
        print(TeamId)
        #使用列表推导式来将这个列表中的每个元素拼接成 URL,并存入新的列表中。
        url_list = [f"https://webapi.sporttery.cn/gateway/jc/football/getFixedBonusV1.qry?clientCode=3001&matchId={item}" for item in TeamId]
      #遍历 URL 列表,对每个 URL 发送请求。
        # print(url_list)
        rangqiu_list=[]
        peilv_0=[]
        banqu_list =[]
        peilv_1=[]
        bifen_list=[]
        peilv_2=[]
        zongjiuqiu_list=[]
        peilv_3=[]
        jieguo_list=[]
        peilv_4=[]
        for url in url_list:
            response = requests.get(url,headers=headers)

            if response.status_code == 200:
                response = requests.get(url, headers=headers)
                h = response.json()
            combinationDes_list = []
            odd_list = []

            for crs in h['value']['matchResultList']:
                combinationDes_list.append(crs['combinationDesc'])
                odd_list.append(crs['odds'])
            if combinationDes_list:  # 检查列表不为空
                if len(combinationDes_list) > 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)

免费评分

参与人数 2吾爱币 +8 热心值 +2 收起 理由
a751851800 + 1 + 1 热心回复!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
kidneyissource 发表于 2024-12-8 15:13
哥们没事喜欢玩点cp啊
3#
 楼主| dabiaoge144 发表于 2024-12-8 16:19 |楼主
4#
starktian 发表于 2024-12-9 18:42
5#
z65555 发表于 2024-12-11 09:44
收藏,学习
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-7 16:02

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表