0
点赞
收藏
分享

微信扫一扫

python分析预测3d

# coding: utf-8
import requests
import openpyxl
from openpyxl import load_workbook
from bs4 import BeautifulSoup
import lxml
import re
import datetime

path = r"C:\Users\Administrator\Desktop\误删\python\爬虫"

filename = path + "/" + "3d_data.xlsx"


# 加载工作薄
wb = load_workbook(filename)
# 选择工作表
# ws = wb['test']
# sheet_names 返回工作薄中的sheet列表
sheet_names = wb.sheetnames
# 选择工作表
ws = wb[sheet_names[0]]

# 获取中奖号码
def get_jian_num():
    #清空excel后插入
    ws.delete_rows(1, ws.max_row)
    wb.save(filename)
    
    #1页20个号码,100页
    range_page = 10
    for n in range(1,range_page):
        urlpage = "https://www.ssqzj.com/kaijiang/3dmingxi_" + str(n) + ".html"
        response = requests.get(urlpage)
        # 奖号
        soup = BeautifulSoup(response.text, 'html.parser')
        jian_num = soup.find_all("div", attrs={"class":"haoma"})
        #print(jian_num)
        # 总期数
        len_num = ( range_page - 1 ) * 20
        print(len_num)
        # excel插入奖号
        for i in jian_num:
            #print(i)
            # \d+匹配1次或者多次数字
            jian_list = re.findall(r"\d+", str(i))
            #print(jian_list)
            if len(jian_list) == 0:
                jian_list = ['0','0','0']

            jian_list_int = [int(jian_list[0]), int(jian_list[1]), int(jian_list[2]) ]
            #print(jian_list_int)
            #print(sorted(jian_list_int))
            ws.cell(len_num, 2).value = jian_list_int[0]
            ws.cell(len_num, 3).value = jian_list_int[1]
            ws.cell(len_num, 4).value = jian_list_int[2]

            # 插入奇数还是偶数
            ws.cell(len_num, 5).value = value_ji_ou(jian_list_int[0])
            ws.cell(len_num, 6).value = value_ji_ou(jian_list_int[1])
            ws.cell(len_num, 7).value = value_ji_ou(jian_list_int[2])
            
            # 插入和值
            sum_num = 0
            for i in jian_list_int:
                sum_num += i
            ws.cell(len_num, 8).value = sum_num

            # 插入跨度
            # 列表排序 小--->大
            kuadu_num_list = sorted(jian_list_int)
            kuadu_num = kuadu_num_list[2] - kuadu_num_list[0]
            ws.cell(len_num, 9).value = kuadu_num

            # 插入012路
            ws.cell(len_num, 10).value = if_0_or_1_or_2(jian_list_int[0])
            ws.cell(len_num, 11).value = if_0_or_1_or_2(jian_list_int[1])
            ws.cell(len_num, 12).value = if_0_or_1_or_2(jian_list_int[2])

            if len_num >= 0:
                len_num = len_num - 1
            #ws.append(jian_list)
            wb.save(filename)
        #print("len_num:", len_num)

        # excel插入日期
        soup_date = BeautifulSoup(response.text, 'html.parser')
        date_num = soup_date.find_all("td")
        date_num_du = re.findall("\d+-\d+-\d+",str(date_num))
        print(date_num_du)
        len_date_num = ( range_page - 1 ) * 20

        for i in range(0,20):
            ws.cell(len_date_num, 1).value = date_num_du[i]
            #print(len_date_num)
            if len_date_num > 0:       
                len_date_num = len_date_num - 1
            #print(len_date_num)
            wb.save(filename)
        range_page = range_page - 1 
        #print("range_page:", range_page)

def value_ji_ou(num):
    if ( num % 2 ) == 0:
        return "偶"
        print("偶")
    else:
        return "奇"

def date_delete(date_num):
    # 格式化日期
    date_num = datetime.datetime.strptime(str(date_num), '%Y-%m-%d')
    print(date_num)
    date_delete_1 = (date_num + datetime.timedelta(days=-1)).strftime("%Y-%m-%d")
    print(date_delete)
    return date_delete

