🖥️ IT, 컴퓨터/🐍 Python

[Python] 카카오맵 즐겨찾기 목록 엑셀로 내보내기, 지오코딩, 지도 시각화 (with 파이썬 크롤링)

김 홍시 2023. 3. 7.
반응형

오늘은 카카오맵의 즐겨찾기 목록을 엑셀로 내보내는 과정을 포스팅해본다.

 

네이버지도의 즐겨찾기 목록을 내보내는 과정은 아래 포스팅 참고!

https://blog.naver.com/kimhongsi17/222663699179

 

네이버 지도 즐겨찾기 저장 데이터 활용하기 (경위도 좌표 구하기, 구글맵으로 옮기기, 엑셀로

오늘은 네이버 지도 즐겨찾기 (2000개 다 채운 사람 나야 나) 데이터를 활용하는 방법을 정리해보았어요. 1...

blog.naver.com

 

준비물

로그인된 카카오맵, 만들어놓은 즐겨찾기 목록

카카오맵에서 요소 복사해오기

 

Ctrl + Shift + I로 개발자 도구 켜기

 

좌측 상단의 "검사할 페이지 요소 선택" 버튼 클릭

즐겨찾기 가장 상단의 아이템 선택

 

 

그러면 <div class = "fatoriteInformationBundle"~ 부분이 선택됨

 

조금 더 위로 올라가서 "<div data-id = "list" class "FavoriteBodyList" ~ 부분을 선택하면

이렇게 전체가 파랗게 처리된다.

 

(이렇게 즐겨찾기 목록이 저장되어있구나 확인 가능)

 

 

그 부분에서 우클릭 > 복사 > 요소복사

 

하여 

이 부분을 파이썬에 넣을 예정

 

파이썬으로 원하는 부분만 찾아 정리하기

(전체 코드는 가장 아래에)

from bs4 import BeautifulSoup

로 뷰티풀스프 import

 

page = """



"""

"""와 """ 사이에 방금 요소 복사해둔 내용 붙여넣기

 

 

page = BeautifulSoup(page, "html.parser")
print(page)

뷰티풀스프로 요소 복사한 내용을 parse해주기

 

 

이제 여기부터가 조금 어려웠음

 

내가 원하는 것은 장소명과 주소인데

장소명이 들어있는 곳은 <a class = "link_txt" ~ 부분이고

주소가 들어있는 곳은 <span class = "desc_region"> ~ 부분이다.

 

따라서 코드에

stars = page.findAll("a","link_txt" )
addresses =  page.findAll("span","desc_region" )

를 넣는다. 

stars는 장소명, addresses는 주소이다.

 

각각 쳐보면 이렇게 결과가 나온다.

대괄호 안에 있어 리스트의 형태로 저장된 것을 알 수 있다.

 

리스트이기 때문에 인덱스 숫자를 넣어 아래와 같이 첫번째, 두번째 요소를 출력해볼 수 있다.

 

이제 쓸데 없는 부분은 지워야 한다. 

text.split을 이용해 > 부분을 없애면 아래와 같이 장소명만 나온다.

그런데 대괄호가 붙어있으니 이것도 없애야 한다. 이는 [0]을 붙여 리스트의 첫번째 내용을 불러오는 것으로 해결 가능하다.

star_result와 star라는 이름으로 빈 리스트를 만들고

아래처럼 반복문으로 stars(장소명)의 개수만큼 반복되도록 했다.

그리고 반복된 후 append를 통해 빈 리스트에 하나씩 결과물을 넣어주도록 했다.

그러면 star_list는 아래와 같이 나온다. 

마찬가지로 주소에 대해서도 이렇게 써준다.

현재는 리스트의 형태인데 판다스를 이용해 표의 형태로 만들어야 한다.

pd.DataFrame을 이용해 각 리스트를 표로 만들었다.

그런 후 concat을 이용해 두 열을 합쳐주었다.

그 후 이렇게 csv 파일을 만들어낸다. 인코딩을 넣지 않으면 깨지니 주의한다.

 

전체코드

from urllib.request import Request,urlopen
from bs4 import BeautifulSoup
import pandas as pd

page = """

"""
page = BeautifulSoup(page, "html.parser")
stars = page.findAll("a","link_txt" )
addresses =  page.findAll("span","desc_region" )

star_result = []
star = []
for i in range(len(stars)):
    star = stars[i].text.split(">")[0]
    star_result.append(star)

address_result = []
address = []
for i in range(len(addresses)):
    address  = addresses[i].text.split(">")[0]
    address_result.append(address)
    
df1 = pd.DataFrame({'star_result':star_result})
df2 = pd.DataFrame({'address_result':address_result})

df = pd.concat([df1, df2],axis = 0 or 1)

df.to_csv("myfavorites.csv", encoding = "CP949")

 

 

 

구글맵 API로 지오코딩하기

 

이제 이 주소를 가지고 XY 좌표(경위도 좌표)를 구해보자.

 

https://kimhongsi.tistory.com/entry/Python-%EA%B5%AC%EA%B8%80%EB%A7%B5-API%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%B4-%EC%A7%80%EC%98%A4%EC%BD%94%EB%94%A9%ED%95%98%EA%B8%B0-%EC%A3%BC%EC%86%8C%EB%A5%BC-%EA%B2%BD%EC%9C%84%EB%8F%84%EB%A1%9C-%EB%B3%80%ED%99%98

 

[Python] 구글맵 API를 사용해 지오코딩하기 (주소를 경위도로 변환)

오늘은 예전에 업로드한 R로 지오코딩하는 글에 이어, Python으로 지오코딩 하는 방법을 정리하려 한다. https://kimhongsi.tistory.com/entry/R-%EC%B9%B4%EC%B9%B4%EC%98%A4%EB%A7%B5-API%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%B4-%EC%

kimhongsi.tistory.com

방법은 위의 포스팅 참고!

 

import pandas as pd
import numpy as np
from urllib.request import urlopen, Request 
from bs4 import BeautifulSoup
from urllib.parse import quote

from tqdm.notebook import tqdm
data = []
for ADDRESS in tqdm(df["address_result"]):
    API_KEY = "당신의_key"
    API_TYPE = "xml"
    url = f"https://maps.googleapis.com/maps/api/geocode/{API_TYPE}?address={quote(ADDRESS)}&key={API_KEY}"
    req = Request(url)
    page = urlopen(req)
    page = BeautifulSoup(page, "html.parser")
    page.findAll("lat")
    lat = page.findAll("lat")[0].text
    lng = page.findAll("lng")[0].text
    result = [ADDRESS, lat, lng]
    data.append(result)
myfavorites_XY = pd.DataFrame(data, columns = ["주소", "위도", "경도"])

myfavorites_XY.to_csv("myfavorites_XY.csv", encoding = "CP949")

 

그러면 이렇게 위도와 경도가 만들어진다.

 

ArcGIS에서 지도로 시각화하기

 

https://kimhongsi.tistory.com/entry/ArcMap-%EA%B2%BD%EC%9C%84%EB%8F%84-%EC%A2%8C%ED%91%9C-%EA%B0%80%EC%A7%80%EA%B3%A0-%EC%A7%80%EB%8F%84%EC%97%90-%EC%8B%9C%EA%B0%81%ED%99%94%ED%95%98%EA%B8%B0-%EC%A7%80%EC%98%A4%EC%BD%94%EB%94%A9

 

[ArcMap] 경위도 좌표 가지고 지도에 시각화하기

[ArcMap] Visualize on a map with longitude and latitude coordinates (geocoding) 준비물 ArcMap 아래와 같이 경위도 좌표가 입력된 csv 파일 (아래의 표에서 X : 경도, Y:위도) add data 버튼 클릭 원하는 csv 파일 선택 그럼

kimhongsi.tistory.com

를 수행한다.

시각화까지 끝!

반응형

댓글