ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Node.js] node.js환경에서 웹 크롤링 하기(cheerio-httpcli)
    개발/Javascript 2018. 11. 19. 00:05

    웹 크롤링(웹 스크래핑)은, 웹 페이지의 경로를 통해 HTML 정보를 가져와서, 파싱을 통해 필요한 정보만 가공하는 것을 의미합니다. 대표적인 예로, 네이버 실시간 검색어 결과를 가져온다던지, 실시간 환율이나 주식 정보를 가져와서 이걸로 어떠한 프로그램을 만드는 것을 예로 들 수 있습니다.

     

    대표적인 웹 크롤링 라이브러리는 python 환경의 bs4를 예로 들 수 있습니다. 그러나, 이번 포스팅에서는 node.js 환경에서도 쉽게 웹 크롤링을 할 수 있게 하는 모듈을 소개하고자 합니다.

     

    사실, node.js 환경에서도 크롤링을 가능케하는 모듈은 여러가지가 있습니다. 대표적으로, cheerio가 있지만, 제가 사용해본 결과 가장 간단하게 사용할 수 있는 cheerio-httpcli 모듈을 예로 들겠습니다.

     

    cheerio-httpcli 모듈은 jquery selector을 기반으로 파싱을 하기 때문에, jquery에 관련된 지식이 약간(?)이라도 있으면 쉽게 사용가능하다는 것이 큰 장점입니다.

     

    요번에는 간단하게, 제 티스토리 블로그의 포스팅 제목들을 파싱해서 가져오는 것을 해보겠습니다.

     

    설치

    npm install cheerio-httpcli
    
    일단, cheerio-httpcli 모듈을 설치해줍니다

     

    준비

    앞서, cheerio-httpclijquery selector을 기반으로 파싱을 한다고 설명드렸기 때문에, 우리는 티스토리 블로그의 ''포스트 제목''에 대한 selector을 알아야 합니다

    • 포스트 제목에 대한 selector을 알기 위해, 일단 블로그에 접속합니다.(크롬기준)

    • 그리고, 현재 페이지의 html을 보기위해, F12를 눌러서 개발자 도구에 진입합니다.(윈도우 환경 기준)
    • 그 후 Ctrl+Shift+C 키를 눌러서 포스트 제목을 누르면, 크롬의 개발자 도구가 알아서 해당되는 html class를 찾아줍니다.

    이렇게, 우리는 티스토리의 포스트 제목이 tit_post라는 클래스를 가지고 있음을 알게 되었습니다.

    크롤링

    이제 본격적으로 cheerio-httpcli 모듈을 통해, 크롤링을 해보겠습니다.

    var client = require('cheerio-httpcli');
    
    let url = 'https://hanswsw.tistory.com/';
    var param = {};
    
    
    client.fetch(url, param, function(err, $, res){
        if(err){
            console.log(err);
            return;
        }
    
        $(".tit_post").each(function(post) {
            console.log($(this).text());
        });
    });
    

    cheerio-httpcli모듈을 불러와서, fetch함수를 통해 url을 요청하고, jquery selector을 통해, 원하는 부분을 파싱할 수 있습니다.

    params로, url 요청에 필요한 params를 지정해 줄 수 있지만, 지금 예제에는 필요하지 않으므로 비워두었습니다.

    모두 알다시피, 블로그에 포스트는 여러개입니다. 그러므로, each함수를 통해, 모든 포스트 제목을 출력하도록 하였습니다.

    결과

    [Node.js] moment.js로 날짜(date)관련 작업을 쉽게하기
    [Node.js] mysql을 쉽게 동기식으로 사용해보자! (sync-mysql)
    [Node.js] async 모듈을 통해 동기식으로 처리해보자
    

    참고: (cheerio-httpcli Docs)

     

     

     

     

    댓글

Designed by Tistory.