학원/실습

[실습] 식신로드 서울지역 만점식당 크롤링(3) - 지도에 나타내기

SILVERMIRROR 2020. 6. 10. 17:53

step

1. 카카오 개발자 가입

2. REST API key 발급받기

3. 주소를 넘기면 경도, 위도를 알려주는 getLatLng(address)함수 만들기

4. diner 리스트에 경도, 위도 추가하기

5. 지도에 표시

 

3. getLatLng(address) 함수

REST API key에는 2에서 발급받은 개인 키를 넣으면 된다.

kakaoAK와 REST API key 사이에 있는 공백이 중요하다.

 

 

경도와 위도를 가져오는 식을 이해하기 위해

address에 서울시청주소(서울특별시 중구 명동 세종대로 110)로 json_data를 받으면 

 

 

text로 오는 json 데이터는 알아보기 힘드므로 json포맷터를 이용해서 보기 쉽게 만든다.

 

json_data의 타입은 dict였고 키가 'documents'이고 value값(list)이다. > json_data['documents']

x,y값을 가져오기 위해 value값의 0번째인 list를 가져오기 위해 > json_data['documents'][0]

json_data['documents'][0]의 타입은 dict이므로 x(경도), y(위도)값을 가져오려면

 > json_data['documents'][0]['x'],  json_data['documents'][0]['y']

 

 

4. diner 리스트에 경도, 위도 추가하기

앞에서 만든 getLatLng(address)함수에 diner_address를 넘기는 도중 Error가 발생했다.

diner_address를 다시 돌려서 찾아본 결과

뒤에붙은 '로얄빌딩 지하 1층' 때문에 오류가 나는 것을 확인했다.

17번째 주소를 찾기 위해 변수 diner_len을 추가해서 주소일때마다 하나씩 증가시켰다.

그런 다음 17번째 주소를 만나면 공백으로 split해서 오류나는 부분을 뺀 나머지만 저장했다.

오류 없이 모두 잘 나오는 걸 print해서 확인하고

diner_latlng list에 추가했다.

 

5. 지도에 표시하기

pip install folium

지도를 그리는데 필요한 folium 패키지를 다운받아서 import해 준다

 

folium에 Map을 이용해 지도에 표시해준다.

address[3]은 y,x 값을 튜플로 넣어주는 곳인데 내가 만든 diner list에 경도 위도를 튜플로 저장해놨기때문에 불러왔고,

popup=은 아이콘을 눌렀을때 나오는 text를 넣어주는 곳인데 식당이름이 나오게 저장된 값을 불러왔다.

지도에 쓰이는 아이콘을 부트스트랩 아이콘 기준이므로 원하는 icon을 검색해서 icon=''에 넣어주면 모양이 변한다.