python의 selenium을 이용하여 웹 페이지의 이미지를 크롤링하는 방법 4편입니다.
이미지를 검색하고 이미지가 다 로드 될 수 있도록 페이지 끝까지 스크롤 하는 코드를 작성해보겠습니다.
- while문에 대해서 알아보기
스크롤을 끝까지 내리는 코드를 만들기 전에 while문에 대해서 알아보겠습니다.
while문은 주어진 조건이 참(True)인 동안 반복해서 코드를 실행합니다.
아래는 while문의 기본 구조입니다.
while 조건:
코드 실행
while문에서 '조건'은 반복이 계속되는 동안 평가되는 Boolean식입니다.
조건이 참(True)인 경우, 코드블럭이 실행되고 다시 조건을 확인합니다.
조건이 거짓이 되면 while문을 빠져나가고 다음 코드로 진행합니다.
아래는 1부터 5까지 출력하는 while문의 예시입니다.
count = 1
while count <= 5:
print(count)
count += 1
조건에 'count <= 5:'가 있으므로 count변수가 1부터 5이하인 경우 반복해서 코드를 실행합니다.
코드는 count변수의 값을 출력하고 count변수를 1씩 증가시킵니다.
count변수가 5를 초과할 경우 해당 while문을 빠져나가고 다음 코드를 진행합니다.
- while문과 for문의 차이점
while문과 for문은 서로 대체 가능한 경우가 많습니다.
일반적으로 for문은 반복횟수가 정해져 있는 경우에 더 적합하고
while문은 반복 횟수가 동적으로 변하는 경우에 유용하다고 볼 수 있습니다.
while문은 특정 조건이 충족될 때까지 반복해야 할 때 유용하게 사용할 수 있습니다.
- 이제 while문을 통해 스크롤을 끝까지 내리는 코드를 작성해보겠습니다.
import time
#끝까지 스크롤 내리기
while True:
# 현재 화면의 높이 저장
last_height = driver.execute_script("return document.body.scrollHeight")
# 스크롤을 끝까지 내리는 JavaScript 실행
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# 스크롤 동작 후 로딩 대기
time.sleep(2)
# 새로운 높이 계산
new_height = driver.execute_script("return document.body.scrollHeight")
# 더 이상 스크롤이 되지 않으면 반복 종료
if new_height == last_height:
break
한줄씩 해석해보겠습니다.
while문의 조건이 True입니다.
while문은 조건이 참(True)인 경우 반복해서 코드블럭을 실행합니다.
따라서 이 while문은 아래에 어떤 코드가 올지와 상관없이 루프 내의 코드를 계속해서 실행합니다.
'last_height'라는 변수에 값을 할당해줍니다.
'driver' 객체의 'excute_script' 매서드를 사용하여 JavaScript 코드를 실행합니다.
'driver'는 전에 driver = webdriver.Chrome(options=chrome_options)로 설정했습니다.
'document.body.scrollHeigh't는 현재 문서의 전체 스크롤 높이를 가져오는 JavaScript 코드입니다.
그리고 'return' 키워드는 JavaScript 코드에서 값을 Python으로 전달하는 역할을 수행합니다.
이를 통해 JavaScript와 Python간의 데이터 교환을 할 수 있습니다.
마찬가지로 'driver' 객체의 'excute_script' 매서드를 사용하여 JavaScript 코드를 실행합니다.
'window.scrollTo()' 매서드는 X축과 Y축으로 스크롤 위치를 지정할 수 있습니다.
여기서 X축을 0으로, Y축을 현재 문서의 전체 스크롤 높이로 지정하여 페이지를 맨 아래로 스크롤 합니다.
2초 동안 코드 실행을 지연 시킵니다.
스크롤 이후에 대기하여 코드의 안정성을 높입니다.
전에 'last_height'에 할당해 주었던 '현재 문서의 전체 스크롤 높이'를 이번엔 'new_height'변수에 할당시킵니다.
이 값은 한번 스크롤을 한 후의 현재 문서의 전체 스크롤 높이값이 되겠습니다.
만약 'new_height'와 'last_height'의 값이 동일하다면
더 이상 스크롤을 할 수 없으므로
'break'를 통해 무한 루프를 탈출합니다.
'프로그래밍 실습 > Python' 카테고리의 다른 글
파이썬 셀레니움 이미지 크롤링 코드 총 정리 (python selenium image download code) (0) | 2023.06.08 |
---|---|
파이썬 셀레니움 크롤링 (5) : 이미지 다운로드 하기/ driver.find_element().click() 코드 오류 해결 (0) | 2023.06.08 |
파이썬 셀레니움 크롤링 (3) : 네이버에서 이미지 검색하기 (0) | 2023.06.06 |
파이썬 셀레니움 크롤링 (2) : 크롬 브라우저 열기 (0) | 2023.06.06 |
파이썬 셀레니움 크롤링 (1) : 가상환경 세팅과 selenium 설치 (0) | 2023.06.04 |