본문 바로가기
nodejs

[node.js] node.js에서 데이터 수집하기

by jinbro 2017. 7. 2.
[node.js]
- 자바스크립트 런타임
- 자바스크립트를 해석할 인터프리터 + 라이브러리(모듈) 


[데이터수집]
- 크롤링 : 데이터 수집 과정을 크롤링(crawling)이라 함
- 두 단계로 나뉘어짐 
1) 스크래핑(scraping) : 데이터를 가져오는 방법
- 데이터가 존재하는 곳의 형태에 따라 스크래핑 방법을 정해야함 : 인증이 필요하거나 어떤 버튼 누르는 절차가 필요하거나 등

2) 파싱(parsing) : 가져온 데이터에서 필요한 데이터를 추출하는 방법

- 각각의 역할에 맞는 모듈을 사용하기 
1) 스크래핑 : http, https, request
2) 파싱 : cheerio, JSDOM

- 두 단계를 합친 모듈이 있을 것


[node 모듈을 사용해서 데이터 수집해보기]
- request, cheerio 모듈 사용하기 : 디렉토리 만들고 -g 로 모듈 인스톨하지말고 해당 디렉토리에서만 사용하게 인스톨하기

1) request : http 요청해서 응답 결과받기
const request = require('request');
const url = 'http://news.nate.com/recent?cate=pol&mid=n0201&type=c&date=20170702';

request({
     uri: url,
     method: 'GET',
     headers: {
          'Accept-Charset': 'utf-8'
     }
}, function(err, res, body){
     console.log(body);
});


request(url, function(err, res, body){
     if(err){
          throw err;
     }

     console.log(body); //응답받은 html 문서의 body tag 내용을 콘솔에 출력함
});
- 내장모듈인 http를 사용해도되나 request 모듈이 사용하기 편함 : https도 지원
- async 인 것은 코딩할 때 까먹지않기
- request는 req HTTP 구성(첫번째 파라미터)하고 요청하고, 응답을 받으면 콜백함수 호출
- res는 response HTTP를 볼 수 있음
- npm 제공 request api 문서 : https://www.npmjs.com/package/request
=> 지금은 응답받은 문서하나를 스크래핑한거지만(가장 기본), request 모듈 api 문서를 보면 다양한 상황에 대한 대처방법이 있음
=> 예를 들어 페이지 내 페이지 접근 : pipe 제공


2) cheerio : 받아온 데이터에서 필요한 데이터 추출하기
const cheerio = require('cheerio');
const $ = cheerio.load(body, {
    decodeEntities: false
});

console.log( $('.list_allnews li .cont_thumb .tit_thumb .link_txt') );
- $ 변수에 스크래핑한 데이터를 로드하고(cheerio 메서드), jquery처럼 사용 : querySelector나 querySelectorAll
- load할 때 옵션값은 두번째 파라미터 : decodeEntities를 false로 주지않으면 텍스트 노드 한글이 다 깨지더라구요
- 필요한 데이터를 추출하기위해서 DOM API를 어떻게 구성해야할지 알아놓기 : CSS Selector
=> 필요한 cheerio 메서드 사용하기 : object 타입으로 리턴받음(기본적으로)



[결론]
- 좋은 모듈은 많음 : 적절하게 혼용하면 됨, 좋은 모듈을 만들 수 있는 개발자가 되는 것이 중요하겠지?
=> 그럴려면 기초는 탄탄해야한다는 것

- 앞으로 정치 키워드 관련 크롤러를 만들기위해서 : 여러 사이트를 어떻게 처리할건지, 데이터를 파싱한 후 어떤 형태로 저장할건지 등 알기


[참고자료]
- 1등 공신) 안수찬님 블로그, 데이터 수집하기 : https://ansuchan.com/nodejs-web-crawling-with-cheerio/
- 위키피디아, 웹 스크래핑 : https://en.wikipedia.org/wiki/Web_scraping

- 위키피디아, 파싱 : https://en.wikipedia.org/wiki/Parsing



댓글