안녕하세요 파이썬과 관련하여 추가적으로 필요한 정보가 있으시면,
DATA101에서 확인 가능하십니다.
감사합니다.
안녕하세요, HELLO
이번에는 PYTHON selenium을 활용해서 동적 페이지를 크롤링할 때,
웹 크롤링을 진행하게 되면 스크롤 다운(scroll down)하여, 웹페이지를 내려가면서 데이터를 수집하는 스크롤 다운 방법 중 마지막 항목까지 자동으로 내려가는 무한 스크롤 크롤링을 정리했습니다.
이번 코드는 이전에 공유한 횟수를 정하고 내려가는 방식도 향후에 참고하면 좋습니다.
0. 활용 데이터
1. 무한 스크롤 크롤링(SCROLL_DOWN) 소스 코드
2. 무한 스크롤 크롤링(SCROLL_DOWN) 코드 설명
3. 소스 코드 시간 체크
0. 활용 데이터
이번에는 유튜브에 업로드된 '오징어 게임 (공식 예고편)'을 활용하고자 합니다.
영상을 시청하게 되면, 아래와 같이 댓글창을 볼 수 있습니다. 유튜브의 댓글창은 페이지를 스크롤 다운(SCROLL_DOWN)하면서, 댓글이 업데이트 됩니다. 그래서 처음 댓글창을 확인하고, 개발자 도구(F12)를 실행하여 확인하면, 댓글을 포함한 일부 태그를 확인할 수 있습니다.
이후에, 계속해서 스크롤 바를 내려가게 되면, 댓글을 담은 태그가 늘어나게 되고, 이에 맞춰 스크롤 바 크기가 줄어듬을 확인할 수 있습니다.
이러한 페이지 구성에서, 무한 스크롤 크롤링(SCROLL_DOWN) 코드를 적용하면, 별다른 횟수 지정없이 마지막 부분까지 스크롤을 내릴수 있습니다.
1. 무한 스크롤 크롤링(SCROLL_DOWN) 소스 코드
def infinite_loop():
#스크롤 내리기
last_page_height = driver.execute_script("return document.documentElement.scrollHeight")
while True:
driver.execute_script("window.scrollTo(0, document.documentElement.scrollHeight);")
time.sleep(1.0)
new_page_height = driver.execute_script("return document.documentElement.scrollHeight")
if new_page_height == last_page_height:
time.sleep(1.0)
if new_page_height == driver.execute_script("return document.documentElement.scrollHeight"):
break
else:
last_page_height = new_page_height
2. 무한 스크롤 크롤링(SCROLL_DOWN) 코드 설명
def infinite_loop():
# 최초 페이지 스크롤 설정
# 스크롤 시키지 않았을 때의 전체 높이
last_page_height = driver.execute_script("return document.documentElement.scrollHeight")
while True:
# 윈도우 창을 0에서 위에서 설정한 전체 높이로 이동
driver.execute_script("window.scrollTo(0, document.documentElement.scrollHeight);")
time.sleep(1.0)
# 스크롤 다운한 만큼의 높이를 신규 높이로 설정
new_page_height = driver.execute_script("return document.documentElement.scrollHeight")
# 직전 페이지 높이와 신규 페이지 높이 비교
if new_page_height == last_page_height:
time.sleep(1.0)
# 신규 페이지 높이가 이전과 동일하면, while문 break
if new_page_height == driver.execute_script("return document.documentElement.scrollHeight"):
break
else:
last_page_height = new_page_height
3. 소스 코드 시간 체크
무한 스크롤 코드를 적용하게 되면, 이후에 실질 소요시간을 확인할 필요가 생길 수 있습니다. 이 경우에는 python library 중 "tqdm"과 추가 소스 코드를 적용하면 쉽게 확인됩니다.
import tqdm
# while loop tqdm 파악
def simulate_loading(background_function):
with concurrent.futures.ThreadPoolExecutor() as executor:
future = executor.submit(background_function)
while not future.done():
yield
time.sleep(0.05)
return future.result()
함수를 적용한 후에, 코드 창에 아래 코드를 입력하면 스크롤 다운이 소요되는 시간을 확인할 수 있습니다.
이때 반복문에서 under bar('_') 표시는 함수 및 기능을 반복하고 싶지만, index와 value값이 필요하지 않을 때, 임의로 적용한 문구입니다.
# while loop 적용 코드
for _ in tqdm(simulate_loading(infinite_loop)):
pass
■ 마무리
이번에 웹 크롤링 (무한 스크롤 크롤링/SCROLL_DOWN) 및 작업 시간 확인에 대해서 알아봤습니다.
감사합니다.
위 포스팅은 카카오 티스토리, 네이버 블로그에도 동일하게 업로드합니다.
'PROGRAMMING > Python' 카테고리의 다른 글
[PYTHON] 폴더/파일 하위 디렉토리 복사 및 동기화 (os, shutil, sync) (0) | 2022.01.13 |
---|---|
[PYTHON] 파이썬 정규식을 활용한 괄호와 괄호 안 문자열 삭제 또는 추출 (0) | 2021.10.26 |
[PYTHON] 파이썬 Selenium 웹페이지 스크롤하기 (0) | 2021.10.20 |
[PYTHON] 파이썬 이모지(emoji) 제거 (0) | 2021.10.19 |
[PYTHON] 파이썬 np.percentile 백분위수 구하기 (0) | 2021.10.15 |
댓글