본문 바로가기
Python/데이터 다루기

오픈 API를 활용한 공공데이터 불러오기(데이터 포맷: json) with Python

by 찐남 2022. 1. 29.

지난 포스팅에서는 R을 활용한 공공데이터 불러오기를 알아보았는데요.

혹시라도 R을 활용한 방법이 궁금하신 분들은 아래 2개의 포스팅 글을 참고하시면 됩니다.

 

 

오픈 API를 활용한 공공데이터 불러오기(데이터 포맷: xml)

공공데이터 홈페이지 가입 및 데이터 추출 준비 정부가 개방한 공공데이터를 오픈 API를 활용해서 추출하는 방법에 대해서 설명드릴게요. 우선, 공공데이터 홈페이지에 접속해 볼게요. 공공데이

zzinnam.tistory.com

 

 

오픈 API를 활용한 공공데이터 불러오기(데이터 포맷: json)

오픈 API를 활용한 공공데이터 불러오기(데이터 포맷: json)에 이어서 json 형태의 데이터 포맷을 불러오는 R 프로그래밍을 알아보도록 할게요. 공공데이터를 활용하기 위한 준비 단계는 여기를 참

zzinnam.tistory.com

 

 

 


 

이번에는 파이썬을 이용해서 공공데이터를 추출해 보도록 할게요.

추출하고자 하는 데이터는 R에서 활용한 데이터와 동일한 것으로 실습해 볼게요.

 

 

데이터 형식을 확인하기 위한 샘플데이터 확인하기

 

데이터 형식을 확인하기 위한 샘플데이터 확인하기는 위의 게시글을 참고하시면 돼요.

 

미리 보기 버튼을 클릭하시면,

아래와 같은 샘플데이터를 볼 수 있어요. 

이를 참고해서 원하는 데이터를 추출해 보도록 할게요.

 

 

 

 


 

데이터 추출을 위한 파이썬 code(with  패키지)

# 데이터 호출을 위해 필요한 라이브러리 import
from urllib.parse import urlencode, unquote
import requests
import json
import pandas as pd
import math
import numpy as np


# url 입력
url = "http://apis.data.go.kr/1160100/service/GetFnCoBasiInfoService/getFnCoOutl"


# queryString 입력 
queryString = "?" + urlencode(
    { 
     "serviceKey": unquote("*****"),  # 공공데이터 사이트 가입 시 받은 본인의 서비스 키 입력
     "pageNo": 1,
     "numOfRows": "10",
     "resultType": "json",  
     "basDt": "20200408"
    }
)


# 최종 요청 url 생성
queryURL = url + queryString


# API 호출
response = requests.get(queryURL)
status_code = 200으로 정상적으로 호출됨을 확인


# 딕셔너리 형태로 변환
r_dict = json.loads(response.text) # 우리가 필요한 데이터 부문만 가져와 저장


# 오픈 API 호출 결과 데이터의 개수 확인 및 저장
numOfRows = r_dict["response"]["body"]["numOfRows"]


# 전체 데이터의 개수 확인 및 저장
totCnt = r_dict["response"]["body"]["totalCount"]


# 총 오픈 API 호출 횟수 계산 및 저장
loopCount = math.ceil(totCnt/numOfRows)


# 전체 데이터를 저장할 객체 선언
finalTotalData = pd.DataFrame()


# 오픈 API 호출을 총 오픈 API 호출 횟수만큼 반복 실행
for i in np.arange(loopCount) :
    
    # queryString 입력 
    queryString = "?" + urlencode(
        { 
            "serviceKey": unquote("*****"),
            "pageNo": i+1,
            "numOfRows": "10",
            "resultType": "json",  
            "basDt": "20200408"
        }
    )


    # 최종 요청 url 생성
    queryURL = url + queryString


    # API 호출
    response = requests.get(queryURL)


    # 딕셔너리 형태로 변환
    r_dict = json.loads(response.text)
    
  
    # 데이터 프레임만 선택하여 doc 객체에 저장 
    doc = r_dict["response"]["body"]["items"]["item"]
    
  
    # 추출한 데이터를 전체 데이터를 저장할 변수에 누적 저장
    finalTotalData = pd.concat([finalTotalData, pd.DataFrame(doc)], axis = 0, ignore_index = True)


# CSV 파일로 저장하기
finalTotalData.to_csv("금융회사기업개요조회(json)_python.csv", index = False, encoding = "utf-8-sig")

 

위에 링크되어 있는 이전 포스트(R 활용) 내용의 결과와 비교해 보면,

동일한 데이터가 추출되었음을 확인할 수 있어요!

 

이상으로 오픈 API를 활용한 공공데이터를 Python을 활용해서 추출하는 방법에 대해서 알아보았습니다.

 

 

 

반응형

댓글