python 로또 번호 생성기 #1. 역대 당첨 번호 수집
본문 바로가기
▷ 도전/▷ Coding

python 로또 번호 생성기 #1. 역대 당첨 번호 수집

by wHatsyUP 2023. 7. 16.
728x90

로또 번호 생성기를 만든어보려함.

단순하게 번호를 무작위로 6개를 선택하는게 아니라

역대 당첨번호와 비교해서 추출할 것임.

기본적으로 2번이상 당첨된 번호 조합은 없다고 보고

무작위로 선택된 번호 조합중 1등 또는 2등 당첨 기록이 있는 

번호 조합은 제외하는 방식으로 번호를 추출.

그리고 추가로 내가 선택한 번호 조합이 1등, 2등 당첨 기록이 있는지도 확인.

 

#1. 역대 당첨 번호 수집

python web crawling으로 수집해서 DB로 저장

1. 모듈 

request, splite3

import requests
import sqlite3

 

2. db

회차, 1등 당첨 번호와 보너스 (6개 번호), 당첨인원, 당첨금, 추첨일 순서로 저장

db_path = 'lotto.db'
db = sqlite3.connect(db_path)

# db 파일 없으면 생성
cursor = db.cursor()
query = 'CREATE TABLE IF NOT EXISTS LOTTO(r, num_1, num_2, num_3, num_4, num_5, num_6, num_bonus, num_people, money, date)'
cursor.execute(query)
       
start = 'SELECT * FROM LOTTO ORDER BY r LIMIT 1'
last = 'SELECT * FROM LOTTO ORDER BY r DESC LIMIT 1'

cursor.execute(start)
start = cursor.fetchone()

 

3. db 체크

DB를 확인해서 자료가 없으면 처음부터 저장하고

자료가 있으면 마지막 회차 이후로 저장

if start == None:
    print(' >> 처음부터 데이터 저장')
    num = 1
            
else:
    print(' >> 기존 데이터에 이어 저장')
    cursor.execute(last)
    last = cursor.fetchone()[0]
    
    num = last + 1
300x250

 

4. crwaling 시작

collect_mode = True
    
while collect_mode == True:
                
    url = f'https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo={num}'
    req_result = requests.get(url)
    json_result = req_result.json()

    return_value = json_result.get('returnValue', None)
    lottery_date = json_result.get('drwNoDate', None)
    num_people   = json_result.get('firstPrzwnerCo', None)
    win_money    = json_result.get('firstWinamnt', None)
    num_1        = json_result.get('drwtNo1', None)
    num_2        = json_result.get('drwtNo2', None)
    num_3        = json_result.get('drwtNo3', None)
    num_4        = json_result.get('drwtNo4', None)
    num_5        = json_result.get('drwtNo5', None)
    num_6        = json_result.get('drwtNo6', None)
    num_bonus    = json_result.get('bnusNo', None)
    
    if num_bonus != None:
        info = (num, num_1, num_2, num_3, num_4, num_5, num_6, num_bonus, num_people, win_money, lottery_date)
        cursor.execute('INSERT INTO LOTTO VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', info)
        # win_nums = {num_1, num_2, num_3, num_4, num_5, num_6}
        print(f'{num}회차 업데이트 완료')
        num += 1
    
    else:
        collect_mode = False
        print(f'\n{num}회차 -- Not yet !!!!!!')

db.commit()

역대 자료 수집하여 DB에 저장하기 끝

 

다음 포스팅은 1~45 숫자중 임의로 6개를 선택하는 방법에 대해 하겠음.

 

 

728x90

댓글