상세 컨텐츠

본문 제목

역대 로또 데이터 크롤링 feat. 따라하기

4차

by 木隱 2020. 2. 28. 17:45

본문

https://stricky.tistory.com/115

 

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

안녕하세요. 1일 1공부를 목표로 파이썬을 스터디 하고 있는 8년차 DB엔지니어 sTricky 입니다. 사실 몇일 비었는데.. 쉴려고 쉰건 아니고, 하고싶은 주제를 목표하는만큼 끌어 올리는데 실패해서 늦어졌습니다...

stricky.tistory.com

멋진 제목이다.

파이썬으로 역대 로또 당첨번호....

단번에 끌려서 검토하고, 따라해보고, 조금 손도 봐봤다.


from google.colab import drive
drive.mount('/gdrive', force_remount=True)

첫번째는 구글 드라이브를 활용하기 위해 마운트를 하는 코드를 넣었다.

import requests
import pandas as pd 
import json

원래 저자분은

from urllib.request import urlopen

을 사용하셨지만, 나는 간단하게 requests 만 사용하였다. (아는게 그거 뿐이라서)

df_all=pd.DataFrame()
for i in range(1,1000):
  url='http://www.nlotto.co.kr/common.do?method=getLottoNumber&drwNo='+str(i)
  res=requests.get(url)
  data=res.json()
  df_add=pd.DataFrame(data, index = [str(i)])
  df_all=df_all.append(df_add)

우선 df_all로 모든 데이터를 모을 데이터프레임을 생성하였다.

원래 저자분과 마찬가지로 range를 1000으로 설정하여, for문을 구성하였다.

url도 같은 것을 사용하였다.

resquests.get으로 자료를 받아서

json()으로 변형하였다.

평소에는 df=pd.DataFrame(data)로 딕셔너리를 부르면 됐었는데, 

에러가 난다.

ValueError: If using all scalar values, you must pass an index

인덱스가 없어서 나는 에러란다. 아무래도 딕셔너리안에 데이터가 한 세트 뿐이다보니 인덱스로 잡을수가 없는거 같다. 

구글 검색으로 index=[0]을 넣으면 된다는 글을 보고 해봤더니 에러가 안난다.

그래서 조금 변형해서, index=[str(i)]를 첨가하였다.

즉, 회차가 인덱스가 되도록 했다.

df_all.to_csv("/gdrive/My Drive/Colab Notebooks/lotto/winning.csv")
df_all.head()

이후 데이터프레임을 csv로 저장하였다. 

별 무리없이 진행되었다.

 

원래 저자님이 겪으셨던 쉼표 문제는 없었다.

다만, 숫자를 보기 좋게 처리하는 과정은 여전하다.


좋은 포스팅을 해주신 nice sTricky 님께 좋은 자료 감사하다는 말씀을 드리며 포스팅을 마친다. 

관련글 더보기