본문 바로가기
IT/Python

파이썬 셀레니움으로 크롤링하기: 유용한 크롬 옵션 소개와 예제

by bamcong 2025. 3. 12.
728x90
반응형

안녕하세요. 오늘은 파이썬을 이용한 웹 크롤링에서 셀레니움(Selenium)과 함께 사용할 수 있는 크롬 옵션들에 대해 알아보려고 합니다. 웹 크롤링이란 웹사이트에서 데이터를 자동으로 수집하는 작업으로, 구글에서 상품 정보를 수집하거나 뉴스 기사를 모아보는 등 다양한 용도로 활용됩니다.

파이썬을 이용한 크롤링

셀레니움(Selenium)이란?

셀레니움은 웹 애플리케이션을 자동으로 테스트할 수 있는 도구로, 실제 사용자가 웹 브라우저를 사용하는 것처럼 자동으로 웹 페이지에서 정보를 입력하거나 클릭하는 등의 동작을 수행할 수 있게 해줍니다. 그래서 데이터 수집 작업에 매우 유용합니다.

왜 크롬 옵션이 필요한가?

셀레니움은 다양한 브라우저에서 사용할 수 있지만, 크롬(Chrome) 웹 브라우저를 사용할 때 몇 가지 옵션을 설정하면 크롤링 성능을 높일 수 있습니다. 예를 들어, 브라우저가 자동으로 열리는 것을 방지하거나, 로딩 속도를 개선하는 옵션들입니다.

유용한 크롬 옵션들

  • disable-automation: 브라우저가 자동화 모드임을 나타내는 정보를 제거
  • disable-blink-features=AutomationControlled: 자동화 컨트롤 기능을 비활성화하여 봇 감지 우회
  • excludeSwitches - enable-automation: 자동화 관련 스위치를 비활성화
  • useAutomationExtension=False: 자동화 확장 기능 사용 안 함
  • user-agent: 특정 사용자 에이전트 설정하여 일반 사용자처럼 보이게 함
  • headless: 브라우저를 실제로 화면에 나타내지 않고 백그라운드에서 실행
  • disable-gpu: GPU 가속을 비활성화하여 일부 시스템에서의 호환성 향상
  • no-sandbox: 샌드박스 보안 모델 비활성화 (특정 환경에서 필요할 수 있음)
  • disable-dev-shm-usage: 공유 메모리 사용 제한 (리눅스 환경에서 크래시 방지)
  • start-maximized: 브라우저를 최대화된 상태로 시작
  • disable-infobars: 정보 표시줄 비활성화
  • disable-notifications: 웹사이트 알림 차단
  • disable-popup-blocking: 팝업 차단 해제 (필요시 팝업 허용)
  • ignore-certificate-errors: SSL 인증서 오류 무시

예를 들어, headless 옵션을 사용하면 실제로 브라우저를 보지 않고도 크롤링 작업을 수행할 수 있습니다. 이는 서버 환경에서 크롤링을 자동화할 때 유용합니다.

셀레니움을 활용한 크롤링 예제

이제 위에서 소개한 크롬 옵션을 활용하여 셀레니움을 사용한 간단한 크롤링 예제를 살펴보겠습니다.

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options

# 크롬 옵션 설정
# 브라우저 자동화 감지 우회
chrome_options.add_argument("--disable-automation")  # 브라우저가 자동화 모드임을 나타내는 정보를 제거
chrome_options.add_argument("--disable-blink-features=AutomationControlled")  # 자동화 컨트롤 기능을 비활성화하여 봇 감지 우회
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])  # 자동화 관련 스위치를 비활성화
chrome_options.add_experimental_option("useAutomationExtension", False)  # 자동화 확장 기능 사용 안 함

# 브라우저 환경 설정
chrome_options.add_argument("--headless")  # UI 없이 백그라운드에서 실행 (구버전)
# chrome_options.add_argument("--headless=new")  # 최신 헤드리스 모드 (Chrome 109+ 버전용)
chrome_options.add_argument("--start-maximized")  # 브라우저를 최대화된 상태로 실행
chrome_options.add_argument("--disable-infobars")  # 정보 표시줄 비활성화 (예: "Chrome이 자동화된 소프트웨어에 의해 제어되고 있습니다" 메시지)

# 성능 및 안정성 개선
chrome_options.add_argument("--disable-gpu")  # GPU 하드웨어 가속 비활성화 (특히 헤드리스 모드에서 문제 방지)
chrome_options.add_argument("--no-sandbox")  # 샌드박스 보안 기능 비활성화 (리눅스 환경에서 유용)
chrome_options.add_argument("--disable-dev-shm-usage")  # 공유 메모리 사용 제한 (리눅스 환경에서 크래시 방지)

# 보안 및 통지 관련
chrome_options.add_argument("--ignore-certificate-errors")  # SSL 인증서 오류 무시
chrome_options.add_argument("--disable-notifications")  # 웹사이트 알림 차단
chrome_options.add_argument("--disable-popup-blocking")  # 팝업 차단 해제 (필요시 팝업 허용)

# 사용자 에이전트 설정
chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36")  # 특정 사용자 에이전트 설정하여 일반 사용자처럼 보이게 함

# 크롬 드라이버 경로 설정
service = Service('path/to/chromedriver')  # chromedriver의 경로를 입력하세요

# 크롬 드라이버 실행
driver = webdriver.Chrome(service=service, options=chrome_options)

# 웹 페이지 접속
driver.get('https://example.com')

# 원하는 데이터 크롤링
data = driver.find_element("xpath", "//h1").text
print(data)

# 크롬 드라이버 종료
driver.quit()

위의 코드는 셀레니움을 사용하여 특정 웹 페이지에 접속한 후, 제목(<h1></h1>)을 가져오는 예제입니다. 메모해두어야 할 점은 'path/to/chromedriver' 부분을 자신의 환경에 맞게 수정해야 한다는 것입니다. 실행이 완료되면 '<h1></h1>' 태그의 내용을 출력하게 됩니다.

마무리

이번 글에서는 파이썬 셀레니움을 활용하여 웹 크롤링의 기본과 크롬 옵션에 대해 알아보았습니다. 크롤링 옵션을 적절히 설정하면 크롤링 효율을 크게 개선할 수 있으니, 상황에 맞게 활용해보시길 바랍니다.

728x90
반응형