본문 바로가기

웹개발/Node.js

[Node.js] 웹 크롤링 - 네이버 실시간 검색어 가져오기

반응형

 

What is Web Crawling?

웹 크롤링은 Web상에 존재하는 수많은 데이터를 파싱하여 필요한 데이터만 추출하는 기법입니다. 

 

 

시작하기에 앞서 
$ npm init -y

npm init 명령어는 node 프로그램을 시작하는 명령어로 package.json 파일을 생성을 돕습니다.

name, version, discription 등이 출력됩니다.

 

크롤링에 필요한 두 라이브러리를 설치합니다.

  • Axios : 브라우저와 Node 환경에서 사용하는 Promise 기반의 HTTP Client로 사이트의 HTML을 가져올 때 사용하는 라이브러리입니다.
  • Cheerio : Axios의 결과로 받은 데이터에서 필요한 데이터를 추출하는데 사용하는 라이브러리 입니다.
$ npm install --save axios cheerio

 

 

네이버 실시간 검색어 가져오기

네이버 접속 https://www.naver.com/

   

검사를 눌러서 데이터를 가져올 HTML 태그 이름과 Class 이름을 확인합니다.

 

 

 

전체 코드 

사용할 cheerio 함수들

  • load : html 문자열을 받아 cheerio 객체를 반환
  • children : html selector를 문자열로 받아 cheerio 객체에서 선택된 html 문자열에서 해당하는 모든 태그들의 배열을 반환
  • each : 콜백 함수를 받아 태그들의 배열을 순회 하면서 콜백함수를 실행
  • find : html selector 를 문자열로 받아 해당하는 태그를 반환

cheerio의 함수들을 사용하여 네이버의 html 페이지에서 실시간 검색어 목록만을 반환 받아 log 함수로 출력하기

const axios = require("axios");
const cheerio = require("cheerio");
const log = console.log;

const getHtml = async () => {
  try {
    return await axios.get("https://www.naver.com/"); // axios.get 함수를 이용하여 비동기로 네이버의 html 파일을 가져온다. 
  } catch (error) {
    console.error(error);
  }
};

getHtml()
  .then(html => {
    let ulList = [];
    const $ = cheerio.load(html.data);
    const $bodyList = $("div.ah_list.PM_CL_realtimeKeyword_list_base ul.ah_l").children("li.ah_item");

    $bodyList.each(function(i, elem) {
      ulList[i] = {
          title: $(this).find('span.ah_k').text(),
          url: $(this).find('a.ah_a').attr('href')
      };
    });

    const data = ulList.filter(n => n.title);
    return data;
  })
  .then(res => log(res));
$ node webcrawling.js

반응형

'웹개발 > Node.js' 카테고리의 다른 글

npm 명령어  (0) 2019.12.28