본문 바로가기
웹 크롤링

웹 크롤링 - [Python]파이썬으로 카카오 맵 API 사용하기(3) - 도로명 주소를 지번 주소로 변환

by haries 2021. 5. 24.

오늘은 도로명 주소를 지번 주소로 변환하는 코드를 짜보려고 합니다.

제가 다니는 숭실대학교의 도로명 주소는 '서울특별시 동작구 상도로 369 숭실대학교'입니다. 지번주소는 '서울특별시 동작구 상도동 511'입니다. 간혹 도로명 주소가 아닌 지번 주소의 동, 읍, 면의 이름이 필요한 경우가 있습니다.

 

다행히 카카오 맵으로 도로명 주소를 지번 주소로, 지번 주소를 도로명 주소로 바꿀 수 있습니다. 이번에는 도로명 주소를 지번 주소로 바꾸는 코딩을 하겠습니다.

 

1.  도로명 주소를 지번 주소로

1) 도로명 주소 가져오기

저에게는 약 4400여개의 도로명 주소 목록이 있습니다. 여러분도 엑셀 파일에 저장된 데이터 중에서 도로명 주소 칼럼만 가져오시면 됩니다.

 

2) 카카오 맵 API로 도로명 주소 가져오기

locations = []
for addr in addrs:
    url = 'https://dapi.kakao.com/v2/local/search/address.json?query={}'.format(addr)
    headers = {
    ## 여러분의 카카오 API의 REST API키를 아래 예시와 같이 입력해주세요
    ## "Authorization": "KakaoAK REST API키 입력 gogo"}
    "Authorization": "KakaoAK f64acb1ae8c66asdfasefasfasdfadsf"}
    place = requests.get(url, headers = headers).json()['documents']
    locations.append(place)

 

3) 지번 주소 못 가져오는 행 날리기

도로명 주소를 카카오 맵에 입력했을 때, 전부 다 지번 주소로 변환해주지는 못합니다.(왜...?) 따라서 예외 처리를 잘 해줍시다

city = [] ## 시, 군
town = [] ## 동, 읍, 면
for i in range(len(locations)):
    
    try:
        city.append(locations[i][0].get('address').get('region_2depth_name'))
        town.append(locations[i][0].get('address').get('region_3depth_name'))
        
    except IndexError:
        print(i,'번째 주소 못가져옴', end ='')
        print()
        city.append('없음')
        town.append('없음')
    
    except AttributeError:
        city.append(locations[i][0].get('road_address').get('region_2depth_name'))
        town.append(locations[i][0].get('road_address').get('region_3depth_name'))

 

 

 

region_1depth_name은 특별시, 광역시, 도를 의미힙니다. 필요하신 분은 Try, except, except코드에 각각 추가하시면 됩니다.

region_2depth_name은 시, 군

region_2depth_name은 동, 읍, 면, 리를 나타냅니다.

 

4) 가져온 데이터 확인하기

city_town = np.array([city,town]).T
df_temp = pd.DataFrame(city_town, columns = ['region_2depth_name','region_3depth_name'])
df_temp.head()

이렇게 변환이 완료되었습니다. 카카오 API는 대략 800개의 도로명 주소를 지번 주소로 바꾸는데 1분 정도 걸리는 것 같습니다. 도로명 주소가 많을 경우 변환하는데 시간이 어느 정도 걸릴 수 있다는 점 감안하시면 됩니다.

댓글