티스토리 뷰


토이 프로젝트를 위해서 구글맵으로 크롤링을 하려는데 크게 세 가지 문제가 발생했다. 
셀레니움을 사용하는 예제를 참고해봤지만 대부분 예전 글이라 수정할 수 없었다. 

1. 코랩이 크롬 드라이버의 경로를 인식하지 못함.
드라이버 실행파일을 로컬에도 놔둬 보고 코랩에도 올려보았으나 해결되지 않음. 
2. 창이 안 뜸. 
셀레니움 다운그레이드로 1을 해결해도 
3. css 식별자 탐색 메소드가 만료되었다는 메시지가 뜸. 

DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead

 

문제상황 크롬 드라이버의 설치 경로를 찾지 못함, 크롬 창이 열리지 않음, .find_element_by_css_selector 메소드만료 메시지 
시도한 것 셀레니움 다운그레이드
이렇게 해결 headless 옵션 설정, selenium webdriver 라이브러리 설치(By 포함)

1. 구글 코랩에서 셀레니움을 사용할 때의 기본 세팅 

먼저 크롬 드라이버의 경로를 설정하고 셀레니움을 설치한다. 

#chrome driver의 경로를 설정 
!apt-get update
!apt install chromium-chromedriver
!cp /usr/lib/chromium-broser/chromedrive /usr/bin

#selenium 설치(버전 고정 필요하지 않음)
!pip install selenium

from selenium import webdriver

#안정적인 로드를 위해 시간 지연을 주고자 한다면
import time

 

2. 구글 코랩에서의 크롬드라이버 작동은 headless 모드 

알고 보니 구글 코랩에서 크롬 드라이버로 크롬을 작동하면 원래 화면이 뜨지 않는다고 함. 

(다음과 같이 headless 옵션을 주어야 한다)

options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')

 

이제 다음 코드로 실행할 수 있다. 

driver = webdriver.Chrome('chromedriver', options = options)

 

(+ 추가: 아래는 각자 필요한 대로 바꿀 수 있는 부분!)

driver.maximize_window() #최대 창으로 키우기 
driver.implicitly_wait(3) #3초 대기
driver.get("https://map.naver.com/v5/search") #원하는 url로 접속

#메모리 낭비를 방지하기 위해 창을 제때 끕시다 
driver.quit()

 

3. find_element_by_css_selector 메소드 대신 By.CSS_SELECTOR를 쓰자

element의 유형에 따라 메소드를 따로 쓸 필요가 없고 속성으로 붙여 깔끔하다. 

또 홀라당 까먹을 나를 위해서 아래에 속성을 모두 적어보았다. 

from selenium.webdriver.common.by import By

driver.find_element(By.ID, 'id')
driver.find_element(By.XPATH, 'xpath')
driver.find_element(By.LINK_TEXT, 'link text')
driver.find_element(By.PARTIAL_LINK_TEXT, 'partial link text')
driver.find_element(By.NAME, 'name')
driver.find_element(By.TAG_NAME, 'tag name')
driver.find_element(By.CLASS_NAME, 'class name')
driver.find_element(By.CSS_SELECTOR, 'css selector')

#여러 개를 탐색할 때는 element -> elements로 변경

 

 

이 정도로 하면 기본적인 준비는 끝난 것 같은데, 
과연 무사히 크롤링을 해볼 수 있을까?