Skip to content →

Python Web Crawling으로 Raw Data 수집하기 (Selenium Library)

일전에 TechNeedle에 아이들을 대상으로 한 스타트업, Kidpass에 관해 글을 쓴 적이 있다.

6월 시점으로 KidPass이 만든 플랫폼에는 900개가 넘는 업체들이 참여를 하고 있다고 한다.  그런데 어떤 업체들이 참여하고 있을까? 

그래서 업체들의 리스트가 담긴 페이지를 들어가봤는데, 이게 생각보다 친절하게 제공되어 있지 않았다. Page Number의 구분 없이 일명 Infinite Scroll 형태로 934개를 모두 볼 수 있을 때까지 끊임없이 Scroll을 내려서 보도록 되어 있었다. 한마디로 개인이 직접 찾아보기에는 쉽지 않도록 Design이 되어 있었다.

View post on imgur.com

그냥 돌아설까 했지만, 여기에 굴할 내가 아니었다. 간만에 Python을 켜고 바로 Crawling 작업을 하기 시작하였다. 저 제목 부분만 간단하게 따오면 되는 것이니 그리 어려운 문제는 아니었기 때문이다. 그래서 이전에 잠깐 공부했던 BeautifulSoup을 쓰려고 했는데, 역시나 Infinite Scroll을 Control하면서 Crawling을 해결하기가 쉽지가 않았다. 어떻게 하면서 계속 Scroll Down을 하면서 Crawling을 할 수 있을까 Google을 뒤지다가, Stack Overflow를 들어가서 물어보니, Selenium Library를 쓰라는 답변이 꽤 있었다.

Selenium 라이브러리는 본디 Web Application 자동화를 위한 Library이다. 그렇기 때문에 지금과 같이 Infinite Scroll 기반의 웹페이지를 Crawling할 경우 Scroll Down을 자동화하는데 사용할 수도 있다고 한다. 자동화 Library 답게 갖가지 Key 조작을 Code상으로 구현할 수 있기 때문에 Infinite Scroll에 대해서 대처할 수 있기 때문이다. 그래서 이를 기반으로 간략하게 Code를 작성해 보았다. 복잡한 문제가 아니었기 때문에 BeautifulSoup 없이 Selenium으로만 구현하였다. 물론 Web Browser에 적합한 WebDriver는 사전에 설정이 완료되어야 한다.

 

Code를 대략 훑어보면, 크게 세 부분으로 나눠진다. 참고로 오용을 위해서 주요 변수 부분들은 모두 이름을 달리 변경해 놓았다.

  1. URL을 불러오는 오고 Body 부분의 Element를 가지고 오는 부분
  2. Page_Down을 해주면서 전체 Page를 자동으로 Scroll Down하는 부분
  3. 마지막으로 그 중에서 필요한 Class 부분의 이름만 가지고 와서 출력해주는 부분

Code를 실행해보면 자동으로 Chrome Browser가 실행되면서 Crawling이 시작이 된다.  아래 보는 것처럼 automated test software에 구동되고 있음이 표시가 된다. 보면 꽤나 재미있다. Chrome Browser가 알아서 자동으로 내가 설정한 Code에 기반해서 혼자 움직인다!!

View post on imgur.com

정상적으로 작업이 완료가 되었다면 아래와 같이 Crawling이 된 결과가 Console 상에 출력이 된다. Data 양이 많지 않기에 Console로 바로 출력하게 하였다. 무엇보다 그 이상의 노력을 들일 필요는 없다고 판단하였기 때문이다.

View post on imgur.com

이렇게 해서 900개가 넘는 업체를 노가다없이 출력해서 볼 수 있었다. 이후에 Excel로 대략 Data를 훑어보니, 생각보다 많은 업체들이 위치만 다른 동일한 프랜차이즈였었다. 거의 1년 사이 참여업체의 수가 3배 이상 증가하였는데 그럴 만한 이유가 있었던 것이다.

이렇게 짧은 궁금증 하나가 해결이 되었다.

Published in Programming