programming/python

series - PyLotto 만들기_2 - 당첨번호 1회 ~ 최신회 까지 가져오기_크롤링

slothCat 2021. 1. 6. 17:47
728x90

※ 주의 : 불법적인 크롤링에 대한 책임은 전적으로 본인에게 있습니다.

 

series-PyLotto-만들기1-이번주-당첨-번호-가져오기

 

1) 설명

마지막 회차를 가져와야 하기 때문에 크롤링 함수를 구성

[ 이전의 코드와 동일 ]

마지막 회차

 

해당 회차의 번호를 가져올 수 있도록 인자로 전달받아 사이트 주소를 완성

접속 주소 변경

 

마지막 회차를 가져와 1회 차까지 순차적으로 크롤링하여 출력

출력

 

2) 코드

import requests
from bs4 import BeautifulSoup

def getLastNo():
    req = requests.get('https://www.dhlottery.co.kr/gameResult.do?method=byWin')
    html = req.text
    soup = BeautifulSoup(html, 'html.parser')
    # 회차 크롤링
    no = soup.select('div.win_result > h4 > strong')
    
    # 최신 회차 번호를 가져온다
    return no[0].text

def crawlingLotto(nums):
    # 로또 이번주 당첨 번호 사이트 주소
    req = requests.get('https://www.dhlottery.co.kr/gameResult.do?method=byWin&drwNo=' + str(nums))
    html = req.text
    soup = BeautifulSoup(html, 'html.parser')

    # 회차 크롤링 
    no = soup.select('div.win_result > h4 > strong') 
    # 추첨일
    date = soup.select('div.win_result > p') 
    # 당첨 번호
    nums_win = soup.select('div.num.win > p > span') 
    # 보너스 번호
    nums_bonus = soup.select('div.num.bonus > p > span')
    
    # 당첨번호를 리스트로 정리
    l = []
    for t in nums_win:
        l.append(t.text)
    
    # 나머지 데이터를 추가
    l += [nums_bonus[0].text, no[0].text, date[0].text]

    # 정리된 리스트 반환
    return l

if __name__ == "__main__":
    lastno = int(getLastNo()[:-1])

    for i in range(lastno,1,-1):
        nums = crawlingLotto(i)
        print(nums)

3) 실행 화면

실행화면

회차가 많아 시간이 오래 걸림

종료를 원할 경우 Ctrl + C 또는 정지 버튼을 눌러준다

반응형