MySQL
(MySQL/selenium) 로또 번호 데이터 수집
komizke
2023. 2. 18. 18:31
1. 소개
이번 페이지에서 데이터를 수집할 대상은 현재까지 누적된 로또당첨번호 숫자들이다.
어떤 숫자가 많이 뽑혔고 어떤 숫자가 적게 뽑혔는지 궁금했다.
과거의 당첨번호 정보를 공개하고 있는 동행복권 공식 사이트를 이용하여 데이터를 수집하였다.
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 |
아직은 데이터 수가 적은 편이어서 이러한 분석이 의미가 없을 수 있다고 생각할 수 있다.
그러나 시간이 흘러 점점 데이터수가 커진다면 이러한 분석도 의미가 있지 않을까?