반응형
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
반응형