NodeJS 를 이용해서 웹 사이트 스크래핑(크롤링) 하는 방법 |
환경: Eclipse Mars |
스크래핑이란 웹 사이트에 접속해서 HTML을 다운받은 후 데이터를 가공, 수집하는 행위를 말합니다. 방대한 웹 페이지를 사람이 일일이 분석해서 필요한 정보를 얻기에는 비효율적입니다. 스크래핑은 사람 대신 웹 문서를 검색하고 분석하는 일을 자동으로 수행합니다. 물론 스크래핑 프로그램은 사람이 작성해야겠죠. 수집한 정보는 데이터베이스에 저장했다가 재활용합니다. 요즘은 스크래핑 서버로 NodeJS 를 많이 이용합니다. 오늘은 기본 기능인 웹 사이트로 접속해서 HTML 전체를 다운받아 파일로 저장하거나 콘솔에 출력해 보겠습니다.
▼ 먼저 http 와 fs 모듈을 이용해서 웹사이트 정보를 다운받아 저장해 보겠습니다. 분석을 위한 가장 기초적인 로직입니다. 접속 URL 은 제가 운영하는 블로그 주소 입니다. http 모듈을 이용해서 사이트에 접속한 후 fs 로 파일을 저장합니다.
var http = require('http'); var fs = require('fs'); var url = "http://mainia.tistory.com/2884"; var path = "article.html"; var outfile = fs.createWriteStream(path); http.get(url, function(res){ res.pipe(outfile); res.on('end', function(){ outfile.close(); console.log("file down end."); }); });
▼ 그림처럼 http 모듈의 get 함수를 이용하면 입력한 주소에 소스를 다운받을 수 있습니다.
▼ 다음은 분석 모듈을 이용해서 HTML 본문을 콘솔에 출력해 보겠습니다. cheerio-httpcli 모듈을 다운받습니다. 이 모듈은 파일을 쉽게 다운로드 할 수 있을 뿐만 아니라 jQuery 처럼 웹 페이지 내에 지정한 요소를 쉽게 꺼낼 수 있습니다. 앞으로 웹 페이지 분석할 때 자주 사용할 모듈입니다. npm 을 이용해서 모듈을 다운 받습니다.
C:\ > npm install cheerio-httpcli --save
> spawn-sync@1.0.15 postinstall D:\node_modu les\spawn-sync > node postinstall
WorkingServer@0.0.0 D:\Project\ProjectNodeJS\workplace\WorkingServer `-- cheerio-httpcli@0.7.2 +-- @types/cheerio@0.22.7 +-- @types/node@8.9.4 +-- async@2.6.0 | `-- lodash@4.17.5 .....(생략)
npm WARN WorkingServer@0.0.0 No repository field. |
▼ 소스는 다음과 같습니다. cheerio-httpcli 모듈의 fetch 함수를 사용합니다. fetch 에 필요한 인자는 “URL”, “파라미터”, “콜백 함수” 입니다. 파라미터는 아무것도 없으므로 공백을 넘깁니다. URL 을 접속해서 가져온 정보는 $ 에 담겨 있습니다. html() 함수를 이용해서 값을 꺼냅니다.
var client = require('cheerio-httpcli'); var url = "http://mainia.tistory.com/2884"; var param = {}; client.fetch(url, param, function(err, $, res){ // 에러 체크 if(err){ console.log("err"); return; } var body = $.html(); console.log(body); });
▼ 그림은 cheerio-httpcli 을 이용해서 추출한 HTML 을 콘솔에 출력한 결과 입니다.
'NodeJS' 카테고리의 다른 글
리눅스 CentOS 에 NodeJS 설치해서 웹 서버 띄우는 방법(Oracle Virtual Box 환경) (0) | 2018.11.10 |
---|---|
NodeJS IDEL 통합환경 개발툴 Microsoft Visual Studio Code 무료 사용 (0) | 2018.10.22 |
NodeJS 패키지 관리 package.json 만드는 방법 (0) | 2018.10.21 |
이클립스에 NodeJS 개발환경 꾸미는 방법과 웹 서버 구성하기 2 (0) | 2018.10.05 |
NodeJS 웹 서버 실행해서 웹 페이지 표현하는 방법, Express 설치 (0) | 2018.09.28 |
Node JS 작업 스케줄러 모듈을 이용해서 배치 작업하는 방법 (0) | 2018.08.16 |
이클립스에 NodeJS 개발환경 꾸미는 방법과 웹 서버 구성하기 1 (0) | 2018.08.03 |
NodeJS Express Generator 모듈을 사용해서 앱 개발하는 방법 (0) | 2018.07.31 |