크롤링
웹페이지 안에 있는 필요한 데이터를 추출하는 것
크롤링에 필요한 모듈은 2가지가 있다.
axios
- Promise API를 활용하는 HTTP 비동기 통신 라이브러리
- 크롤링 할 웹페이지를 가져오는데 사용한다.
cheerio
- HTML 문서를 파싱하여 필요한 정보만을 가져올 수 있도록 도와주는 모듈이다.
- jQuery 문법과 유사하다.
1. 폴더 생성
2. npm 초기화
npm init -y
3. 필요한 패키지 설치
- axios, cheerio, express
npm i axios cheerio express
- nodemon
npm i -g nodemon
4. index.js 코드작성
- 크롤링 할 사이트와 DOM 구조에 맞게 가져오도록 작성하기
나는 조만간 일본 여행을 갈 예정이라서 네이버에 “도쿄 여행” 이라고 검색했을때 나오는 URL과 게시물을 긁어와 보고 싶었다.
const axios = require("axios")
const cheerio = require("cheerio")
const express = require("express")
const log = console.log
const app = express()
const getHtml = async () => {
try {
return await axios.get("https://search.naver.com/search.naver?where=view&query=%EB%8F%84%EC%BF%84%20%EC%97%AC%ED%96%89&sm=tab_opt&nso=so%3Add%2Cp%3A&mode=normal&main_q=&st_coll=&topic_r_cat=");
} catch (error) {
console.error(error);
}
};
app.get('/home', function(request, response) {
getHtml().then(html => {
let ulList = [];
const $ = cheerio.load(html.data);
const $bodyList = $(".lst_total li");
$bodyList.each(function(i, elem) {
ulList[i] = {
title: $(this).find('.api_txt_lines').text(),
url: $(this).find('.api_txt_lines').attr('href'),
image_url: $(this).find('.api_get').attr('src'),
date: $(this).find('.sub_time').text()
};
});
const data = ulList.filter(n => n.title);
return data;
})
.then(res => {
// log(res)
response.send(res)
})
})
app.listen(8080, () => log('connected'))
5. 실행
- 콘솔창
$ nodemon index.js
[
{
title: '[두티일상] 10월이 가고 있다구~ 내 20대도 가고 있다구 ~샀어오 ㅎㅎ 산뽀부모님께서 1월 중에 같이 일본에 놀러가자고 하셨어오 여행경비 내주신다고 파워 계획형은 가만히 있을수 없쥬 !! 삿포로랑 오사카랑 도쿄
중 고민고민 여행 가려면 아쥬 천천히 취업해야게따 키키',
url: 'https://blog.naver.com/dooyein/222914987411',
date: '1분 전'
},
{
title: '아이랑 나트랑 여행 계획하기(나트랑 항공권, 나트랑 호텔 예약)여행하기하고 오려고 해요. 우리 부부가 정한 기준에 일단 추운 날씨가 아닌 나라는 빼고, 여름 옷을 싸서 짐도 가볍고, 한국이 추울 때 더운 나라에
서 힐링하자가 목표였어요. 그래서 일본 등은 가까워도 제외되고, 도쿄...',
url: 'https://blog.naver.com/k50284/222914978709',
date: '11분 전'
},
{
title: '블챌일기첫 혼자여행이 도쿄인데.. 복잡한걸 싫어해서 그런가. 흠, 비행기 보니까 jal이나 ana통해서 하네다 입국 생각하고 있는데.. 일단 월급 들어오면 예약할 예정이라 계속 보고있다. 일본스타벅스카드에 돈이
남아서...',
url: 'https://blog.naver.com/kkek09/222914978177',
date: '11분 전'
},
{
title: '주간일기 챌린지 20 (20221024-20221030)2022년 10월 25일 화요일 여행도서관 갔는데 광주 엽서를 무료로 받을 수 있었다눈? 생가고다 고퀄리티... 벌써 단풍이 들었어♥ 오랜만에 먹은 도쿄바나나 파이 완전 맛있던
데? 아웅... 토익... 공부하는 게 힘든 게...',
url: 'https://blog.naver.com/qotmf/222914976339',
date: '13분 전'
},
...
]
- 웹서버
728x90
반응형
'개발공부 > NodeJS' 카테고리의 다른 글
Nodejs 내장 모듈과 객체 (0) | 2023.05.27 |
---|---|
자주 사용하는 자바스크립트 문법 (1) | 2023.05.27 |
[Node.js 프로젝트 투입 일주일 전] 클러스터 모드 (0) | 2023.05.21 |
[Node.js 프로젝트 투입 일주일 전] 모듈 Module Require/Import (0) | 2023.05.21 |
[Node.js 프로젝트 투입 일주일 전] Nodejs 란? (0) | 2023.05.17 |
댓글