Crawling, Scrapping… 갑자기 뭔 신기술처럼 대접받는

1 minute read

요즘 갑자기 신기술처럼 포장되는 것 중 하나 그냥 Html파싱, 퍼오기라고 생각해서 이력서에도 굳이 안 쓰는데 시시콜콜하게 다 써놔야하나 하는 생각이 든다. 별것 아니고 계속 사용되어 왔지만 갑자기 주목받는 기술 중 하나

Crawling, Scrapping을 구분해보면

구분 할 필요가 있긴한지 잘 모르겠지만… 굳이 구분해서 쓰는 사람이 있을지 모르니 알아두자 혼용되서 사용되기도 하고.. 굳이 구분하기도 하는데 이게 맞는지 정확하지는 않다.

Crawling

웹사이트를 걍 다 퍼오는 개념으로 링크를 타고 다음링크를 다시 타고들어가는 기능(Spider)이 중요하다. 한 주소를 가지고 거기있는 링크를 타고타고 또 들어가야 하는데 이것을 꼼꼼히 구현하는게 생각보다 힘들다. depth가 많아질수록…  이 부분은 Nutch, Scrapy 같은 라이브러리에서 지원을 해 주니 굳이 따로 구현을 할 필요는 없다.

Scrapping

스크래핑은 .. 사실 그냥 파싱 아닌가 특정 웹페이지에서 원하는 데이터를 뽑아내는 기술이다.

웹페이지를 만들 때 구조적으로 만드는게 구현도 더 쉽기 때문에 html의 id, class에는 보통 패턴이 숨어있다. 이걸 찾아서 데이터를 찾아오게 코딩을 해 주면 된다. 가끔 막코딩된 페이지는 별 수 없다. 막파싱 해야한다 .dom 계층을 무식하게 따라가면 노가다는 승리한다.

이런식으로 특정 사이트를 정해놓고 원하는 데이터를 뽑아내는 것은 쉽다.

카톡, 블로그, 페북도 요즘 이런걸 지원한다. 글쓰기 창에 링크를 박으면 해당 주소의 대표이미지와 요약정보를 보여주는데 보통 Meta데이터에 포함된 정보를 보여준다. 여기서, Meta데이터가 없을 경우에 알아서 정보를 표현 해 주는 기능을 만들려면 머리가 좀 아플거다. (아직까지 알아서 잘 되는건 못 봤다)

여기서도 BeautifulSoup, Jsoup, Gson 등 각 언어별로 Html, Xml 라이브러리가 있으니 갖다 쓰자.

JS를 이용해 데이터가 다이내믹하게 변하는 웹사이트는 좀 다른 노력이 필요하다. Ajax,Websocket, AngularJS등을 이용하는 페이지는 그냥 HTML을 다운받아 파싱하면 뻘 데이터가 나온다. 이럴 때는 WebDriver를 써야한다. 파싱은 python의 Selenium라이브러리를 이용해서 phantomJS 드라이버를 사용하면 편하다. 이렇게 하면 브라우저로 보는것과 HTML을 얻을 수 있다. 참고로.. 암표 봇이나 수강신청 봇도 이런기술을 이용해서 만들면 된다.(IP차단당할수도있다)

사용법은 공식사이트에서

http://phantomjs.org/ http://www.seleniumhq.org/ https://www.crummy.com/software/BeautifulSoup/ https://scrapy.org/ http://nutch.apache.org/

구석구석 잘 알고 쓰면 좋지만… 간단한 기능을 만드는데 모든 기능을 이해할 필요는 없다. 그래도 기술의 구조와 개념정도는 이해하고 쓰는게 좋은 것 같다.