from json import JSONDecoder
import json
from matplotlib.font_manager import json_load
import pymysql
import requests
import time
from bs4 import BeautifulSoup
import itertools

class LottryRecord:
    def __init__(self):
        self.loid = ''
        self.r1 = 0
        self.r2 = 0
        self.r3 = 0
        self.r4 = 0
        self.r5 = 0
        self.r6 = 0
        self.blue = 0
        self.BlueSunday = ''
        self.SalesAmount = 0
        self.FirstCount = 0
        self.FisrtBonus = 0
        self.SecCount = 0
        self.SecBonus = 0
        self.PoolAmount =0
        self.lottime = ''

config = {
          'host':'localhost',
          'port':3306,
          'user':'root',
          'password':'123456',
          'database':'lottery',
          'charset':'utf8mb4',
          'cursorclass':pymysql.cursors.Cursor,
          }

colorString = "\033[32m"+"dddddddddd :\033[31m"+"dfadfasdfasdfasdfa" + "\033[0m\n"



print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
db = pymysql.connect(**config)
cursor = db.cursor()
while True:
    cursor.execute("SELECT loid FROM historydata order by loid desc limit 1;")
    results = cursor.fetchone()
    if results == None:
        loidst = '2003001' #the first period is 03001
    else:
        loidst = results[0]
        loidst =int(loidst) + 1
        loidst =str(loidst)
    print(loidst )
    #loidst = '2022038'
    #loided = '2022038'
    url = 'http://www.cwl.gov.cn/cwl_admin/front/cwlkj/search/kjxx/findDrawNotice?name=ssq&issueCount=&issueStart='+loidst+'&issueEnd='+loidst+'&dayStart=&dayEnd='
    print(url)
    res = requests.get(url)
    print(res.status_code)

    if res.status_code != 200 :
        print('status_code' + str(res.status_code))
        break

    jr = json.loads(res.content)

    if jr['state'] != 0 :
        print('state' + str(jr['state']))  
        # go to the next year
        loid = loidst[0:4]
        loid =int(loid) + 1
        loid =str(loid) + '001'
        loidst = loid      
        url = 'http://www.cwl.gov.cn/cwl_admin/front/cwlkj/search/kjxx/findDrawNotice?name=ssq&issueCount=&issueStart='+loidst+'&issueEnd='+loidst+'&dayStart=&dayEnd='
        print(url)
        res = requests.get(url)
        print(res.status_code)

        if res.status_code != 200 :
            print('status_code' + str(res.status_code))
            break
        jr = json.loads(res.content)
        if jr['state'] != 0 :
            print('state' + str(jr['state']))  
            break 

    qiu_red = jr['result'][0]['red'].split(',')
    qiu_blue = jr['result'][0]['blue']
    
    record = LottryRecord()
    record.loid = loidst
    record.r1 = qiu_red[0]
    record.r2 = qiu_red[1]
    record.r3 = qiu_red[2]
    record.r4 = qiu_red[3]
    record.r5 = qiu_red[4]
    record.r6 = qiu_red[5]
    record.blue = qiu_blue
    record.BlueSunday = jr['result'][0]['blue2'] #don't record this
    record.lottime = jr['result'][0]['date'][0:10]
    record.SalesAmount = jr['result'][0]['sales']
    record.PoolAmount = jr['result'][0]['poolmoney']

    record.FirstCount = jr['result'][0]['prizegrades'][0]['typenum']
    record.FisrtBonus = jr['result'][0]['prizegrades'][0]['typemoney']
    record.SecCount = jr['result'][0]['prizegrades'][1]['typenum']
    record.SecBonus = jr['result'][0]['prizegrades'][1]['typemoney']

    print("\033[32m",record.lottime," ",record.loid,":\033[31m",record.r1,record.r2,record.r3,record.r4,record.r5,record.r6,"\033[0m+\033[34m", record.blue, "\033[0m") ;  
    params =[record.loid ,record.r1 ,record.r2 ,record.r3 ,record.r4 ,record.r5 ,record.r6 ,record.blue ,record.BlueSunday , \
        record.SalesAmount,record.FirstCount ,record.FisrtBonus ,record.SecCount,record.SecBonus,record.PoolAmount ,record.lottime]

    bought1 = ['02', '07','08','22']
    bought2 = ['12','16','28','32','33']
    reds = [record.r1,record.r2,record.r3,record.r4,record.r5,record.r6]
    intersection1 = list(set(bought1).intersection(set(reds)))
    intersection2 = list(set(bought2).intersection(set(reds)))

    money = 0
    glist = itertools.combinations(bought2, 2)
    cnt = 0
    for c in glist:
        redlist = list(c)
        redlist.extend(bought1)
        ss = list(set(redlist).intersection(set(reds)))
        if len(ss) < 3:
            if record.blue == "04":
                    money += 5
                    cnt+=1
                    print(cnt, ": \033[32m", ss, " 5 元 \033[0m")
        if len(ss) == 3:
            if record.blue == "04":
                    money += 10
                    cnt+=1
                    print(cnt, ": \033[32m", ss, " 10 元 \033[0m")
        elif len(ss) == 4:
            if record.blue == "04":
                    money += 200
                    cnt+=1
                    print(cnt, ": \033[32m", ss, " 200 元 \033[0m")
            else:
                    money += 10
                    cnt+=1
                    print(cnt, ": \033[32m", ss, " 10 元 \033[0m")
        elif len(ss) == 5:
            if record.blue == "04":
                    money += 3000
                    cnt+=1
                    print(cnt, ": \033[32m", ss, " 3000 元 \033[0m")
            else:
                    money += 200
                    cnt+=1
                    print(cnt, ": \033[32m", ss, " 200 元 \033[0m")
        elif len(ss) == 6:
            if record.blue == "04":
                    money += record.FisrtBonus
                    cnt+=1
                    print(cnt, ": \033[32m", ss, " ", record.FisrtBonus, " 元 \033[0m")
            else:
                    money += record.SecBonus
                    cnt+=1
                    print(cnt, ": \033[32m", ss, " ", record.SecBonus, " 元 \033[0m")


    print("\033[32m", intersection1,",", intersection2 ," : ", money, " 元 \033[0m")

    insertSql = 'INSERT INTO `historydata`(`Loid`,`R1`,`R2`,`R3`,`R4`,`R5`,`R6`,`Blue`,`BlueSunday`,`SalesAmount`,`FirstCount`,`FisrtBonus`,`SecCount`,`SecBonus`,`PoolAmount`,`lottime`)' \
                'VALUES ( %s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)'

    cnt = cursor.execute(insertSql,params )  
    print(record.loid + ':' + str(cnt))   
    db.commit()

print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))

对应所用到的数据库建表语句:https://www.cnblogs.com/crazyghostvon/p/mysqlskills.html