본문 바로가기
Python/퀀트

크롤링 실습: 셀레니움을 이용한 동적 크롤링 실습하기

by 훈영 2024. 11. 5.
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
from bs4 import BeautifulSoup


driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

url = 'http://www.naver.com'
driver.get(url)
driver.page_source  # 현재 페이지의 HTML 정보

# 웹 브라우저 조작하기
driver.find_element(By.LINK_TEXT, value='뉴스').click()  # 뉴스 요소(엘레멘트) 클릭
# driver.back()  # 뒤로가기

# 검색하기
driver.find_element(By.CLASS_NAME, value='search_input').send_keys('퀀트 투자 포트폴리오 만들기')
driver.find_element(By.CLASS_NAME, value='btn_search').send_keys(Keys.ENTER)

# 새로운 검색어로 검색하기
driver.find_element(By.CLASS_NAME, value='box_window').clear()
driver.find_element(By.CLASS_NAME, value='box_window').send_keys('영화')
driver.find_element(By.CLASS_NAME, value='bt_search').send_keys(Keys.ENTER)


# XPATH를 활용하여 조작하기
# XPAHT란? HTML이나 XML 중 특정 값의 태그나 속성을 찾기 쉽게 만든 주소
# 블로그 XPATH: //*[@id="lnb"]/div[1]/div/div[1]/div/div[1]/div[2]/a
driver.find_element(By.XPATH, value='//*[@id="lnb"]/div[1]/div/div[1]/div/div[1]/div[2]/a').click()
driver.execute_script('window.scrollTo(0, document.body.scrollHeight);')  # 페이지 스크롤
# driver.find_element(By.TAG_NAME, value='body').send_keys(Keys.PAGE_DOWN)


# 페이지의 가장 하단까지 스크롤
prev_height = driver.execute_script('return document.body.scrollHeihgt')  # 현재의 창 높이를 저장

while True:
    driver.execute_script('window.scrollTo(0, document.body.scrollHeight);')
    time.sleep(2)
    
    curr_height = driver.execute_script('return document.body.scrollHeight')
    if curr_height == prev_height:
        break
    prev_height = curr_height
    

# 모든 블로그 제목 크롤링
html = BeautifulSoup(driver.page_source)
txt = html.find_all(class_='title_link')
txt_list = [i.text for i in txt]

# 페이지 종료
driver.quit()

댓글