해결된 질문
작성
·
820
답변 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 문서 등을 살펴보시거나 댓글 남겨주시길 바랍니다😇