www(world wide web)을 탐색해서 유용한 데이터를 추출해내는 인터넷 로봇으로 생각하면된다. 어디에가서 어떤 데이터를 어떻게 추출해 올지는 이 로봇에게 명령을 전달하는 개발자가 정해서 instruction을 코드로 작성한다. web 위를 기어다니는 거미 비슷하다고해서 crawler라는 이름이 지어진것 같다. (실제 Google의 web crawler 이름은 spider다.)
web crawler가 유용한 데이터 추출을 할 수 있도록 적합한 후보자원을 획득하는 과정이다.
원하는 데이터를 얻기위해 가장 적합한 웹 페이지 링크를 효율적이게 찾고, 조회하는 과정을 계획하고 구현하는 것이 매우 중요하다. 또한 많은 데이터를 수집하기위해서 조회했던 페이지를 다시 조회해서 데이터 수집에 redundant data가 발생하지 않도록 url들을 잘 관리하는것이 중요하다. 때때로 circular-links가 있는 상황에서는 더욱 url관리에 주의를 기울여야 한다.
그리고 조회하는 website의 구조, web pages의 갯수 등 crawling하려는 웹 자원에 대한 이해가 필요하다.
Web scraping이라는 단어도 자주 사용되는데, web scraping은 webpage로 부터 유용한 데이터를 추출해오는 것 action 자체를 web scraping이라고 한다. (반드시 인터넷상의 데이터 추출이 아니여도, 해당 시스템의 files에서부터 데이터를 추출해오는것을 data scraping이라고 한다)
요즘 실습에서 BeautifulSoup 객체를 만들어서 html source code를 받아와서 데이터를 추출해내는 과정이하고 생각하면 될것같다. 조회한 웹 페이지의 html의 내용을 분석하고, html tree에서 원하는 tag element를 찾아서 원하는 데이터를 추출해오는 과정인것이다.
데이터 분석가에게 raw html이 주어질수도있고 또는 online web scraper를 통해 데이터 추출하게 될수도있다. 웹페이지들의 구조/내용이 자주 바뀌기때문에 웹페이지의 html을 가져오는 과정과 scraping하는 과정이 분리되어있으면 바뀐 html 내용에 따라 scraping 코드를 부분적으로만 수정해도 되기때문에 지속적으로 바뀌는 웹사이트들에서 데이터를 가져오는데에 더 유리하다.
하나의 웹페이지에서부터 데이터를 추출해오는것이 목적이라면 web scraping만으로 충분하다. 만약 여러 urls를 관리하고 여러 페이지들에서부터 데이터를 추출해오려면 crawler를 통해 적절한 후보 웹페이지들을 찾고, 각 페이지의 html에서부터 web scraper를 통해 원하는 데이터를 추출해 올 수 있다.
이번 포스트의 내용은 ScrapeZone이라는 회사의 블로그 포스트에서 읽은 내용을 정리했다. 데이터 수집을 위한 web crawling과 web scraping을 더 효율적으로 할 수 있도록 API를 제공하는 회사이다. "Data fetching operation"을 더 정확하게 효율적으로하기 위해서는, 그리고 더 복잡하고 많은 량의 데이터를 수집하기 위해서는 web crawler와 web scraper의 디자인에도 많은 고민과 노력이 들어가야하 하는것 같다.
References: