종종 글을 읽다보면 웹크롤링을 하거나 html 파싱을 한다는 말을 자주 듣는다. 또는 스크래핑을 한다고도 하는데 용어가 혼동되기도 한다.
원래의 뜻을 살펴보면 크롤(crawl)은 기어가다는 뜻이다. 스크랩(scrap)은 단편의 정보를 뜻하고 파싱(parse)은 분석한다는 뜻이 강하다.
위 세가지를 종합해보면 기어다니면서 단편의 정보를 모아서 분석한다? 응? 말되네?
최신 빅데이터와 데이터 수집을 위해서 크롤링이나 스크래핑을 많이 하는 추세다. 그리고 크롤링과 스크래핑을 구별하는 것은 크게 의미가 없다고 본다. 대략 크롤링과 스크래핑은 인터넷의 정보를 모으는 일을 생각하면 된다.
그러면 파싱이란?
예를들어 시간에 대한 표현을 보면 "2019년 12월 10일"이라면 표현이 있다. 이 표현을 '년' 앞에는 년도가 '월'앞에는 월이 '일' 앞에는 day가 있다는 규칙을 알면 컴퓨터가 문자로된 날짜를 분석할 수 있다. 그러면 년도만 추출하거나 월만 추출하거나 하는 여러가지 일들이 가능하다.
이런 것들을 하는 작업이 파싱이다.
위키백과 설명을 보면 언어학 적인 측면에서 문장해석을 하여 문장 구조를 결정하는 것을 말한다.
컴퓨터 컴파일 과정에서도 파서가 있는데 역시 프로그래밍 코드의 구문을 해석하기 위한 도구이다.
어찌되었든 간에 결국 파싱은 우리가 원하는 의미를 찾는 해석과정이라고 보면 된다.
html 파싱이란 html표현으로 된 문서에서 원하는 정보를 우리가 원하는 정보 또는 표현으로 가공하는 것이다.
크롤러는 구글 검색엔진 구글 크롤러 네이버나 다음과 같은 포탈사이트의 검색엔진 크롤러 등이 있는데 이런 크롤러는 자동화된 봇(bot)이다. 따라서 끊임없이 웹페이지를 수집하고 정보를 가져간다. 이렇게 크롤러가 쑤시고 다녀야 없어진 사이트나 새롭게 만들어진 사이트에 대한 정보가 갱신되고 우리는 언제나 최신상태의 웹 서핑을 할 수 있는 것이다.
크롤링은 어려울까?
아무튼 우리가 관심갖고 있는 크롤링은 특별한 기술이 아니다. 단지 웹사이트의 구조를 파악하고 필요한 정보를 빼내오는 단순한 작업일 뿐이다. 물론 봇(bot)으로 자동화를 시켜야하기 때문에 기본적인 프로그래밍 지식은 필요하긴 하다.
하지만 어렵지는 않다. 옛날에 냇가의 모래에서 사금을 캐는 작업이라고 생각하면 된다. 기본적인 크롤링만배운다면 응용보다는 비슷한 작업의 반복이다.
크롤링의 주의할점
크롤링은 웹페이지에 접속하는 작업이다. 그리고 데이터를 요청을 할텐데 내가 원하는 데이터를 수집하려면 해당 페이지에 요청(request)을 여러번 해야한다고 하자. 이때 요청이 너무 많은 작업이라면 이것은 문제가 될 수 있다. Ddos 공격까지는 아니라도 서버에 부하를 주기 때문이다.
그리고 내가 크롤링을 한다면 또 다른 누군가도 같은 정보를 크롤링 할 가능성도 있다. 이렇게 수많은 bot들이 인터넷 상에서 기어다니고 있다. 따라서 크롤링을 하기전에 먼저 해당 서버의 robots.txt를 파악하고 크롤링을 허용하는지 먼저 확인한 후에 작업을 해야한다. 그리고 크롤링을 할 때 가능하면 너무 짧은 텀을 주는 것은 좋지 않다. delay에 관한 것 역시 robots.txt 에 명시되어 있다면 그대로 하거나 몇초 간격으로 규칙을 두고 텀을 두는 것이 좋다. 안그러면 ip차단을 당할 수도 있기 때문이다.