Python

[Python] 동행복권 추첨번호를 크롤링하여 MySQL DB에 입력하기

IT-PAPA 2023. 3. 20. 21:32
반응형

동행복권의 당첨번호는 웹사이트에서 크롤링하여 가져와서 MySQL 데이터베이스에 저장할 수 있습니다. 

이를 위해 파이썬에서는 requests와 BeautifulSoup 라이브러리를 사용할 수 있습니다.

pymysql 라이브러리 설치

pip install pymysql

 

파이썬 코드

import requests
from bs4 import BeautifulSoup
import pymysql

# MySQL 연결 정보
conn = pymysql.connect(
    host='192.168.87.128',
    user='root',
    password='admin',
    db='mysql',
    charset='utf8mb4'
)

# 동행복권 홈페이지에서 현재 주차의 로또 당첨번호 크롤링
url = "https://www.dhlottery.co.kr/gameResult.do?method=byWin"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")

# 최근회차 추첨 번호 가져오기
recent_round = soup.select_one(".win_result h4 strong").text.replace('회','')
numbers = soup.select(".win_result .num.win")

# 당첨번호 데이터를 MySQL에 저장
try:
    with conn.cursor() as cursor:
        
        # 최근 회차부터 과거 회차까지 loop
        #for i in range(int(recent_round), 0, -1):
        for i in range(1, int(recent_round), 1):
            # 회차별 URL
            url = f"https://www.dhlottery.co.kr/gameResult.do?method=byWin&drwNo={i}"
            response = requests.get(url)
            soup = BeautifulSoup(response.text, "html.parser")

            # 추첨 번호 추출
            numbers = soup.find_all('span', {'class': 'ball_645'})
            # 회차 번호 추출
            round_num = soup.select_one(".win_result h4 strong").text.replace('회','')
        
            # 기존에 저장된 데이터가 있는지 확인
            sql = "SELECT * FROM tb_lotto WHERE round=%s"
            cursor.execute(sql, (round_num,))
            result = cursor.fetchone()

            # 기존에 저장된 데이터가 없으면 새로운 데이터 추가
            if not result:
                sql = "INSERT INTO tb_lotto (round, num1, num2, num3, num4, num5, num6, bonus) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)"
                cursor.execute(sql, (round_num, numbers[0].text, numbers[1].text, numbers[2].text, numbers[3].text, numbers[4].text, numbers[5].text, numbers[6].text))
            else:
                print("이미 저장된 데이터입니다.")

            conn.commit()
finally:
    conn.close()

 

위 코드에서는 requests 라이브러리로 동행복권 홈페이지에서 현재 주차의 로또 당첨번호를 크롤링합니다.

그리고 pymysql 라이브러리를 사용하여 MySQL에 데이터를 저장합니다. 

MySQL 연결 정보를 설정하고, 기존에 저장된 데이터가 있는지 확인한 후, 없으면 INSERT 쿼리를 실행하여 데이터를 저장합니다.

 

입력된 데이터 조회

입력된 데이터 조회
입력된 데이터 조회

728x90
반응형
LIST