본문 바로가기

자동화

[202407] 파이썬 Selenium을 통한 크롤링 방법(스크롤 이동 포함)

반응형

파이썬 Selenium을 통한 크롤링 방법

웹 크롤링은 데이터를 수집하거나 자동화된 테스트를 수행하는 데 매우 유용한 기술입니다. 이번 포스팅에서는 파이썬의 Selenium 라이브러리를 사용하여 간단한 웹 크롤링 작업을 수행하는 방법을 소개하겠습니다.

  • 저의 블로그를 크롤링하는 예시입니다.

Selenium은 웹 브라우저를 자동화할 수 있는 강력한 도구로, 다양한 웹 페이지에서 데이터를 수집하거나 상호작용을 자동화하는 데 사용됩니다. 아래 예제 코드는 구글 검색을 통해 특정 키워드를 검색하고, 검색 결과를 클릭한 후 내용을 확인하는 작업을 자동화한 것입니다.

필요한 라이브러리 설치

먼저, Selenium과 웹드라이버를 설치해야 합니다. 다음 명령어를 사용하여 설치할 수 있습니다.

pip install selenium

 

크롬 드라이버는 ChromeDriver 페이지에서 다운로드하여 설치해야 합니다. 다운로드한 드라이버의 경로를 설정해 줍니다.

코드 설명

필요한 모듈 임포트

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
from datetime import datetime

 

먼저, Selenium을 사용하기 위해 필요한 모듈을 임포트합니다. 여기에는 웹드라이버, 서비스, 요소 찾기(By), 키 조작(Keys), 웹드라이버 대기(WebDriverWait) 및 조건(expected_conditions) 등이 포함됩니다.

요소 찾기 및 클릭 함수

def find_and_click_element(driver, xpath):
    found = False
    while not found:
        try:
            element = driver.find_element(By.XPATH, xpath)
            element.click()
            time.sleep(1)
            con_xpath = '//*[@id="content"]/div[2]/div[1]/a/span[2]'
            find_content = driver.find_element(By.XPATH, con_xpath)
            find_content.click()
            time.sleep(2)
            driver.back()
            found = True
            time.sleep(2)
        except:
            movescroll = driver.find_element(By.CSS_SELECTOR, 'body')
            movescroll.send_keys(Keys.PAGE_DOWN)
            time.sleep(3)
            time.sleep(2)
    return found

 

이 함수는 주어진 XPath 요소를 찾아 클릭합니다. 요소가 없으면 페이지를 스크롤하여 다시 찾습니다. 스크롤은 send_keys(Keys.PAGE_DOWN)을 사용하여 수행됩니다.

 

[브라우저에서 XPath 찾기]

  1. Chrome 브라우저를 열고, 검사하려는 웹 페이지로 이동합니다.
  2. 검사하려는 요소 위에서 오른쪽 클릭을 하고 "검사"를 선택합니다.(F12키 눌러도 됨)
  3. 개발자 도구 왼쪽 상단 버튼 클릭

  1. 개발자 도구에서 요소를 마우스 오른쪽 버튼으로 클릭하고 "Copy" > "Copy XPath"를 선택합니다.

크롤링 작업 수행 함수

def operate(keywords):
    try:
        service = ChromeService()
        options = webdriver.ChromeOptions()
        driver = webdriver.Chrome(service=service, options=options)
        driver.get("http://www.google.com")

        search_box = driver.find_element(By.NAME, "q")
        search_box.send_keys(keywords)
        search_box.submit()

        # Wait for search results to load
        WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "rso")))

        xpath = '//*[@id="rso"]/div[1]/div/div/div/div[1]/div/div/span/a/h3'

        find_and_click_element(driver, xpath)

        time.sleep(5)
        driver.quit()
        c_time = datetime.now()
        y_time = c_time.year
        m_time = c_time.month
        d_time = c_time.day
        h_time = c_time.hour
        min_time = c_time.minute
        t = f"{y_time}.{m_time}.{d_time}.{h_time}.{min_time}"
        print(f"{t} {i+1}회 {keywords}")
        time.sleep(5)
    except Exception as e:
        print(f"Error: {e}")
        driver.quit()
        pass

 

이 함수는 주어진 키워드로 구글 검색을 수행하고, 검색 결과의 첫 번째 링크를 클릭한 후 해당 페이지에서 특정 요소를 찾습니다. 그런 다음, 드라이버를 종료하고 현재 시간을 출력합니다.

메인 함수

if __name__ == "__main__":
    keywords = 'it together tistory'
    operate(keywords)

 

메인 함수는 operate 함수를 호출하여 구글 검색 작업을 시작합니다.

결론

Selenium을 사용하면 다양한 웹 페이지에서 자동화된 상호작용을 쉽게 구현할 수 있습니다. 이 예제 코드를 통해 구글 검색과 검색 결과 클릭을 자동화하는 방법을 배웠습니다. 이를 바탕으로 더 복잡한 웹 크롤링 작업을 수행할 수 있을 것입니다.

Selenium의 다양한 기능을 활용하여 여러분만의 웹 크롤러를 만들어보세요!

반응형