웹 크롤링은 데이터를 자동으로 수집하는 프로세스로, 다양한 분야에서 활용되고 있습니다. 이 글에서는 Selenium을 사용하여 사람인 채용정보 사이트에서 ‘데이터 엔지니어’ 채용 정보를 크롤링하는 방법을 소개합니다. 이를 통해 독자는 웹 크롤링의 기본적인 이해를 높이고, 실용적인 예제를 통해 실습할 수 있는 기회를 가질 수 있습니다.
Selenium 설치 및 환경 설정
Selenium과 관련 모듈 설치
2023년 기준, Selenium을 사용하기 위해서는 먼저 해당 모듈을 설치해야 합니다. 설치는 pip 명령어를 통해 진행할 수 있으며, 다음과 같은 명령어를 사용합니다.
bash
pip install selenium
이 외에도 BeautifulSoup와 같은 파싱을 위한 라이브러리도 필요합니다. 이를 통해 크롤링한 데이터를 쉽게 가공할 수 있습니다. BeautifulSoup 또한 pip로 설치할 수 있습니다.
bash
pip install beautifulsoup4
크롬 웹드라이버 설정
Selenium을 사용하기 위해서는 크롬 웹드라이버를 설치해야 합니다. 이는 크롬 브라우저의 버전에 맞는 드라이버를 다운로드하여 설정하는 과정을 포함합니다. 웹드라이버의 경로를 시스템 환경 변수에 추가하거나, 코드 내에서 경로를 명시해야 합니다.
“`python
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
“`
위 코드는 ChromeDriverManager를 이용해 자동으로 드라이버를 설치하고 실행하는 방법입니다.
크롤링을 위한 기본 코드 구성
크롬 브라우저 실행 및 페이지 접근
Selenium을 사용하여 크롬 브라우저를 실행하고, 특정 URL에 접근하는 기본적인 코드는 다음과 같습니다. 헤드리스 모드로 설정하면 브라우저 창을 띄우지 않고도 작업을 수행할 수 있습니다.
“`python
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument(‘–headless’) # 브라우저를 띄우지 않고 실행
driver = webdriver.Chrome(options=options)
driver.get(‘https://www.saramin.co.kr’)
“`
위와 같은 설정 후, 원하는 URL을 호출하여 웹페이지에 접근할 수 있습니다.
데이터 크롤링 및 파싱
페이지에 접근한 후, BeautifulSoup을 사용하여 을 파싱하고 필요한 정보를 추출합니다. 채용 정보와 마감 시간을 가져오기 위해서는 해당 요소의 CSS 선택자를 확인하여 적절한 코드를 작성해야 합니다.
“`python
from bs4 import BeautifulSoup
soup = BeautifulSoup(driver.page_source, ‘.parser’)
job_list = soup.select(‘.job-list-item’) # 적절한 CSS 선택자
for job in job_list:
title = job.select_one(‘.job-title’).text.strip()
deadline = job.select_one(‘.job-deadline’).text.strip()
print(f’채용정보: {title}, 마감시간: {deadline}’)
“`
위 코드는 채용 정보와 마감 시간을 추출하여 출력하는 간단한 예제입니다. CSS 선택자는 크롤링하는 웹사이트의 구조에 따라 다를 수 있으므로, 개발자 도구를 통해 확인해야 합니다.
크롤링 결과 확인 및 종료
크롤링 결과 출력
위 코드를 실행하면 채용 정보와 마감 시간이 출력됩니다. 이를 통해 크롤링이 제대로 이루어졌는지를 확인할 수 있습니다. 출력된 정보는 터미널에서 직접 확인할 수 있으며, 필요한 경우 파일로 저장할 수도 있습니다.
브라우저 종료
크롤링 작업이 완료되면 반드시 브라우저를 종료해야 합니다. 이는 시스템 자원 관리 측면에서 중요하며, 다음과 같이 작성할 수 있습니다.
python
driver.quit()
이 코드는 Selenium이 열어둔 모든 브라우저 인스턴스를 종료합니다.
추가적인 크롤링 기능 구현
페이지네이션 처리
이번 예제에서는 단일 페이지의 정보만 크롤링하였으나, 여러 페이지에 걸쳐 데이터를 수집하는 것도 가능합니다. 페이지네이션을 처리하기 위해서는 다음 페이지 버튼의 CSS 선택자를 찾아 클릭하는 코드를 추가해야 합니다.
python
next_button = driver.find_element(By.CSS_SELECTOR, '.next-page')
if next_button:
next_button.click()
위 코드는 다음 페이지가 존재할 경우 클릭하여 다음 페이지로 이동하는 방법을 보여줍니다.
에러 처리 및 예외 상황 대응
웹 크롤링을 진행하는 동안 다양한 에러가 발생할 수 있습니다. 예를 들어, 네트워크 문제나 페이지 구조 변경 등으로 인해 원하는 데이터를 가져오지 못할 수 있습니다. 이를 대비하여 예외 처리를 추가하는 것이 좋습니다.
python
try:
# 크롤링 코드
except Exception as e:
print(f'오류 발생: {e}')
finally:
driver.quit()
이와 같은 구조를 통해 예상치 못한 오류 발생 시에도 프로그램이 정상적으로 종료되도록 할 수 있습니다.
실행 절차 요약
- 필요한 모듈 설치 및 환경 설정
- 크롬 웹드라이버 설정
- Selenium을 이용한 페이지 접근
- BeautifulSoup으로 데이터 파싱
- 채용 정보 출력 및 브라우저 종료
- 필요 시 페이지네이션 및 에러 처리 추가
이러한 절차를 통해 웹 크롤링을 효율적으로 수행할 수 있습니다. 다양한 사이트에서 필요로 하는 정보를 수집하는 데 있어 Selenium과 BeautifulSoup은 매우 유용한 도구입니다.
지금 바로 위의 절차를 활용하여 자신만의 크롤러를 만들어 보세요.