웹크롤링 - . 페이지 로딩 시간을 기다린 후, 크롤링하기

11. 페이지 로딩 시간을 기다린 후, 크롤링하기

  • 몇몇 페이지의 경우, 페이지 로딩 지연이 발생하여(여러 요청이 병합하여 페이지 결과를 생성) tag를 못읽어오는 경우가 발생할 수 있음
  • 이때, 아래의 코드를 이용하여 해결 가능
  • e.g) 10초내에 해당 tag를 찾으면 반환, 그렇지 않으면 timeout 발생!
  • http://selenium-python.readthedocs.io/waits.html
  • WebDriverWait() 메서드
    • 명시적인 페이지 로드 대기에 사용됨
    • 주로 다음 코드와 같이 사용됨
try:
    element = WebDriverWait(driver, 몇초).until(
        # By.ID 는 ID로 검색, By.CSS_SELECTOR 는 CSS Selector 로 검색
        EC.presence_of_element_located((By.ID, "cMain"))
    )
except TimeoutException:
    print("타임아웃")
finally:
    driver.quit()
  • from selenium.webdriver.common.by import By 검색 지원 방법
    By.ID - 태그에 있는 ID 로 검색
    By.CSS_SELECTOR - CSS Selector 로 검색
    By.NAME - 태그에 있는 name 으로 검색
    By.TAG_NAME - 태그 이름으로 검색
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


driver = webdriver.PhantomJS('C:/dev_python/phantomjs-2.1.1-windows/bin/phantomjs.exe')
# driver = webdriver.PhantomJS('/usr/local/Cellar/phantomjs/2.1.1/bin/phantomjs')
driver.get('http://v.media.daum.net/v/20170202180355822')
try:
    # id가 cMain인 tag를 10초 내에 검색, 그렇지 않으면 timeoutexception 발생
    element = WebDriverWait(driver, 10).until(
        # By.ID 는 ID로 검색, By.CSS_SELECTOR 는 CSS Selector 로 검색
        EC.presence_of_element_located((By.ID, "cMain"))
    )
    print(element.text)

except TimeoutException:
    print("해당 페이지에 cMain 을 ID 로 가진 태그가 존재하지 않거나, 해당 페이지가 10초 안에 열리지 않았습니다.")
    
finally:
    driver.quit()