# 获取元素的值
def get_value(row, column):
    values  = ws.cell(row, column).value
    return values

# 获取最新一期奖号
def get_new():
    new_list = []
    for i in range(max_column + 1):
        if i > 0:
            new_num = get_value(max_row, i)
            new_list.append(new_num)
    return new_list

# 数据加载到字典 key=日期,value=奖号list
def get_list_dict():
    num_dict = {}
    num_list = []
    for n in range(max_row):
        for c in range(max_column + 1):
            if n > 0 and c > 1:
                num = get_value(n, c)
                num_list.append(num)
        if n > 0:
            num_dict[get_value(n, 1)] = num_list
        num_list = []
    #print(num_dict)
    return num_dict

# 判断012路
def if_0_or_1_or_2(num):
    if num == 0 or num == 3 or num == 6 or num == 9:
        return 0
    if num == 2 or num == 5 or num == 8:
        return 2
    if num == 1 or num == 4 or num == 7:
        return 1

def his_num_0_1_2():
    num_00 = num_01 = num_02 = 0
    for i in his_list_num:
        num_1 = get_value(i, 10)
        num_2 = get_value(i, 11)
        num_3 = get_value(i, 12)
        for i in num_1,num_2,num_3:
            if if_0_or_1_or_2(i) == 0:
                num_00 += 1
            if if_0_or_1_or_2(i) == 1:
                num_01 += 1
            if if_0_or_1_or_2(i) == 2:
                num_02 += 1
    print("0路:", num_00, "  1路:" ,num_01, "  2路:", num_02)
# 判断大小 0-4 5-9
def if_lager_5_or_small(num):
    if num < 5:
        return "xiao"
    else:
        return "da"

# 获取最新一期与历史奇偶相似的数据
def new_like_old_ji_ou(row):
    if get_value(row, 5) == get_new()[4] and get_value(row, 6) == get_new()[5] and get_value(row, 7) == get_new()[6]:
        return row
def old_like_ji_ou_dict():
    his_list_dict = {}
    for n in range(1, max_row):
        if new_like_old_ji_ou(n) == n:
            his_old = get_value(n, 1)
            his_list_dict[n] = his_old
    # hist_list  key = 行号, value=日期
    #print(his_list)
    his_next_list = []
    his_next_list_zu6 = []
    his_next_list_zu3 = []
    for key in his_list_dict:
        his_next_zu3_or_zu6 = if_zu3_or_zu6(get_value(key + 1, 2), get_value(key + 1, 3), get_value(key + 1, 4))
        if his_next_zu3_or_zu6 == "zu_3":
            his_next_list_zu3.append(key + 1)
        else:
           his_next_list_zu6.append(key + 1)

        # 打印所有历史相似期数
        #print("相似行数: ", key, get_value(key, 1), get_list_dict()[get_value(key , 1)], "下期行数: " , key + 1 , get_value(key + 1, 1) ,get_list_dict()[get_value(key + 1, 1)])
        his_next_list.append(key + 1)

    print("往期相似下一期期数: ", len(his_next_list), "  ", his_next_list)
    
    # zu_3
    if len(his_next_list_zu3) > 0:
        print("-----相似历史下期zu_3: ", len(his_next_list_zu3), his_next_list_zu3)
        for key in his_next_list_zu3:
            print("相似行数: ", key, get_value(key - 1, 1), get_list_dict()[get_value(key - 1, 1)], "下期行数: " , key , get_value(key, 1) ,get_list_dict()[get_value(key, 1)])
   
    # zu_6
    if len(his_next_list_zu6) > 0:
        print("-----相似历史下期zu_6: ", len(his_next_list_zu6), his_next_list_zu6)
        for key in his_next_list_zu6:
            print("相似行数: ", key, get_value(key - 1, 1), get_list_dict()[get_value(key - 1, 1)], "下期行数: " , key , get_value(key, 1) ,get_list_dict()[get_value(key, 1)])
        
    return his_next_list,his_next_list_zu3,his_next_list_zu6

