본문 바로가기

Data Science/Data Collection

[05. 공공데이터포털 API] 001. 도로명주소조회서비스

728x90

공공데이터포털 OPEN API 사용방법에 대해 알아보자.

 

 

 

공공데이터포털

국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Dataset)와 Open API로 제공하는 사이트입니다.

www.data.go.kr

 

위 사이트에 가입을 하고 데이터셋 – 오픈 API 메뉴로 들어가면 다음과 같이 API로 제공되는 데이터 리스트가 나온다.

 

[그림 5.1] 공공데이터포털 API

 

도로명주소조회서비스 API를 클릭하여 활용신청 버튼을 눌러 신청하자. 내용을 적당히 입력하여 신청 버튼을 누르면 된다. 자동승인이므로 바로 사용이 가능하다.

 

[그림 5.2] 도로명주소조회서비스 API

 

개발계정 상세보기에서 일반 인증키 발급 버튼을 누르면 아래와 같이 인증키가 발급된다.

 

[그림 5.3] 도로명주소조회서비스 API 인증키 발급

 

참고문서를 다운받아서 보면 사용방법에 대해 나와있다.

 

[그림 5.4] 도로명주소조회서비스 API 요청 메시지 명세

 

인증키를 넣고 url을 완성하여 조회해보면 다음과 같은 구조로 이루어져 있음을 알 수 있다.

 

[그림 5.5] 도로명주소조회서비스 API 응답구조

 

 

XML구조를 가공하는 파이썬 코드를 작성해보자.

 

import pandas as pd
import requests
from bs4 import BeautifulSoup

def get_address(api_key, search, word):
    url = 'http://openapi.epost.go.kr/postal/retrieveNewAdressAreaCdService/retrieveNewAdressAreaCdService/getNewAddressListAreaCd?ServiceKey=%s&searchSe=road&searchSe=%s&srchwrd=%s' % (api_key, search, word)

    response = requests.get(url)
    result = response.text
    soup = BeautifulSoup(result, 'lxml')
    success = soup.find('successyn').text

    data = []
    # 요청 성공여부 체크
    if success == 'Y':
        # 결과 값을 리스트에 담기
        for item in soup.find_all('newaddresslistareacd'):
            data.append({'zipno': item.find('zipno').text, 'lnmadres': item.find('lnmadres').text, 'rnadres': item.find('rnadres').text})

    if len(data) > 0:
        data = pd.DataFrame(data)
    else:
        data = pd.DataFrame()

    return data

if __name__ == '__main__':
    api_key = '*'
    search = 'road'
    word = '서초대로74길 11'

    address = get_address(api_key, search, word)
    print(address)


결과 값
                        lnmadres                                        rnadres                    zipno
0  서울특별시 서초구 서초대로74길 11 (서초동, 삼성전자빌딩)  서울특별시 서초구 서초동 1320-10 삼성전자빌딩  06620
728x90