크롤러 구현을 위한 사전조사
Last updated
Last updated
이번 프로젝트에서는 빅데이터라는 주제와 세종대학교라는 특정한 범위 내에서의 주제의 정보가 필요하다. 그 수많은 정보를 직접 스크랩할 수 없으므로, 웹에서 표현되는 세종대학교에 맞는 특정 정보를 자동으로 크롤링해주는 프로그램을 제작할 필요성이 있다. 이를 위해서 Python의 라이브러리로 존재하는 BeautifulSoup와 Selenium을 선정하였다.
BeautifulSoup 라이브러리는 HTML 과 XML 파일로부터 특정 데이터를 가져오기 위해서 HTML의 태그들을 구성을 트리 형태로 만들어주어서, 특정 태그에 접근하기 쉽게 만들어주는 라이브러리이다.
또한 웹은 HTTP 통신으로 데이터를 주고받기 때문에, 웹 크롤러도 이 데이터를 받기 위해서 Requests 라는 Python 라이브러리가 필요하다. 동작 구성은 아래와 같다. Requests 라이브러리로 HTML 파일의 데이터를 받은 후, BeautifulSoup 라이브러리를 통해서 HTML 파일의 데이터에 있는 태그들을 트리형태로 구성한다.
그 이후 사용자가 원하는 태그에 접근하여, 해당 태그 속에 있는 유의미한 정보를 가져와서 데이터베이스에 저장한다. BeautifulSoup의 장점은 Requests를 사용한 HTTP 통신을 이용하기 때문에 웹에서 보여주는 시각적인 정보를 Browser에 표시할 필요가 없다.
그러므로 정보 파싱 및 크롤링 속도가 빠르다. 하지만 단점으로서는 Sing Page Application 구조 및 Javascript를 이용한 비동기 처리된 데이터들은 파싱할 수 없다는 단점이 있다.
Selenium 라이브러리는 일방적으로 Web App을 테스트할 때 주로 사용하는 프레임워크이다. 일종의 Web 동작 자동화 라이브러리로서 사용자가 Browser을 직접 조작하지 않아도 자동으로 탐색해주고 원하는 정보를 찾는다.
Selenium의 기능 중에서는 컴퓨터가 직접 Web Browser을 띄운 후 지정 명령에 따라서 동작할 수 있도록 webdriver이라는 Api를 제공한다. 따라서 Selenium을 사용하기 위해서는 사용할 Browser의 driver이 필요하다.
이 후, Python을 통한 Selenium의 Api와 Browser Driver을 연결하면, 자동화된 Web 동작이 가능하다. Selenium의 장점은 직접 Web Driver을 통해서 원하는 정보에 접근하기 때문에 실제 사용자가 웹을 이용하였을 때, 얻을 수 있는 정보에 모두 접근 가능하다는 장점이 있다.
하지만 실제 웹 브라우저와 같은 Web Driver을 사용하기 때문에, 사용자가 필요 없는 정보도 전부 보여지게 된다. 그래서 내가 필요한 정보를 얻는데까지의 속도가 느리다는 단점도 있다.
Python의 BeautifulSoup와 Selenium 라이브러리의 차이는 다음 표와 같다.
실제로 사용하는 Web 사이트에서는 비동기(Async)통신과 동기(Sync)통신이 공존하고 있다. 예로 들면, HTML 파일은 그대로 존재하면서 Javascript 및 Jquery를 이용한 비동기식 통신에서는 Selenium이 반 필수적이다.
하지만 Selenium을 사용하지 않아도 충분히 가능한 사이트에서는 BeautifulSoup를 사용하는 것을 크롤링 속도를 높일 수 있으므로, 이번 프로젝트에서는 BeautifulSoup를 사용하는 것을 기본으로 설정하며, BeautifulSoup를 이용해서 수집하지 못하는 Web 사이트 경우에는 Selenium을 이용해서 정보를 수집하는 것을 지향하는 방향으로 나아간다.
대다수의 Web 사이트에서는 Robots.txt 라는 파일을 Web Server에 가지고 있다. 이 Robots.txt 파일에는 해당 웹 사이트에 로봇이 접근하는 것을 방지하기 위한 접근 제한에 대한 설명을 기술하고 있다.
이 파일은 본래 로봇으로 인한 요청으로 Web Serve에 부하가 가지 않도록 하는 안내도이다. 그러므로 본 프로젝트에서의 크롤링 프로그램에서는 프로젝트를 진행할 때, Robots.txt 파일을 준수하며 크롤링 프로그램으로 인한 요청으로 해당 Web Server에 부하가 가지 않도록 하기 위해서, 크롤링 속도를 고의적으로 낮추었으며, 필요한 정보 수집 이외의 목적으로 정보를 수집하지 않도록 프로그램 제작을 하도록 지향한다.
BeautifulSoup
Selenium
문서 Text를 가져오기 때문에, 크롤링속도가 빠름.
비동기 통신을 이용한 정보에는 접근이 힘듦.
Web Driver 기반 크롤링이기 때문에, 정보 수집 속도가 다소 느림.
비동기 통신을 이요한 정보에도 접근 가능.