말랑말랑제리스타일

파이썬 셀레니움과 Beautiful Soup의 용도별 차이 본문

프로그래밍/파이썬

파이썬 셀레니움과 Beautiful Soup의 용도별 차이

제리제리 2023. 7. 4. 17:00

파이썬에서 크롤링에 대표적으로 사용되는 패키지인 Beautiful Soup과 셀레니움의 용도별 차이를 확인하고 Beuriful Soup만으로 크롤링이 가능한 페이지와 셀레니움이 필요한 페이지 예시를 봅시다.

파이썬 Beutiful Soup의 한계와 셀레니움의 필요성

파이썬에서 가장 사용하기 쉬운 크롤링 패키지가 바로 beautiful Soup일 텐데요. 파이썬 beautiful Soup에는 명확한 한계가 존재합니다.

사실 예전에도 Beutiful Soup의 한계에 대해 설명한 적이 있는데요. 간단히 설명하면 웹페이지의 자바스크립트로 생성된 파트는 크롤링이 불가능하다는 거죠. 쉽게 말하면 스크롤을 내려야 나오는 부분이나, 화면이 움직이는 부분, 계속해서 내용이 바뀌는 댓글 창 등은  Beutiful Soup으로 크롤링이 불가능합니다.

자세한 내용은 아래 링크에서 확인해 주시면 되고 그렇기 때문에 자바 스크립트로 생성된 페이지의 크롤링에는 파이썬 셀레니움이 필요합니다.

2023.06.19 - [프로그래밍/파이썬] - 파이썬 BeautifulSoup으로 가져올 수 없는 데이터

 

파이썬 BeautifulSoup으로 가져올 수 없는 데이터

파이썬 BeautifulSoup으로 크롤링에 입문하는 분들이 굉장히 많죠. 하지만 파이썬 BeutifulSoup으로 크롤링을 하기에는 궁극적인 한계가 있습니다; 바로 Javascript로 생성된 부분을 크롤링할 수 없다는

jerry-style.tistory.com

 

파이썬 셀레니움이란?

이어서 파이썬 셀레니움이 뭐냐 하면, 웹 애플리케이션 자동화 및 테스트를 위한 포터블 프레임워크라는 설명을 나무위키에서 읽어볼 수 있습니다.

좀 더 쉽고 와닿는 설명을 덧붙이면, 크롬 등의 브라우저를 자동으로 열어서 컨트롤하는 프레임워크죠.

앞서 설명한 beautiful Soup의 경우 페이지의 html을 가져오는 데에 그친다면 셀레니움은 직접 페이지를 열어서 크롤링할 수 있기 때문에 자바스크립트로 생성된 영역이나 페이지를 열자마자 보이는 영역이 아닌 부분 역시 크롤링이 가능하다는 거죠.

 

실제 페이지를 하나 예로 들어보면 구글에서 뭐든 검색을 해봅시다.

구글 검색 화면 예시
구글 검색 화면 예시

그리고 스크롤을 내리다 보면 로딩이 나오면서 추가적인 데이터가 나오죠?

이렇게 스크롤을 내려야 보이는 부분은 스크롤을 내리지 않으면 개발자 도구를 열어도 Element에 나타나지 않습니다.그렇기 때문에 셀레니움의 기능을 이용해 스크롤을 내려주고 끝까지 내린 뒤 페이지 크롤링을 시도해야 하는 거죠.

 

그렇다면 파이썬 셀레니움은 모든 웹사이트를 컨트롤할 수 있을까?

자 여기서 이제 의문이 나오죠. 셀레니움이 모든 웹사이트를 컨트롤할 수 있는지의 의문점이 생깁니다.당연히 불가능하겠죠. 경우에 따라서 크롤링을 해서는 안 되는 페이지도 있고 누군가가 크롤링을 하는 것을 꺼리는 웹사이트도 있으니까요.

대표적으로 네이버 인플루언서 팬 창이 있습니다.

네이버를 이용하는 사람이라면 인플루언서 팬 리스트를 바로 볼 수 있을 텐데요.시크릿 모드를 실행해서 그 페이지를 들어가려고 하면 로그인을 하라고 합니다.셀레니움의 기능을 이용해서 ID와 패스워드를 입력하게 할 수도 있죠.그러나 2차 인증이 두 번째 문제에 걸립니다. 여기서 막히는 거죠.물론 현재 창에서 크롤링하는 편법을 사용해서 로그인까지 할 수도 있습니다.그러나 문제가 끝나지 않죠.페이지를 빠르게 내리다 보면 에러가 뜹니다. 파이썬 셀레니움을 사용해보지 않은 사람이나 개발을 아예 모르는 사람은 네트워크 에러 비슷한 걸로 생각할 수 있지만 셀레니움으로 크롤링 몇 번 해본 개발자들은 알죠.이게 바로 네이버에서 깔아놓은 크롤링 방지라는 걸요.일정한 속도로 스크롤을 내리면 에러가 발생하기 때문에 이런 것도 예외로 처리해줘야 합니다.자 예외 처리를 해줬다고 합니다. 그럼 셀레니움으로 모든 게 해결될까요?그럴 리가요. 네이버는 강력하더라고요...해당 팬의 인플루언서 페이지로 들어가는 링크가 링크 형태가 아닌 버튼 형태로 구현되어 있고 링크를 자바스크립트 내에 꽁꽁 숨겨두었더라고요.심지어 여기까지 오면 오기가 생기죠. 그러나 이렇게 다양하게 크롤링을 막았다는 점과 로그인을 해야 해당 페이지를 볼 수 있다는 점을 생각하게 되면서 "아... 이거 잘못하면 벤 먹겠구나"라는 생각이 스치죠.그 생각이 머리를 스치자마자 포기했습니다. 물론 저는 네이버 인플루언서는 아니라서 남의 페이지에서 확인했지만 로그인한 계정은 제 계정이니까요.이렇듯 파이썬 셀레니움도 만사형통은 아니지만 사실상 가장 유용한 크롤링 방법임에는 틀림없습니다.


그럼 마지막으로 정리해 보겠습니다.

자바스크립트가 적용되지 않은 정적인 페이지는 파이썬 Beautiful Soup으로 충분히 커버가 가능합니다.

그러나 스크롤을 내려야 보이거나 동적으로 움직이는 페이지는 파이썬 셀레니움으로 크롤링해야 하죠.

마지막으로 파이썬 셀레니움으로 크롤링하려고 하는데 뭐가 잘 안 되고 막힌다 싶으면 대부분 불법이니 포기하는 게 좋은 방법입니다.

 

Comments