# 历史相似下一期  和值跨度
def his_sum_value():
    his_sum = 0
    his_kuadu = 0
    his_len = len(his_list_num)
    for n in his_list_num:
        #print("---", n, his_sum , get_value(n, 8))
        his_sum += get_value(n, 8)
        his_kuadu += get_value(n, 9)
    his_sum_averaged = his_sum / his_len
    his_kuadu_averaged = his_kuadu / his_len
    print("平均跨度: ", his_kuadu_averaged, "   和值平均值: ", his_sum_averaged)

# 历史相似下一期  小大个数
def his_small_lager():
    his_small_num = 0
    his_lager_num = 0

    # 小大各类型个数
    num_xxx = num_xxd = num_xdx = 0
    num_dxx = num_dxd = num_ddd = 0
    for n in his_list_num:
        if if_lager_5_or_small(get_value(n, 2)) == "xiao":
            his_small_num += 1
        else:
            his_lager_num += 1
        if if_lager_5_or_small(get_value(n, 3)) == "xiao":
            his_small_num += 1
        else:
            his_lager_num += 1
        if if_lager_5_or_small(get_value(n, 4)) == "xiao":
            his_small_num += 1
        else:
            his_lager_num += 1

        # 小大各类型个数
        num_1 = get_value(n, 2)
        num_2 = get_value(n, 3)
        num_3 = get_value(n, 4)
        #print("xiaoxiaoxxxxx-------",if_lager_5_or_small(num_1), if_lager_5_or_small(num_2), if_lager_5_or_small(num_3))
        if if_lager_5_or_small(num_1) == "xiao" and if_lager_5_or_small(num_2) == "xiao" and if_lager_5_or_small(num_3) == "xiao":
            num_xxx += 1
        if if_lager_5_or_small(num_1) == "xiao" and if_lager_5_or_small(num_2) == "xiao" and if_lager_5_or_small(num_3) == "da":
            num_xxd += 1
            #print("xxd----", num_xxd)
        if if_lager_5_or_small(num_1) == "xiao" and if_lager_5_or_small(num_2) == "da" and if_lager_5_or_small(num_3) == "xiao":
            num_xdx += 1
        if if_lager_5_or_small(num_1) == "da" and if_lager_5_or_small(num_2) == "xiao" and if_lager_5_or_small(num_3) == "xiao":
            num_dxx += 1
        if if_lager_5_or_small(num_1) == "da" and if_lager_5_or_small(num_2) == "xiao" and if_lager_5_or_small(num_3) == "da":
            num_dxd += 1
        if if_lager_5_or_small(num_1) == "da" and if_lager_5_or_small(num_2) == "da" and if_lager_5_or_small(num_3) == "da":
            num_ddd += 1

    print("小于5个数 ", his_small_num, "  大于5个数 ", his_lager_num)
    print("小小小:", num_xxx, "  小小大:", num_xxd, "  小大小:", num_xdx, "  大小小:", num_dxx, "  大小大:", num_dxd, "  大大大:", num_ddd)
# 历史相似下一期 0-9个数
def his_sum_0_9():
    num_00 = num_01 = num_02 = num_03 = num_04 = num_05 = num_06 = num_07 = num_08 = num_09 = 0
    for n in his_list_num:
        num_1 = get_value(n, 2)
        num_2 = get_value(n, 3)
        num_3 = get_value(n, 4)
        # 0-9 出现个数
        for num in str(num_1),str(num_2),str(num_3):
            if num == "0":
                num_00 += 1
            elif num == "1":
                num_01 += 1
            elif num == "2":
                num_02 += 1
            elif num == "3":
                num_03 += 1
            elif num == "4":
                num_04 += 1
            elif num == "5":
                num_05 += 1
            elif num == "6":
                num_06 += 1
            elif num == "7":
                num_07 += 1
            elif num == "8":
                num_08 += 1
            else:
                if num == "9":
                    num_09 += 1
    num_key = {}
    num_key["00"] = num_00
    num_key["01"] = num_01
    num_key["02"] = num_02
    num_key["03"] = num_03
    num_key["04"] = num_04
    num_key["05"] = num_05
    num_key["06"] = num_06
    num_key["07"] = num_07
    num_key["08"] = num_08
    num_key["09"] = num_09
    print(sorted(num_key.items(), key= lambda kv:(kv[1], kv[0])))
    #print("0:", num_00, " 1:", num_01, "  2:", num_02, "  3:", num_03, "  4:", num_04, "  5:", num_05, "  6:", num_06, "  7:", num_07, "  8:", num_08, "  9:", num_09)

