Python에서 open api를 활용하여 데이터 수집 하는 방법을 알아보고, csv와 json으로 저장 하는 방법을 알아보자

사이트는 영화 진흥 위원회에서 제공하는 데이터를 받아올 예정이다

영화 진흥 위원회 바로가기

1. 회원가입

  • 위 주소로 접속 후 로그인 버튼을 눌러서 회원 가입을 한다
    sign-in

  • 키 발급 받기를 클릭 하고
    sign-in

  • 사용목적과 관리명을 임의로 정해준 뒤, 사용url은 http://localhost로 입력
    키 발급이 완료되고 발급된 키는 조금 있다가 사용할 예정이다 sign-in

  • 이제 OPEN API를 클릭!
    sign-in

  • 주간/주말 박스오피스 클릭 후 REST 방식을 확인
    요청 인터페이스를 보면 다른건 default값이 있지만, key와 targetDt는 지정해 주어야 한다
    sign-in

  • 내가 리턴 받을 데이터에 대한 설명이다. 조금 있다가 자세하게 살펴보자
    sign-in

  • Json형태로 응답 받을 예정이다
    sign-in

끝으로 마지막 사진의 json부분을 복사해서 사용할 예정이다. 아래 코드의 발급키 부분에 발급받은 키를 넣어주면 된다

2. 영화 데이터 받아오기

import requests
import json

# 발급 받은 키를 변수에 할당
key = "발급 키"

# 조회를 할 날짜를 yyyymmdd 형식으로 지정
date = 20231217

# 세선 생성
session = requests.Session()
# url 생성
url = f"http://www.kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key={key}&targetDt={date}"

res = session.get(url)
# 응답 받은 데이터를 json 형식으로 movies 변수에 할당
movies = json.loads(res.text)

# 결과 확인
print(movies)

결과를 확인 해보면 딕셔너리(json) 형태로 값을 리턴 받았을 것이다.

3. json 및 csv 형식으로 파일 저장

- csv

# csv로 저장될 파일 이름 지정
fname1 = f"boxOffice_{date}.csv"

# 저 데이터들 중에 순위, 영화 명, 개봉일, 누적 관객 수를 저장
# 필요한 데이터는 "응답 구조" 가 나와있는 부분에서 확인할 수 있다
with open(fname1, "w", encoding="utf-8") as f:
    f.write("순위,영화명,개봉일,누적관객\n")
    for v in movies["boxOfficeResult"]["dailyBoxOfficeList"]:
        f.write(f"{v['rank']},{v['movieNm']},{v['openDt']},{v['audiAcc']}\n")

# json으로 저장될 파일 이름 지정
fname2 = f"boxOffice_{date}.json"
with open(fname2, "w", encoding="utf-8") as f:
    json.dump(movies, f, ensure_ascii=False, indent=2)

- Json

import requests
import json

key = "발급 키"
date = 20231217

session = requests.Session()
url = f"http://www.kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key={key}&targetDt={date}"

res = session.get(url)
movies = json.loads(res.text)

fname1 = f"boxOffice_{date}.csv"

with open(fname1, "w", encoding="utf-8") as f:
    f.write("순위,영화명,개봉일,누적관객\n")
    for v in movies["boxOfficeResult"]["dailyBoxOfficeList"]:
        f.write(f"{v['rank']},{v['movieNm']},{v['openDt']},{v['audiAcc']}\n")


fname2 = f"boxOffice_{date}.json"

with open(fname2, "w", encoding="utf-8") as f:
    json.dump(movies, f, ensure_ascii=False, indent=2)

Leave a comment