본문 바로가기

DB엔지니어가 공부하는 python

[python] 파이썬으로 역대 로또 당첨번호, 1등 당첨금 수집 후 엑셀,텍스트 파일에 저장 feat.미완성

안녕하세요.

 

1일 1공부를 목표로 파이썬을 스터디 하고 있는 8년차 DB엔지니어 sTricky 입니다.

 

사실 몇일 비었는데..

 

쉴려고 쉰건 아니고, 하고싶은 주제를 목표하는만큼 끌어 올리는데 실패해서 늦어졌습니다.

 

원래 그림은 역대 로또 번호를 api로 받아와서 그걸 엑셀에 이쁘게 저장 하는거 였는데..

 

지금 상태로는 엑셀에서의 후처리를 할수밖에 없는 상황입니다.

 

상태를 보시고 혹시 도움을 주실수 있으시면 "댓글" 로 간곡히 부탁드립니다. ㅠㅠ

 

바로 들어가 볼께요!

 

아주 간단 합니다! (하긴... 제가 복잡한건 아직 못해요..ㅎㅎ)

 

from urllib.request import urlopen
import pandas as pd
import json

필요한 라이브러리를 import 해줍니다.

 

그리고

 

for i in range(1,1000):

    url="http://www.nlotto.co.kr/common.do?method=getLottoNumber&drwNo="+str(i)
    
    result_data = urlopen(url)
    result = result_data.read()

    lotto = json.loads(result)

    
    lotto_num = ({str(lotto["drwNo"])+','+str(lotto["drwNoDate"])+','+str(lotto["totSellamnt"])+','+str(lotto["firstAccumamnt"])+','+str(lotto["firstPrzwnerCo"])+','+str(lotto["firstWinamnt"])+','+str(lotto["drwtNo1"])+','+str(lotto["drwtNo2"])+','+str(lotto["drwtNo3"])+','+str(lotto["drwtNo4"])+','+str(lotto["drwtNo5"])+','+str(lotto["drwtNo6"])+','+str(lotto["bnusNo"])})
    
   
    print(lotto_num)
    
    
    
    
    db = pd.DataFrame(lotto_num)
    
    db.to_csv("lotto_number_history.csv",header=False , mode='a')

for문으로 시작을 하는데요, 이게 오늘(20.01.16) 기준으로 893회차 까진가 있을겁니다.

 

그냥 1000을 넣어서 돌립니다.

 

돌면서 csv 파일에 추가하는거닌깐 더이상 없으면 에러가 떨어지면서 종료가 될겁니다.

 

그래도 데이터는 살아 있죠.

 

위쪽에 있는 주소가 바로 로또번호를 가져오는 API 입니다.

 

여기에서 가져 올 수 있는 정보는 

 

'회차','추첨일','총판매금액','총1등당첨금','1등당첨게임수','게임당1등당첨금','1번번호','2번번호','3번번호','4번번호','5번번호','6번번호','보너스번호'

 

이렇게 가져 올 수 있습니다.

 

그것들을 호출하고, 그리고 result로 리턴 받은 값을 저장합니다.

 

이때 result에 있는 값은 json형태로 저장되어 있는데, 이걸 json 라이브러리를 이용해서 lotto 라는 변수에 저장 합니다.

 

그리고 나면 lotto에는 

{'totSellamnt': 4904274000,
 'returnValue': 'success',
 'drwNoDate': '2002-12-14',
 'firstWinamnt': 2002006800,
 'drwtNo6': 42,
 'drwtNo4': 25,
 'firstPrzwnerCo': 1,
 'drwtNo5': 32,
 'bnusNo': 2,
 'firstAccumamnt': 0,
 'drwNo': 2,
 'drwtNo2': 13,
 'drwtNo3': 21,
 'drwtNo1': 9}

이런식으로 값이 저장 되게 되겠죠.

 

이걸 이젠 각각 쪼개서 값만 ','를 이용해서 붙입니다.

 

그럼 데이터는 아래와 같이 생긴게 나올 겁니다.

{'2,2002-12-14,4904274000,0,1,2002006800,9,13,21,25,32,42,2'}

이런 데이터가 되는데,

 

이걸 이젠 pandas를 이용해서 표 형식으로 만들어 줍니다.

 

그럼 아래와 같이 되겠죠?

이런 형태로 데이터가 저장 되고,

 

이걸 마지막에 있는 

db.to_csv("lotto_number.csv",header=False , mode='a')

코드를 이용해서 lotto_number.csv 파일에 저장 하게 됩니다.

 

header=False 옵션은 header를 저장 하지 않겠다 하는 의미 이구요.

 

mode='a'는 기존 데이터에 이어 쓰겠다는거죠.

 

for 문으로 돌려서 하나하나 넣는것 이기에 이렇게 옵션을 주어야 합니다.

 

mode='w' 를 주시면 그냥 엎어씁니다. 기존것이 다 날아가는거죠.

 

이렇게하고 엑셀 파일을 열어 봅니다.

B열을 보시면 데이터가 들어가 있는데...

 

',' 콤마로 구분 되어 있긴 하지만... 한셀에 다 들어가 있는 모양 입니다.

 

이걸 분리하는걸 업무하면서 짬짬이 해봤는데.. 잘 안되네요...ㅠㅠ

 

혹시 아시는분 있으시면 가르침을 주시면 감사하겠습니다.

 

후처리는 어떻게 하느냐,

 

다 잘 아시겠지만, 간단합니다.

 

우선 데이터를 나눠줄껀데요, B열을 전체 선택 (B열 헤더 클릭) 하시고, 별표로 표시한 데이터 - 텍스트 나누기를 클릭 합니다.

 

그리고 나서는, 위 사진과 같이 차근차근 따라 해보세요.

 

구분기호는 지금 여기 데이터는 ',' 콤마로 되어 있지만, 혹시나 다른걸로 되어 있다면 그 기호를 아래 기타에 체크하시고 써주시면 됩니다.

 

이렇게 하고, 헤더 열을 추가해서 헤더를 써주면!! 짜잔@@

 

아래와 같은 데이터 형태를 만날 수 있습니다.

 

후처리 과정을 따로 안하고 파이썬에서 모두 되었으면 하는데..

 

아직 갈길이 멀게만 느껴집니다..

 

고수여러분들의 터치를 기대해봅니다! 

 

오늘 파이썬 공부는 여기까지!!

 

감사합니다!!