728x90

셀레니움(Selenium)을 활용하여 동적인 웹 사이트의 데이터를 크롤링하는 방법을 간단하게 설명하는 글이다. 

 

프로젝트에 필요한 라이브러리와 의존성을 관리하기 위해, 먼저 가상 환경을 생성하고 활성화한다. PowerShell에서 다음 명령어를 실행한다.

 

python -m virtualenv venv
.\venv\Scripts\activate

 

가상 환경이 활성화된 후, 셀레니움과 크롬 드라이버 자동 설치를 위한 chromedriver_autoinstaller를 설치한다.

 

pip install selenium chromedriver_autoinstaller

 

셀레니움을 사용하여 네이버에서 "python flask"에 대한 검색 결과 중 특정 블로그 글의 랭킹을 찾는 과정은 다음과 같다.

from selenium import webdriver
from selenium.webdriver.common.by import By
import chromedriver_autoinstaller
import time

chromedriver_autoinstaller.install()
driver = webdriver.Chrome()

 

chromedriver_autoinstaller를 사용하여 크롬 드라이버를 자동으로 설치하고, 셀레니움 웹 드라이버를 초기화한다.

query = "python flask"
search_link = f"https://search.naver.com/search.naver?where=view&sm=tab_jum&query={query}"
driver.get(search_link)
time.sleep(2)

 

"python flask" 검색 결과 페이지로 이동한다.

target_blog_link = "https://blog.naver.com/surper_/223140462387"
link_selector = f'a[href^="{target_blog_link}"]'

 

페이지 내에서 특정 블로그 링크를 찾기 위해 CSS 선택자를 사용한다. 이 링크는 동적 요소이므로 페이지를 스크롤하여 랭크 정보가 로드될 때까지 기다린다.

element = driver.find_element(By.CSS_SELECTOR, link_selector)
while True:
    new_element = element.find_element(By.XPATH, "./..")
    rank = new_element.get_attribute("data-cr-rank")
    if rank:
        print("랭크 찾음 : ", rank)
        break
    element = new_element

 

블로그의 랭킹 정보를 포함하는 상위 요소를 찾기 위해 XPATH를 사용하여 부모 요소로 이동한다. data-cr-rank 속성에서 랭킹 정보를 추출한다.

for _ in range(7):
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(3)

 

만약 특정 요소를 찾지 못하면, 페이지를 더 스크롤하여 추가적인 데이터를 로드해야 할 수도 있다. 이를 위해 driver.execute_script 메소드를 사용하여 페이지 하단으로 스크롤한다.

728x90

'웹 개발 > 웹 크롤링' 카테고리의 다른 글

셀레니움 예제1  (0) 2024.03.22
728x90

셀레니움(Selenium)은 동적 웹 페이지와의 상호작용에 최적화된 라이브러리다. 웹 페이지의 동적 요소들, 예를 들어 JavaScript로 불러오는 데이터까지 크롤링하는 데 유용하다.

 

1. Python으로 프로젝트를 진행할 때, 프로젝트별로 독립된 환경을 만들기 위해 가상 환경을 사용한다.

 

pip install virtualenv

 

2. 테스트할 폴더(test_folder)로 이동한 후, 해당 폴더 내에 가상 환경(folder)을 생성한다.

 

cd test_folder
python -m virtualenv folder
.\folder\Scripts\activate

 

3. 가상 환경이 활성화된 상태에서 셀레니움과 크롬 드라이버 자동 설치 라이브러리를 설치한다.

 

pip install selenium chromedriver_autoinstaller

 

셀레니움을 이용해 크롬 드라이버를 자동으로 설치하고, 브라우저를 제어하는 기본적인 코드는 다음과 같다.

from selenium import webdriver
from selenium.webdriver.common.by import By
import chromedriver_autoinstaller
import time

chromedriver_autoinstaller.install()
driver = webdriver.Chrome()
driver.get("https://www.naver.com")
time.sleep(3)  # 로딩 대기

 

셀레니움을 사용해 동적인 웹 페이지의 데이터를 크롤링하고, 페이지 내 이동, 뒤로 가기, 앞으로 가기 등의 브라우저 동작을 자동화할 수 있다.

 

# 페이지 이동
driver.get("https://google.com")
time.sleep(1)

# 뒤로 가기
driver.back()
time.sleep(2)

# 앞으로 가기
driver.forward()
time.sleep(2)

# 새로고침
driver.refresh()
time.sleep(2)

print("동작 완료")

 

셀레니움은 웹 페이지의 특정 요소가 로딩될 때까지 대기하고, 해당 요소와 상호작용하는 기능도 제공한다.

 

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

try:
    selector = "#shortcutArea > ul"
    WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.CSS_SELECTOR, selector)))
except:
    print("예외 발생")
print("엘리먼트 로딩 끝")
print("다음 코드 실행")
input()

 

 

728x90

'웹 개발 > 웹 크롤링' 카테고리의 다른 글

셀레니움 예제2  (0) 2024.03.22

+ Recent posts