무한스크롤은 스크롤이 뷰포트 하단에 도달할 때 서버에서 새 데이터를 불러오는 식으로 구현됩니다.
예를 들어보겠습니다.
현재 화면에는 5개의 컨텐츠가 보이는 상태입니다.
하지만 스크롤을 아래로 내리는 순간 로딩 스피너가 등장하고 컨텐츠 5개가 추가되었습니다.
무한스크롤 방식으로 새로운 데이터를 계속 불러오는 것입니다.
하지만 Selenium을 사용해 이런 식으로 추가되는 데이터를 가져오려면 어떻게 해야할까요?
초기 데이터 이후에 추가적인 데이터를 가져오려면 화면을 아래로 스크롤해 추가 데이터들이 화면에 렌더링 되도록 Selenium API를 사용해야 합니다.
여러 방법들이 존재하지만 대표적으로 while문을 사용해서 로직을 구현할 수 있습니다.
컨텐츠가 추가될 때마다 body 태그의 높이 또한 증가한다는 점을 참고하겠습니다.
더이상 불러올 데이터가 없을때는 BeautifulSoup을 사용해 타겟 데이터를 모두 가져오면 됩니다.
from selenium import webdriver
import time
url = '임의의 URL'
browser = webdriver.Chrome()
browser.get(url)
browser.maximize_window()
browser.execute_script("window.scrollTo(0, document.body.scrollHeight)")
# 2초마다 스크롤 아래로 이동
term = 2
# 현재 문서 높이를 변수로 관리
prev_height = browser.execute_script("return document.body.scrollHeight")
# 무한스크롤을 위한 반복문
while True:
# 스크롤 최하단으로 이동
browser.execute_script("window.scrollTo(0, document.body.scrollHeight)")
# 페이지 로딩 대기
time.sleep(term)
# prev_height과 비교를 위한 두번째 문서 높이를 변수로 관리
curr_height = browser.execute_script("return document.body.scrollHeight")
if curr_height == prev_height:
break
prev_height = curr_height
'파이썬・ML' 카테고리의 다른 글
CountVectorizer, TfidfVectorizer의 min_df와 max_df 매개변수 이해하기 (0) | 2023.09.01 |
---|---|
[ML]mlxtend 모듈로 결정 경계 확인하기 (0) | 2023.08.16 |
파이썬 문자열 함수 총정리 (0) | 2023.07.26 |
파이썬 딕셔너리 함수 총정리 (0) | 2023.07.26 |
파이썬 collections 모듈 Counter 사용하기 (0) | 2023.07.26 |