코딩딩딩

(MySQL/selenium) 로또 번호 데이터 수집 본문

MySQL

(MySQL/selenium) 로또 번호 데이터 수집

komizke 2023. 2. 18. 18:31

1. 소개

 

이번 페이지에서 데이터를 수집할 대상은 현재까지 누적된 로또당첨번호 숫자들이다.

 

어떤 숫자가 많이 뽑혔고 어떤 숫자가 적게 뽑혔는지 궁금했다.

 

과거의 당첨번호 정보를 공개하고 있는 동행복권 공식 사이트를 이용하여 데이터를 수집하였다.

 

1054회 당첨번호

https://www.dhlottery.co.kr/gameResult.do?method=byWin 

 

로또6/45 - 회차별 당첨번호

1054회 당첨결과 (2023년 02월 11일 추첨) 당첨번호 14 19 27 28 30 45 1054회 순위별 등위별 총 당첨금액, 당첨게임 수, 1게임당 당첨금액, 당첨기준, 비고 안내 순위 등위별 총 당첨금액 당첨게임 수 1게임

www.dhlottery.co.kr

 

2. 전체 코드

 

import time
import pymysql
from selenium import webdriver
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup
from selenium.webdriver.common.keys import Keys

conn = pymysql.connect(host='', user='', password='', db='',charset='')    #pymysql연결->인자는 개인이 설정
sql = "INSERT INTO lottoInformation(count,number1,number2,number3,number4,number5,number6,bonus_number) VALUES(%s,%s,%s,%s,%s,%s,%s,%s)"
cursor = conn.cursor()

driver = webdriver.Chrome('./chromedriver')
driver.get('https://dhlottery.co.kr/gameResult.do?method=byWin')
click_page = 1  #클릭할 다음 페이지
currentNumber = 1055    #최신회차 + 1

for i in range(currentNumber):
    html = driver.page_source
    soup = BeautifulSoup(html, 'html.parser')
    number_list = []
    nums = soup.select('#article > div:nth-child(2) > div > div.win_result > div > div.num.win > p > span')
    nums.append(soup.select_one('#article > div:nth-child(2) > div > div.win_result > div > div.num.bonus > p > span'))
    for j in range(len(nums)):
        number_list.append(nums[j].text)
    print(currentNumber-click_page, "회 당첨번호:", number_list)
    cursor.execute(sql, (currentNumber-click_page, number_list[0], number_list[1], number_list[2], number_list[3], number_list[4], number_list[5], number_list[6]))
    conn.commit()
    click_page += 1
    number_list.clear()	#리스트 삭제
    driver.find_element(By.XPATH, '//*[@id="dwrNoList"]/option[' + str(click_page) + ']').click()   #다음 회차로 페이지 이동
    driver.find_element(By.XPATH, '/html/body/div[3]/section/div/div[2]/div/div[1]/div/form/a').send_keys(Keys.ENTER)
    time.sleep(1)
conn.close()	#DB연결 종료
driver.close()

 

3. 결과 (1054회 기준)

 

많이 뽑힌 숫자

 

로또번호 횟수
34 162
18 155
12 154
27 154
14 152
17 151
39 149
13 149
43 148

 

적게 뽑힌 숫자

 

로또번호 횟수
9 113
32 120
22 122
23 125
30 128
28 128
41 131
6 133
29 134

 

아직은 데이터 수가 적은 편이어서 이러한 분석이 의미가 없을 수 있다고 생각할 수 있다.

그러나 시간이 흘러 점점 데이터수가 커진다면 이러한 분석도 의미가 있지 않을까?  

'MySQL' 카테고리의 다른 글

(MySQL) 로또 당첨번호 누적 데이터 (updated-1062회)  (0) 2023.02.25
Comments