인프런 커뮤니티 질문&답변

YeongHeon KIM님의 프로필 이미지
YeongHeon KIM

작성한 질문수

Next.js 시작하기(feat. 지도 서비스 개발)

매장 데이터 불러오기(feat. SWR)

Google api 매장 데이터

해결된 질문

작성

·

820

1

안녕하세요 현재 네이버맵 대신 구글맵 api를 사용중인데 아무리 찾아봐도 선생님 stores.json 값처럼 json데이터를 찾을수가없네요 ㅠㅠ 일단 현재 그냥 stores.json 선생님이 가지고있는데이터 사용중이긴한데 다른질문 답변보니 크롤링하셔서 데이터를 만드신거같은데 혹시 저의경우에는 방법이있을까요??

답변 1

0

박용주님의 프로필 이미지
박용주
지식공유자

안녕하세요ㅎㅎ 말씀하신대로 해외에서 google map을 사용하신다면, 네이버 지도 크롤링만으로는 부족할 것 같습니다. 그래서 구글맵(https://www.google.co.kr/maps)을 어떻게 크롤링하면 좋을지 생각해보았습니다!

간단한 코드를 아래에 적어보겠습니다. 아래 코드를 기초로 더 발전시켜서 원하시는 정보를 가져오면 좋을 것 같습니다.

1. 네이버 크롤링과 마찬가지로 selenium과 beatifulsoup4 같은 크롤링 라이브러리가 필요합니다.
(참고로 저는 selenium 3.0.0, beatifulsoup4 4.9.3 버전을 사용했습니다.)

# 필요한 selenium API import
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
# 필요한 beautifulSoup import
from bs4 import BeautifulSoup as bs
import time

def crawling():
    # selenium 세팅
    driver = webdriver.Chrome('./chromedriver')

    # google map 사이트 열기
    driver.get(f'https://www.google.co.kr/maps')
    time.sleep(5)

    # google map 검색 input에 '펠른'을 입력
    text_input = driver.find_element(By.ID, "searchboxinput")
    ActionChains(driver).send_keys_to_element(text_input, "펠른").perform()
    time.sleep(3)

    # enter key를 눌러서 매장 검색
    text_input.send_keys(Keys.RETURN)
    time.sleep(3)
     
    # beautifulsoup 세팅
    html = driver.page_source
    soup = bs(html, "html.parser")

    # 매장 이름에 해당하는 노드의 selector를 복사해서 붙여넣기(개발자 도구의 copy selector)
    name = soup.select_one('#QA0Szd > div > div > div.w6VYqd > div.bJzME.tTVLSc > div > div.e07Vkf.kA9KIf > div > div > div.TIHn2 > div > div.lMbq3e > div:nth-child(1) > h1').get_text() 
    print(name)
    
    # 위경도가 URL에 적혀있으므로 현재 url을 얻기
    get_url = driver.current_url
    print(str(get_url))

if __name__ == '__main__':
    crawling()

2. 코드를 실행하면

펠른 브루잉바
https://www.google.co.kr/maps/place/%ED%8E%A0%EB%A5%B8+%EB%B8%8C%EB%A3%A8%EC%9E%89%EB%B0%94/data=!3m1!4b1!4m6!3m5!1s0x357c99514d48a9f3:0xea60e8e4d8899ae4!8m2!3d37.5622152!4d126.9208748!16s%2Fg%2F11fslgppk2

가 출력되는 것을 확인할 수 있습니다.
3. 이처럼 매장 이름이나 위경도(위의 url을 parsing해서 얻을 수 있음) 등을 얻은 후 json 파일로 만들면 될 것 같습니다.

질문자님의 상황이나 수준을 정확히 모르기때문에 일단 이렇게 코드로 답변드렸습니다! 크롤링이 익숙하시다면 위의 방식처럼 구글맵을 크롤링하여 원하는 정보를 얻으면 될 것 같습니다. 코드 이해에 어려움이 있다면 selenium 문서 등을 살펴보시거나 댓글 남겨주시길 바랍니다😇

 

YeongHeon KIM님의 프로필 이미지
YeongHeon KIM

작성한 질문수

질문하기