본문 바로가기
카테고리 없음

파이썬 크롬 셀레늄 멀티쓰레딩

by 퍼포먼스마케팅코더 2024. 3. 22.
반응형

셀레늄 멀티쓰레딩

파이썬을 사용하여 웹 페이지에서 데이터를 스크래핑하는 것은 매우 일반적인 작업 중 하나입니다. Selenium은 이러한 작업을 위해 널리 사용되는 도구 중 하나로, 웹 브라우저를 프로그래매틱으로 제어하여 웹 페이지의 동적 콘텐츠를 포함한 데이터를 추출할 수 있습니다. 멀티쓰레딩을 이용하면 Selenium을 사용한 웹 스크래핑 작업을 병렬로 수행하여 효율성을 높일 수 있습니다. 본 글에서는 Python의 threading 모듈을 사용하여 Selenium 기반 웹 스크래핑을 멀티쓰레딩으로 구현하는 방법에 대해 설명합니다.

기본 설정

먼저 필요한 라이브러리를 임포트합니다. threading은 파이썬의 기본 스레딩 모듈, selenium은 웹 브라우저를 자동화하기 위한 라이브러리, chromedriver_autoinstaller는 ChromeDriver를 자동으로 설치해주는 유틸리티, 그리고 BeautifulSoup은 HTML과 XML 파일을 파싱하기 위한 라이브러리입니다.

import threading
from selenium import webdriver
import time
import chromedriver_autoinstaller
from bs4 import BeautifulSoup

스크래핑 스레드 클래스 정의

멀티쓰레딩을 위해 threading.Thread를 상속받아 ScrapeThread 클래스를 정의합니다. 이 클래스는 각 스레드가 실행할 run 메소드에서 실제 스크래핑 작업을 수행합니다. 생성자에서는 스레드가 스크래핑할 웹 페이지의 URL을 받아 인스턴스 변수로 저장합니다.

class ScrapeThread(threading.Thread):
    def __init__(self, url):
        threading.Thread.__init__(self)
        self.url = url

    def run(self):
        chromedriver_autoinstaller.install()
        driver = webdriver.Chrome()
        driver.get(self.url)
        page_source = driver.page_source
        soup = BeautifulSoup(page_source, 'html.parser')

        if self.url == "https://www.naver.com":
            print("특별한 URL에서 작업 수행:", soup.title.text + '\n')
        elif self.url == "https://www.google.com":
            print("또 다른 특별한 URL에서 작업 수행:", soup.title.text + '\n')
        else:
            print("없음")
        time.sleep(1)
        driver.close()

스레드 실행

여러 웹 페이지에 대해 병렬 스크래핑을 시작합니다. 이를 위해 각 URL에 대해 ScrapeThread 인스턴스를 생성하고, 스레드를 시작한 후, 모든 스레드가 종료될 때까지 기다립니다(join 메소드 사용).

urls = ['https://www.naver.com', 'https://www.google.com']

threads = []
for url in urls:
    t = ScrapeThread(url)
    t.start()
    threads.append(t)

for t in threads:
    t.join()

주의 사항

멀티쓰레딩을 사용할 때는 각 스레드에서 생성되는 WebDriver 인스턴스가 시스템 리소스를 상당량 소모할 수 있으므로 주의가 필요함.

반응형

댓글