페이지 로딩 시간을 기다린 후, 크롤링하기
이해하기 쉽고, 장황하지 않은 자료를 기반으로 강의를 진행합니다.
잔재미코딩 소식 공유
좀더 제약없이, 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()