서론
BeautifulSoup과 Selenium은 웹 스크래핑/크롤링하는 데 사용되는 Python 라이브러리이다. 두 개 모두 웹 페이지 정보를 얻기 위해 사용되는데, 언제 BeautifulSoup/Selenium을 사용해야 하는지 판단하기가 어려웠다. 이를 해결하기 위해 동적/정적 웹 페이지와 수집 방법의 개념을 이해하고, 각 라이브러리는 어떤 차이가 있는지 확인해보려고 한다.
동적 vs 정적
beautifulsoup와 selenium 사용을 구분하는 가장 중요한 요소는 "동적(dynamic)"과 "정적(static)"이다.
웹 페이지
웹 페이지는 생성될 때 HTML 내용이 고정된 "정적 웹 사이트"와 HTML 내용이 변하는 "동적 웹 사이트"로 구분한다.
정적 웹 페이지
정적 웹 페이지란 서버에 미리 저장된 파일이 그대로 전달되는 웹 페이지를 말한다. 쉽게 말해서 같은 url 주소를 입력했을 때, 동일한 HTML 정보를 얻을 수 있다. 따라서 특정 웹 사이트의 url 주소만 주소창에 입력하면 웹 브라우저로 HTML 정보를 마음대로 가져다 쓸 수 있다. 그래서 requests로 get 요청을 보내고, 이에 대한 응답을 파싱해도 아무런 문제가 발생하지 않는다.
동적 웹 페이지
동적 웹 페이지란 url만으로는 들어갈 수 없는 웹 페이지를 말한다. 들어가지더라도 url의 변화가 없는데도, 실시간으로 내용이 계속해서 추가/수정된다면 동적 웹 페이지이다. 예를 들어 유튜브나 인스타그램의 경우 영상을 계속해서 확인할 수 있지만 url 주소는 변하지 않는다.
이처럼 동적 웹 페이지는 계속해서 HTML 정보가 바뀔 수 있기에 렌더링이 완료되지 않은 상태에서 HTML 정보를 받으면 오류가 발생할 수 있다.
수집 방법
웹 페이지를 구분한 것처럼 데이터를 수집하는 방법도 "동적 수집"과 "정적 수집"으로 구분된다.
정적 수집
정적 수집은 멈춰 있는 페이지(정적 웹 페이지)의 HTML 정보를 얻는 것을 말한다. 일반적으로 requests 혹은 urllib 패키지를 이용해 beautifulsoup로 파싱 하여 원하는 정보를 수집한다. 해당 url의 HTML을 바로 수집할 수 있기 때문에 속도가 빠르지만, 모든 부분에 적용할 수 없다는 단점이 있다.
동적 수집
동적 수집은 계속 움직이는 페이지(동적 웹 페이지)를 유연하게 조작할 수 있는 방법이다. selenium 패키지로 chromedriver를 제어하며, 특정 url에 접속해 마우스 클릭 및 키보드 입력 등의 이벤트를 추가해 원하는 정보가 있는 페이지까지 도달 가능하다.
또한 selenium은 동적 웹 페이지가 렌더링이 진행될 때 발생할 수 있는 오류를 방지하기 위해 implicit wait와 explicit wait 기능을 제공하고 있다. 여기서 방식에 대해서는 자세히 설명하지 않지만, 렌더링이 진행될 수 있도록 딜레이를 주는 것으로 이해하면 된다.
정리
정적 수집 | 동적 수집 | |
사용 패키지 | urllib / requests | selenium |
수집 | 정적 웹 페이지 | 정적/동적 웹 페이지 |
속도 | 빠름 | 상대적으로 느림 |
파싱 패키지 | beautifulsoup(bs4) | selenium |
참고 링크
[Python/웹 크롤링] 동적/정적 페이지 차이와 그에 따른 크롤링 방법 간단정리
https://coding-kindergarten.tistory.com/27
'Web' 카테고리의 다른 글
[Web] 웹 크롤링을 위한 Fiddler와 Postman 설치 및 사용법 (1) | 2024.09.25 |
---|---|
[Web] 데이터 수집을 위한 웹 크롤링 3가지 방법 (정적 vs 동적) (1) | 2024.09.13 |
[Web] API(Application Programming Interface) 개념과 활용 (0) | 2024.04.13 |
[Web] Visual Studio Code에서 장고(Django) 사용 (0) | 2024.04.10 |
[Web] 장고(Django) 개발 환경 구축 (Windows) (0) | 2024.04.09 |