빅데이터 국비 교육

[아이티윌 빅데이터 52기] LAB 12 | 웹 데이터 수집하기 | 영화 진흥 위원회 API | 박스 오피스 데이터 수집

datahaseo 2025. 11. 5. 10:58

#모든 자료 저작권은 아이티윌 이광호 강사님

[아이티윌 빅데이터 52기] LAB 12 | 웹 데이터 수집하기  | 박스 오피스 데이터 수집

 

 

 

웹 데이터 수집 코드 작성 전 사전 준비

1. 영화 진흥 위원해 Open api 사이트 접속

우선 데이터 수집할 방식은 OPEN API를 활용하는 것

Open API 는 다른 서비스의 데이터를 주고 받게 해주는 표준화된 창고로, 외부 데이터를 가져오는 통로

 

 

 

 

 

 

 

 

 

 

 

 2. OPEN API 접근을 위한 키 발급받기

 

 

 

 

 

3. OPEN APU 설명서를 확인

 

 

 

 

 

 

기본 요청 URL 로 확인시에는 키값이 없어 아무 JSON 데이터도 없는 형태

(GET 요청 방식이기 때문에 웹 브라우저에서 데이터 확인 조회가 가능하다)

http://www.kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json

 

 

 

 

 

 

필수 요청값인 key 와 targetDt 를 url 에 추가하여 확인해보면 아래와 같이 원하는 데이터를 확인할 수 있다

(웹 브라우저에서도 확인했고, thunder client 프로그램으로도 확인이 가능하다)

 

 

 

 

이제 본격적으로 이 형태를 파이썬을 활용해서 요청하고 데이터 프레임으로 만들어보자

 

 

 

 


웹 데이터 수집 코드 작성 

STEP 1. 라이브러리 참조하기

STEP 2. 요청 정보 확인

STEP 3. 웹 데이터 요청하기

STEP 4. 응답 결과 JSON 으로 변환하여 구조 확인

STEP 5.응답 결과 데이터 프레임으로 구성

 

 

================================================

STEP 1. 라이브러리 참조하기

import requests
import datetime as dt    #뒤에서 targetDt 데이터 형식 만들기 위해 필요
from pandas import DataFrame

 

 

STEP 2. 요청 정보 확인

API 명세를 확인하여 요청에 필요한 정보를 변수로 구성한다

주요 필수 요청 값은 key와 targetDt 를 yyyymmdd 형태로 가져오는 것 이었다.
API_KEY 변수를 만들어 발급받은 키를 넣어주고,
targetDt 는 datetime dt 모듈에서 시간 계산용 객체인 timedelta를 활용해 오늘 날짜에서 day 1개를 빼준다.
그 다음 해당 객체를 strftime 으로 형태를 맞춰준다

# API명세를 확인하여 요청에 필요한 정보를 변수로 구성한다


#요청 URL
url = "http://www.kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json"



#발급 받은 api 키
API_KEY ="생략"



#targetDt 를 위해 당일 외의 날짜 가져오기
date =dt.datetime.now()-dt.timedelta(days=1)
yesterday=date.strftime("%Y%m%d")
yesterday

 

STEP 3. 웹 데이터 요청하기

요청 url 을 완성하였으므로 웹 브라우저에 존재하는 데이터를 가져오기 위한 준비를 한다
웹 데이터에 get 을 통해 요청하고 응답 처리 200 을 확인한다

이때 위에서 준비한 쿼리 스트링 값은 params={"key":API_KEY,"targetDt":yesterday} 형태로 작성할 수 있다

#세션 객체 생성
with requests.Session() as session:

  #세션 객체에 웹 브라우저 정보 (UserAgent) 주입 (웹서버가 파이썬 프로그램을 정상적인 웹 브라우저로 여기도록)
  session.headers.update({"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"
                          })
  

  r=session.get(url,params={"key":API_KEY,"targetDt":yesterday})    
  
  #HTTP 상태값이 200이 아닌 경우는 강제로 에러를 발생시켜 코드의 진행을 중단시킴
  if r.status_code !=200:
    msg ="[%d Error] %s 에러가 발생함" % (r.status_code,r.reason)
    raise Exception (msg)


print(r)

 

 

STEP 4. 응답 결과 JSON 으로 변환하여 구조 확인

응답 결과를 확인하면 다음과 같다

mydict =r.json()
print(mydict)

 

 

STEP 5.응답 결과 데이터 프레임으로 구성

확인하기 어려운 데이터를 중첩 구조에서 필요한 데이터 부분만 가져와 데이터 프레임으로 변환해준다

df = DataFrame(mydict["boxOfficeResult"]["dailyBoxOfficeList"])
df