# 历史相似下一期 奇偶
def his_ji_or_ou():
    ji_num = 0
    ou_num = 0

    # 预测百个十奇偶
    ji_ji_ji = ji_ji_ou = ji_ou_ou = ji_ou_ji = 0
    ou_ji_ji = ou_ji_ou = ou_ou_ou = ou_ou_ji = 0

    for n in his_list_num:
        num_1 = get_value(n, 5)
        num_2 = get_value(n, 6)
        num_3 = get_value(n, 7)
        for num in num_1,num_2,num_3:
            if num == "奇":
                ji_num += 1
            else:
                ou_num += 1
        if num_1 == "奇" and num_2 == "奇" and num_3 == "奇":
            ji_ji_ji += 1
        if num_1 == "奇" and num_2 == "奇" and num_3 == "偶":
            ji_ji_ou += 1
        if num_1 == "奇" and num_2 == "偶" and num_3 == "偶":
            ji_ou_ou += 1
        if num_1 == "奇" and num_2 == "偶" and num_3 == "奇":
            ji_ou_ji += 1
        if num_1 == "偶" and num_2 == "奇" and num_3 == "奇":
            ou_ji_ji += 1
        if num_1 == "偶" and num_2 == "奇" and num_3 == "偶":
            ou_ji_ou += 1
        if num_1 == "偶" and num_2 == "偶" and num_3 == "偶":
            ou_ou_ou += 1
        if num_1 == "偶" and num_2 == "偶" and num_3 == "奇":
            ou_ou_ji += 1
    print("奇数: ", ji_num, "    偶数: ", ou_num)
    print("-----选多的--")
    print("奇奇奇:", ji_ji_ji, "  奇奇偶:", ji_ji_ou, "  奇偶偶:", ji_ou_ou, "  奇偶奇:", ji_ou_ji, "  偶奇奇:", ou_ji_ji, "  偶奇偶:", ou_ji_ou, "  偶偶偶:", ou_ou_ou, "  偶偶奇:", ou_ou_ji)

# 最近5期
def get_new_5_dict():
    num_5_dict = {}
    num_5_list = []
    for n in range(max_row - 4, max_row):
        for c in range(1, max_column + 1):
            num = get_value(n, c)
            num_5_list.append(num)
        num_5_dict[get_value(n, 1)] = num_5_list
        num_5_list = []
    #print(num_5_dict)
    return num_5_dict


# 判断组三组六
def if_zu3_or_zu6(num_1, num_2, num_3):
    if num_1 == num_2 or num_1 == num_3 or num_2 == num_3:
        return "zu_3"
    else:
        return "zu_6"


if __name__ == '__main__':
    get_jian_num()

    # ws.max_row 最大行数       ws.max_column 最大列数
    max_row = ws.max_row
    max_column = ws.max_column
    #print(max_row, max_column)

    print("-------------最新一期------------")
    print(get_new())
    #get_list_dict()
    his_list_num,his_list_num_zu3,his_list_num_zu6 = old_like_ji_ou_dict()
    #print("----",his_list_num)
    #for i in his_list_num,his_list_num_zu3,his_list_num_zu6:
    his_list_num_5 = his_list_num[-5:]

    for i in his_list_num_zu3,his_list_num_zu6:    
        print("-------------------------", len(i), i, "-------------------------------")
        his_list_num = i
        print("----补小的----")
        his_small_lager()
        his_sum_0_9()
        #his_num_0_1_2()
        his_sum_value()
        his_ji_or_ou()
    
    print("-------------------------- all_5", his_list_num_5)
    his_list_num = his_list_num_5
    his_sum_value()
    #his_num_0_1_2()

备注:

excel中最后一列需要插入试机号



举报

相关推荐

0 条评论