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

이해하기 쉽고, 장황하지 않은 자료를 기반으로 강의를 진행합니다.
잔재미코딩 소식 공유
좀더 제약없이, IT 컨텐츠를 공유하고자, 자체 온라인 사이트와, 다음 두 채널도 오픈하였습니다
응원해주시면, 곧 좋은 컨텐츠를 만들어서 공유하겠습니다
●  잔재미코딩 뉴스레터 오픈 [구독해보기]
●  잔재미코딩 유투브 오픈 [구독해보기]

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 - 태그 이름으로 검색
    
In [ ]:
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()