[TIL] 셀레니움으로 지도 크롤링하기

Lea·2020년 6월 25일
1

뭔가 잘 안 풀릴 때면, 자꾸 그거를 해결하고 나서 쓰려다보니 개발일지를 미루게 된다. 며칠 간 업데이트를 못했다는 건... 계속 막혀있었다는 소리😞

원래 기획에서는 구글맵 API를 통해 '비건 베이커리' 검색한 결과를 DB에 불러오려고 했었다. 하지만 구글맵에서 제공하는 예제 코드를 아무리 넣어도 API 에러가 떴고... 알고 보니 검색어를 통해 장소값을 불러오는건 Map API와는 별개로 Place API를 사용하게 되는데... 해당 API는 정책이 개정되면서 구글에서 무료로 제공해주지 않는다고 한다😥

1000건당 17달러 과금으로 엄청 비싼게 아니긴 한데, 개인 프로젝트를 하자고 결제를 하기엔 망설여져서 다른 방법을 찾기로 했다.

[고려한 대안]

1. 카카오맵이나 네이버지도 API에서 장소를 불러오기
이 대안을 제일 먼저 시도해보았지만, 카카오맵이랑 네이버지도는 API KEY를 받으려면 도메인을 제출해야 하고 승인될 때까지 며칠 걸린다고 해서... 또 어쩔 수 없이 패스하기로 했다.


2. 구글맵이나 카카오맵에서 '비건베이커리' 검색한 결과 창을 크롤링오기
셀레니움을 사용하면 지도에서 검색한 결과 창을 크롤링해올 수 있을 것 같다는 생각이 들었다. 크롤링한 장소를 하나하나 쪼개서 DB에 넣으려고 했는데, 결론적으로는 이래저래 잘 되지 않았다.

일단 아래처럼 카카오맵에서 '비건베이커리' 검색시키는 것까진 성공했는데, 그 이후 작업이 계속 오류가 나고 잘 안 풀려서 일단 접어두기로 했다. 나중에 셀레니움을 제대로 공부하고 나서 크롤링해봐야 겠다...

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import requests
from bs4 import BeautifulSoup
from time import sleep

driver = webdriver.Chrome(
    executable_path="choyeongkyung-sparta/bread_map/python_selenium_crawl/webdriver/chromedriver.exe")
url = "https://map.kakao.com/"

driver.get(url)
sleep(5)

# 지도에 뜨는 창 없애기
driver.find_element_by_css_selector('.layer_body').click()
# 검색창에 검색어 입력하기
search_box = driver.find_element_by_css_selector('#search\.keyword\.query')
search_box.send_keys("비건베이커리")
# 검색버튼 누르기
driver.find_element_by_id('search.keyword.submit').click()

결론적으로는 DB를... 어쩔 수 없이 수기로 CSV 파일로 만든 다음에 넣어줬다. 다행히 장소 DB가 엄청 많지는 않아서, 일일히 정리하는게 오래 걸리지는 않았지만... 100개만 되었다고 생각해도 아찔하다.

[오늘의 교훈]

API를 사용해서 무언가 시작할 때는, 꼭 기획 단계에서 정책을 제대로 읽어보자. 나중에 깨닫고 되돌아가기엔 이미 늦었을 수 있다😃

[다음에 해야 할 작업]

이용자가 제안하는 제보창 만들어주기!

profile
마케터로서 혼자 고민하고, 공부하고, 기록합니다.

1개의 댓글

comment-user-thumbnail
2021년 10월 14일

https://map.kakao.com/?q=비건베이커리
뒤에 파라미터로 검색 쿼리를 넣어도 검색이 됩니다! 프로젝트 잘 마무리 하시길 바랍니다

답글 달기