공공데이터포털에서는 기상, 교통, 금융, 부동산 등 다양한 분야의 유용한 데이터를 무료로 개방하고 있다.
이 데이터를 활용하면 개인 프로젝트나 업무 자동화 프로그램에 필요한 정보를 손쉽게 가져올 수 있다.
파이썬은 간단한 문법과 강력한 라이브러리를 제공하여 공공데이터 API를 연동하기에 가장 적합한 언어다.
이번 글에서는 공공데이터 API를 파이썬으로 연동하는 전 과정과 핵심 주의사항을 명확하게 정리한다.
파이썬 공공데이터 API 연동을 위한 사전 준비
공공데이터포털 회원가입 및 인증키 발급받기
API를 호출하기 위해서는 가장 먼저 공공데이터포털에 회원가입을 완료해야 한다.
원하는 공공데이터 상세 페이지로 이동한 뒤 '활용신청' 버튼을 클릭하면 즉시 또는 승인 후 인증키가 발급된다.
이때 발급되는 일반 인증키는 URL 인코딩(Encoding) 버전과 디코딩(Decoding) 버전이 있으니 구분해서 보관해야 한다.
요청 메시지와 서비스 URL 확인하기
API 상세 설명서(미리보기 또는 가이드 문서)를 통해 요청 주소와 필수 파라미터 구조를 파악해야 한다.
대부분의 공공데이터 API는 기본 서비스 URL 뒤에 인증키, 페이지 번호, 한 페이지 결과 수 등의 파라미터를 붙여 요청한다.
문서에 명시된 샘플 코드를 가볍게 눈여겨보면 전체적인 구조를 이해하는 데 큰 도움이 된다.
파이썬 코드로 API 호출하고 데이터 가져오기
requests 라이브러리를 활용한 API 요청
파이썬에서 HTTP 요청을 보낼 때 가장 널리 쓰이는 도구는 requests 라이브러리다.
설치가 되어 있지 않다면 터미널에 pip install requests 명령어를 입력해 미리 설치해 둔다.
요청 URL과 발급받은 인증키, 파라미터를 딕셔너리 형태로 묶어서 requests.get() 함수에 전달하면 데이터를 간단히 받아올 수 있다.
import requests
url = "공공데이터_서비스_URL"
params = {
"serviceKey": "발급받은_인증키",
"pageNo": "1",
"numOfRows": "10",
"dataType": "JSON"
}
response = requests.get(url, params=params)
print(response.status_code)
print(response.text)
응답 데이터 파싱 및 활용하기
API 서버가 반환한 응답 데이터는 주로 JSON 또는 XML 형식으로 구성된다.
파이썬에서는 response.json() 메서드를 사용해 JSON 데이터를 딕셔너리 객체로 곧바로 변환할 수 있다.
변환된 딕셔너리에서 원하는 데이터 경로를 찾아 반복문을 돌리면 필요한 항목만 추출하여 가공할 수 있다.
import requests
url = "공공데이터_서비스_URL"
params = {
"serviceKey": "발급받은_인증키",
"pageNo": "1",
"numOfRows": "10",
"dataType": "JSON"
}
response = requests.get(url, params=params)
if response.status_code == 200:
data = response.json()
# 필요한 데이터 리프 구조 접근 예시
items = data.get("response", {}).get("body", {}).get("items", {}).get("item", [])
for item in items:
print(item)
else:
print("데이터를 불러오지 못했습니다.")
파이썬 연동 시 자주 발생하는 오류와 해결 팁
인증키 오류(SERVICE_KEY_IS_NOT_REGISTERED_ERROR) 해결하기
가장 흔하게 발생하는 실수는 인증키가 잘못되었거나 인코딩/디코딩 문제가 발생할 때다.
공공데이터포털에서 발급해 주는 키는 이미 인코딩된 상태인 경우가 많아 requests 라이브러리를 쓸 때는 디코딩된 키를 사용하는 것이 안전하다.
만약 계속 인증 오류가 난다면 파라미터 딕셔너리 대신 서비스 URL 문자열에 키를 직접 조합해 보는 방법도 유효하다.
XML과 JSON 형식의 차이점 이해하기
일부 공공데이터 API는 기본 응답 포맷이 XML로 설정되어 있어 파이썬에서 다루기 까다로울 수 있다.
요청 파라미터에 dataType=JSON 옵션을 추가하면 다루기 쉬운 JSON 형태로 응답을 유도할 수 있다.
만약 API가 XML만 지원한다면 파이썬 내장 라이브러리인 xml.etree.ElementTree나 BeautifulSoup을 활용해 파싱해야 한다.
자주 묻는 질문
Q1. 인증키를 정상적으로 입력했는데도 계속 에러가 발생합니다. 왜 그럴까요?
A1. 인증키가 시스템에 반영되기까지 최대 1시간 정도의 시간이 소요될 수 있다. 또한 requests 라이브러리를 사용할 때 인증키가 자동으로 재인코딩되면서 충돌이 나기도 하므로, unquoted 상태의 디코딩된 키를 사용하고 있는지 확인하는 것이 좋다.
Q2. 공공데이터 API 호출 횟수에 제한이 있나요?
A2. 대부분의 공공데이터 API는 트래픽 보호를 위해 하루 호출 건수(일일 트래픽 제한)를 정해두고 있다. 활용신청 시 마이페이지에서 트래픽 제한 수치를 확인할 수 있으며, 대량의 데이터가 필요하다면 개발 계정 신청 시 트래픽을 넉넉하게 신청해야 한다.
Q3. XML 형식으로 응답이 오는 데이터는 어떻게 처리해야 하나요?
A3. 요청 파라미터에 JSON 변환 옵션이 없다면 응답받은 텍스트를 XML 파서로 읽어와야 한다. 파이썬의 xml.etree.ElementTree를 이용해 루트 노드부터 태그 이름을 찾아가며 데이터를 추출하면 안전하게 파싱할 수 있다.
0 댓글