http://conansjh20.pythonanywhere.com/lottopage/

 

로또 당첨번호 확인

로또 당첨 번호 확인

conansjh20.pythonanywhere.com

위의 홈페이지 제작의 모든 과정을 보여드립니다.

 

1. 로또 당첨 번호 6개와 보너스 당첨 번호 1개를 얻습니다.

1
2
3
4
5
6
7
8
    num_filter = re.compile('drwtNo.*'
    wn = [] 
    for get_num in get_html.find_all("span",{"id": num_filter}): 
        wn.append(get_num.get_text()) 
    bonus_num = get_html.find("span",{"id":"bnusNo"}).text 
    bn = bonus_num
    wn = list(wn)
    get_mynum = str.split(numbers)
cs

일단 동행복권 홈페이지의 당첨 번호 및 보너스 당첨 번호의 태그를 알아보면 다음과 같습니다.

 

참고로 크롬에서 f12키를 누르면 개발자 화면이라고 부르는 내가 보고 있는 페이지의 전체 html 코드가 나오고 왼쪽 맨 위의 아래와 같은 아이콘을 클릭하여 왼쪽 홈페이지의 내가 원하는 부분을 선택하면 오른쪽 개발자 화면에 그 부분의 html 코드가 나옵니다.

위의 당첨번호와 보너스 당첨번호 부분을 선택합니다.
6개의 당첨번호가 drwNo로 시작하는 것을 알 수 있다.

  • num_filter - 정규 표현식 re를 사용하여 특정 문자열(drwtNo)을 포함하는 필터를 생성(compile)합니다. re의 compile 기능은 당장 정규 표현식을 이용한다기 보다는 하나의 필터를 만들어 놓고 여러 문자열에 동시에 적용할 때 편리합니다. 여기서는 drwtNo.* 라고 작성하였는데 drwtNo로 시작하고 뒤에 .은 \n을 제외한 즉 줄 바꾸기를 제외한 어떠한 숫자나 문자, 기호를 의미하고 또 그 다음의 *은 0개 이상 반복을 의미합니다. 위 경우에는 drwNo 다음에 1부터 6까지 각각 들어있어 사실상 *은 있어도 되고 없어도 되지만 그냥 넣었습니다.^^;  

 

  • wn = [] - wn이란 이름의 빈 리스트를 하나 만듭니다.

 

  • for 구문을 이용하여 당첨번호들의 리스트를 만듭니다. get_html (홈페이지의 모든 html 코딩)에서 find_all 기능을 사용하여 span 태그 안에 있는 id  값이 앞서 지정한 num_filter에 해당하는 모든 html 태그 구문들 총 6개를 찾아서 get_num이라는 값으로 반복 수행합니다.

 

  • get_num의 전체 태그 구문중 실제 태그 부분을 제외한 당첨 번호 값만 필요하기 때문에 .get_text() 를 사용하여 태그 제외한 문자열 값을 앞서 만든 빈 wn 라는 이름의 리스트에 반복하여 추가(append) 합니다. 

 

  • 이어서 보너스 당첨 번호도 span 태그 안의 id 값이 bnusNo가 있는 태그 구문의 실제 문자열 값만 찾아옵니다.
1
2
3
    for get_num in get_html.find_all("span",{"id": num_filter}): 
        wn.append(get_num.get_text()) 
    bonus_num = get_html.find("span",{"id":"bnusNo"}).text 
cs
  • 여기서 주의할 점은 get_html에서 각각 .find_all 기능과 .find 기능을 사용했는데 .find_all 기능을 이용하면 바로 맨 뒤에 .text를 붙여 태그 제외한 문자열 값만 추출할 수 없고, 다음줄에서 .get_text()를 이용하여 추출하였습니다. (이런 detail한 부분은 인터넷을 뒤져도 잘 나오지 않아 많이 헤맸습니다.ㅠㅠ)
1
2
    bn = bonus_num
    wn = list(wn)
cs
  • 위 부분은 아무 의미 없습니다. 단순히 보너스 번호의 이름을 바꾸고 이미 리스트인 wn을 다시 리스트로 만드는 명령어입니다. 앞서 포스팅한 내 컴퓨터에서 직접 실행시키는 똑같은 프로그램을 짤 때는 의미가 있었는데 홈페이지 웹 어플리케이션으로 만드는 과정에서 수정하다 보니 이도 저도 아닌 쓸데 없는 구문이 되어 버렸네요.;;
1
    get_mynum = str.split(numbers)
cs
  • 사용자가 입력한 여섯개의 로또 번호를 리스트화 시켜주고 이를 get_mynum으로 정의합니다. str.split은 전체 문자열의 빈칸을 구분자로 인식하고 각각을 리스트의 문자열 값으로 만들어 줍니다. 예를들어 1 2 3 4 5 6을 입력하면 ['1', '2', '3', '4', '5', '6'] 이라는 리스트로 만들어 주는 것입니다. 각각의 숫자는 ' '에 들어가 있듯이 숫자(int)가 아니라 문자(str) 입니다.

 

이것으로 당첨번호 6개가 들어있는 리스트 wn, 보너스 당첨번호 bn 그리고 내 로또 번호 6개가 들어있는 리스트 get_mynum 을 준비하였습니다!

 

지금까지 진행한 전체 코딩입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import requests
from bs4 import BeautifulSoup
import re
 
def lotto(numbers):
    get_address = requests.get("https://www.dhlottery.co.kr/common.do?method=main"
    get_content = get_address.content 
    get_html = BeautifulSoup(get_content, "html.parser"
    get_time = get_html.find("strong",{"id":"lottoDrwNo"}).text
    get_date = get_html.find("span",{"id":"drwNoDate"}).text
    num_filter = re.compile('drwtNo.*'
    wn = [] 
    for get_num in get_html.find_all("span",{"id": num_filter}): 
        wn.append(get_num.get_text()) 
    bonus_num = get_html.find("span",{"id":"bnusNo"}).text 
    bn = bonus_num
    wn = list(wn)
    get_mynum = str.split(numbers)
cs

 

+ Recent posts