
1. 기본/개요
파이썬으로 웹에서 데이터를 자동으로 수집하는 작업에는 크게 두 가지 라이브러리가 사용됩니다. 첫 번째는 BeautifulSoup으로, HTML 파일을 가져오거나 urllib 혹은 requests 모듈을 통해 직접 웹에서 소스를 가져와 파싱하는 데 사용되는 파이썬 라이브러리입니다. 설치는 pip 명령으로 가능하며, 패키지명은 beautifulsoup4입니다.
두 번째는 Selenium입니다. Selenium 공식 사이트에 따르면 Selenium WebDriver는 브라우저를 실제로 구동하는 방식으로 다루는 언어별 바인딩의 모음이며, 견고한 브라우저 기반 회귀 자동화 스위트와 테스트를 만들고 여러 환경에 걸쳐 스크립트를 확장·분산 실행하려는 목적에 사용됩니다. 즉 Selenium은 애초에 크롤링 전용 도구가 아니라 웹 애플리케이션 테스트 자동화 도구로 만들어졌고, 이 특성 때문에 실제 브라우저를 띄워 자바스크립트 렌더링이 필요한 동적 페이지까지 다룰 수 있다는 점이 크롤링에도 활용되는 이유입니다.
2. 기능/스펙
BeautifulSoup의 핵심 기능은 requests 등으로 받아온 HTML 문서를 트리 구조로 파싱한 뒤, find·find_all·CSS 셀렉터(select) 같은 메서드로 원하는 태그나 속성을 추출하는 것입니다. 다만 한계도 명확한데, 뷰티풀수프의 가장 큰 한계점은 동적인 크롤링이 안 된다는 점으로, 버튼을 누르거나 값을 입력하는 등 페이지와의 동적 상호작용이 불가능합니다. 반대로 이미 받아온 정보를 soup 객체에서 추출만 하면 되기 때문에 셀레니움보다 속도가 빠르다는 장점이 있습니다.
Selenium은 이런 한계를 보완합니다. PyPI 공식 패키지 설명에 따르면 최신 selenium 패키지는 Python 3.10 이상을 요구하며 Apache-2.0 라이선스로 배포됩니다. 과거에는 chromedriver, geckodriver 같은 브라우저별 드라이버를 사용자가 직접 설치하고 시스템 경로에 등록해야 했지만, 최신 버전의 Selenium은 Selenium Manager를 통해 브라우저와 드라이버 설치를 자동으로 처리해줍니다. 또한 Selenium은 Chrome, Firefox, Edge, Safari, Internet Explorer 등 주요 브라우저를 지원하고, Python 외에도 Java, C#, Ruby, JavaScript, Kotlin 등 다양한 언어로 사용할 수 있다는 점이 스펙상 특징입니다.
3. 장단점 (내 생각과 비판 포함)
BeautifulSoup의 장점은 학습 곡선이 낮고 실행 속도가 빠르다는 것입니다. requests로 받은 정적 HTML을 그대로 파싱하기만 하면 되므로 서버 자원 소모도 적습니다. 다만 개인적으로 아쉬운 점은, 최근 대다수의 상업용 웹사이트가 리액트·뷰 같은 프레임워크로 콘텐츠를 자바스크립트로 동적 렌더링하는 추세인데, BeautifulSoup 단독으로는 이런 페이지에서 빈 뼈대 HTML만 받아오는 경우가 많다는 점입니다. 이는 BeautifulSoup 자체의 결함이라기보다는 애초에 정적 파싱 도구로 설계되었기 때문이며, 이 한계를 이해하지 못하고 사용하면 "크롤링이 안 된다"는 오해로 이어지기 쉽습니다.
Selenium은 동적 페이지 대응이 가능하다는 확실한 장점이 있지만, 실제 브라우저 프로세스를 띄우는 구조이기 때문에 속도가 느리고 메모리·CPU 자원을 많이 소모합니다. 비판적으로 보자면, Selenium은 태생적으로 테스트 자동화 도구이기 때문에 대규모 크롤링에 그대로 쓰기에는 과도하게 무겁다는 지적이 커뮤니티에서 꾸준히 제기됩니다. 대량 수집이 목적이라면 Playwright나 Scrapy 같은 대안이 더 적합할 수 있다는 의견도 있는데, 이는 실제 도구 선택 시 목적에 따라 검토해볼 부분입니다. 다만 이러한 대안 도구들과의 정량적 성능 비교 수치는 이번 조사에서 확인할 수 없었으므로, 구체적 벤치마크 값을 단정적으로 제시하지는 않겠습니다.
4. 추천대상
정적인 HTML 페이지(서버에서 완성된 HTML을 내려주는 사이트)에서 텍스트나 표 데이터를 뽑아내려는 초보 개발자나, 빠른 속도로 대량의 정적 페이지를 순회해야 하는 경우라면 BeautifulSoup + requests 조합이 적합합니다. 반면 로그인, 버튼 클릭, 스크롤에 따른 콘텐츠 로딩처럼 사용자 행동을 재현해야 하거나, 자바스크립트로 렌더링되는 SPA(싱글 페이지 애플리케이션) 사이트를 다뤄야 한다면 Selenium이 필요합니다. 실무에서는 두 도구를 함께 조합해, Selenium으로 동적 렌더링을 완료한 뒤 그 결과 HTML을 BeautifulSoup으로 파싱하는 방식도 흔히 사용됩니다.
5. FAQ
Q1. BeautifulSoup만으로 자바스크립트 렌더링 페이지를 크롤링할 수 있나요?
A. 불가능합니다. 뷰티풀수프는 동적 크롤링과 페이지와의 상호작용이 안 되는 한계가 있으므로, 이런 경우 Selenium 등 브라우저 자동화 도구가 필요합니다.
Q2. Selenium 사용 시 드라이버를 따로 설치해야 하나요?
A. 최신 버전의 Selenium은 Selenium Manager 기능을 통해 브라우저와 드라이버 설치를 자동으로 처리해주므로, 과거처럼 수동 설치가 필수는 아닙니다.
Q3. Selenium은 원래 테스트 도구인가요, 크롤링 도구인가요?
A. 공식 문서 기준으로 Selenium WebDriver는 브라우저 기반 회귀 테스트 자동화 스위트를 만드는 목적으로 설계되었습니다. 크롤링 활용은 이 브라우저 제어 기능을 응용한 부가적 용도입니다.
Q4. 두 라이브러리 중 어느 쪽이 항상 더 나은가요?
A. 이는 목적에 따라 다르며, 모든 상황에 우월한 단일 정답이 있다고 단정할 수 없습니다. 이것은 확인할 수 없습니다 — 사이트 구조와 요구사항에 따라 선택이 달라집니다.
6. 출처
PyPI, selenium 프로젝트 페이지 (pypi.org/project/selenium)
Selenium 공식 문서 (selenium.dev)
Selenium Python Bindings 공식 문서 (selenium-python.readthedocs.io)
velog, "Beautiful Soup 기초"
steemit, "[Python] 웹 크롤링에 사용하는 Beautiful Soup 사용법과 예제"