본문 바로가기
웹 크롤링

웹 크롤링 - [Python]파이썬으로 카카오 맵 API 사용하기(4) - 반경을 이용한 검색

by haries 2021. 5. 24.

오늘은 카카오맵 API로 어느 지점에서 반경 몇 m이내 원하는 매장(게스트하우스, 약국, 마트, 호텔, 카페, 관광시설 등등)의 개수를 검색해 보도록 하겠습니다.

 

1.  코딩 전 확인 사항

일단 짚고 넘어가야할 것을 알려드리겠습니다.

1) 어느 지점은 위, 경도 좌표로 할 수 있습니다. 원하는 지점의 위, 경도 좌표를 알고 싶다면 구글맵을 켜서, 그 지점을 찍으면 확인이 가능합니다.

 

2) 반경 설정은 20m에서 20km까지 가능합니다.

 

3) 우리는 총 개수만 알 수 있습니다. 예를 들어 나의 집 반경 20km이내의 CU편의점을 검색한다고 해봅시다. 구글맵으로 내 집 좌표를 확인하고, 검색어를 CU편의점으로 해서 카카오 API를 돌렸을 때 총 개수가 46개 이상을 넘어간다면, 46번부터 CU편의점의 구체적인 정보(지점이름, 좌표, 전화번호, 홈페이지 등등)을 얻을 수 없습니다. 카카오가 딱 45개 데이터만 가져올 수 있도록 만들어놓았습니다... 왜 그런지는 모르겠습니다. 하지만 총 CU편의점의 개수는 API가 알려줍니다.

 

4) 만약 우리가 제주 중문 해수욕장 주변 20km이내의 박물관의 개수를 알고 싶을 때를 가정해봅시다. 중문 해수욕장의 좌표를 알아내고, 검색어에 박물관을 입력하고, 반경 20000m를 입력하고 검색하면 박물관 개수가 나올까요???? 아닙니다. 카카오 맵을 켜서 검색창에 박물관을 검색하면 나오는 결과는 박물관 뿐만 아니라 박물관 주차장, 박물관 관광안내소 같은 부수 검색물들이 같이 따라옵니다. 우리는 박물관 개수만 알고 싶기 때문에, 주차장 같은 결과 값을 나오지 않게 막아야 합니다. 카카오맵 API에는 다행히 카테고리 설정을 할 수 있습니다. 카테고리 설정을 박물관으로 설정 해주고 검색을 한다면 정말 박물관만 나옵니다.(아쉽게도 박물관이라는 카테고리는 없고, 관광명소 카테고리는 있습니다.) 따라서 반드시 카테고리 설정을 마치고 검색을 해야 합니다. 카테고리 목록은 다음과 같습니다.

2. 검색해보기

검색은 여러분의 자유지만, 저는 제 주변 반경 10km이내의 스타벅스의 개수를 알아내겠습니다.

url = 'https://dapi.kakao.com/v2/local/search/keyword.json'

#원하는 검색어을 스타벅스 자리에, 경도는 x에, 위도는 y에, 반경은 10000에, 카테고리는 위의 표를 보고 해당되는 카테고리를 적어주세요
params = {'query' : '스타벅스', 'x' : longitude, 'y' : latitude, 'radius' : 10000, 'category_group_code' : 'CE7'}

## 본인의 카카오 맵 API의 REST API키를 바로 아래 한글로 된 코드를 지우고 입력해주세요
headers = {"Authorization": "KakaoAK ㅁㄴㅇㄹㅁㄴㅇㄹㅁㄴㅇㄹㅁㄴㅇㄹ"}

total = requests.get(url, params=params, headers=headers).json()['meta']['total_count']

##places는 검색이 잘 되었는지 체크하는 용도로 확인해주시면 됩니다. 다시 말씀드리지만 places에는 45개 데이터가 한계입니다...
## 페이지 수를 늘려도, 한 페이지 안에서 보여줄 수 있는 한계치를 아무리 높혀도 45개 이상 안 보여 줍니다. 저는 페이지 설정은 보시다시피 하지는 않았습니다. 
places = requests.get(url, params=params, headers=headers).json()['documents']

## 원하는 개수는 total변수 안에 있습니다.

 

코드 예시

import pandas as pd
import numpy as np
import requests

url = 'https://dapi.kakao.com/v2/local/search/keyword.json' #원하는 검색어을 스타벅스 자리에, 경도는 x에, 위도는 y에, 반경은 10000에, 카테고리는 위의 표를 보고 해당되는 카테고리를 적어주세요 
params = {'query' : '스타벅스', 'x' : 126.94, 'y' : 37.411, 'radius' : 20000, 'category_group_code' : 'CE7'} ## 본인의 카카오 맵 API의 REST API키를 바로 아래 한글로 된 코드를 지우고 입력해주세요 
headers = {"Authorization": "KakaoAK 본인 키 입력해주세요(아마 rest API 키인 것 같네요"} 
total = requests.get(url, params=params, headers=headers).json()['meta']['total_count'] ##places는 검색이 잘 되었는지 체크하는 용도로 확인해주시면 됩니다. 다시 말씀드리지만 places에는 45개 데이터가 한계입니다... ## 페이지 수를 늘려도, 한 페이지 안에서 보여줄 수 있는 한계치를 아무리 높혀도 45개 이상 안 보여 줍니다. 저는 페이지 설정은 보시다시피 하지는 않았습니다. 
places = requests.get(url, params=params, headers=headers).json()['documents'] ## 원하는 개수는 total변수 안에 있습니다.

total

댓글