나를 위한 기록들

request, cheerio를 이용하여 웹 크롤링하기 본문

JS/크롤링

request, cheerio를 이용하여 웹 크롤링하기

lyasee 2017.09.05 00:06

request, cheerio모듈을 이용해서 tistory 메인화면 크롤링



request, cheerio 모듈을 설치

npm install --save request
npm install --save cheerio


request 모듈 사용법 https://www.npmjs.com/package/request

var request = require('request');
request('http://www.google.com', function (error, response, body) {
console.log('error:', error); // Print the error if one occurred
console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
console.log('body:', body); // Print the HTML for the Google homepage.
});


request 모듈로 tistory.com 크롤링

const request = require('request');
const cheerio = require('cheerio');

request('http://tistory.com', function (error, response, body) {
if(error) throw error
console.log('body: ', body);
});


결과


원하는 부분만 크롤링하기, cheerio 이용

cheerio 모듈 사용법 https://www.npmjs.com/package/cheerio


크롬 - 검사를 이용해 엘리먼트 찾기


반복되는 부분 찾기


recomm_blog 클래스가 반복되는것이 보였다 태그에서 Copy selector

#mArticle > div.tistory_recomm > div.recomm_blog 이부분을 가지고 반복문을 돌릴예정




소스코드( 제목, 작성자만 크롤링 )

const request = require('request');
const cheerio = require('cheerio');

request('http://tistory.com', function (error, response, body) {
if(error) throw error
$ = cheerio.load(body); // request모듈을 이용해서 가져온정보를 넣어줌
let json = [], title, writer
$('#mArticle > div.tistory_recomm > div.recomm_blog').each(function(index, ele){ // <div class="recomm_blog">를 반복
title = $(this).find('a > .tit_subject').text() // a태그 아래에 class="tit_subject"의 텍스트(제목)
writer = $(this).find('a > .txt_writer').text() // a태그 아래에 class="txt_writer"의 텍스트(작성자)
json.push({ title: title, writer: writer })
});

console.log('json: ', json);
});


결과

json: [ { title: '몸의 회복을 위한 초간단 공마사지', writer: '일다님' },
{ title: '누구나 따라 하기 쉬운 \'알로에\' 삽목', writer: '키키로님' },
{ title: '생크림까지 가득, 노오븐 오레오케이크', writer: 'S diary님' },
{ title: '강돌로 쌓은 무주 지전마을의 곡몰길', writer: '눌산님' },
{ title: '롯데 필수 전력으로 자리 잡은 번즈', writer: '지후니(심종열)님' } ]




0 Comments
댓글쓰기 폼