#모든 자료 저작권은 아이티윌 이광호 강사님
[아이티윌 빅데이터 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

'빅데이터 국비 교육' 카테고리의 다른 글
| [아이티윌 빅데이터 52기] LAB 12 | 웹 데이터 수집하기 | 카카오 개발자 API | 책 검색 결과 수집 2 | 반복문으로 전체 데이터 가져오기 (0) | 2025.11.05 |
|---|---|
| [아이티윌 빅데이터 52기] LAB 12 | 웹 데이터 수집하기 | 카카오 개발자 API | 책 검색 결과 수집 (0) | 2025.11.05 |
| [아이티윌 빅데이터 52기] LAB 11 | 웹 데이터 수집하기 1 (0) | 2025.11.04 |
| [아이티윌 빅데이터 52기] LAB 10 | Python Basic | Flask 웹 프로그래밍 (0) | 2025.11.03 |
| [아이티윌 빅데이터 52기] Python Basic | 데이터 베이스에 CSV 파일 넣기 | 파이썬에서 SQL 로 데이터 추출하기 (0) | 2025.10.31 |