웹 크롤링을 이용해 네이버 웹툰 페이지에 있는 프리뷰들을 모두 수집하고,
그것을 통해 새로 html파일에 정리하는 예제를 만들어보겠습니다.
● getSrc.js
프리뷰들의 img src 및 정보들을 data.json에 json형식으로 저장해주는 모듈
var request=require('request');
var cheerio=require('cheerio');
var fs=require('fs');
var url="http://comic.naver.com/webtoon/weekday.nhn";
//getting img srcs from the url
function getSrc(){
var dataArr=[];
var dataPath='data.json';
request(url, async function(err, res, body){
var $=cheerio.load(body);
var lastLen=$('.col').eq(6).find('img').length;
//it means the length of last one, sunday
$('.col ').each(async function (day, item){
var index=0;
$(item).find('img').each(function(num, item){;
var src=$(item).attr('src');
if(src.substr(src.length-3, 3)=='jpg'){
console.log(day+', '+index);
var data={
day:day,
num:getNumberInFormat(index),
title:'No Tiltle yet',
src:src
};
index++;
dataArr.push(data);
}
//console.log(day+' , '+num);
if(day==6 &&num==lastLen-1){
//this means last, should be modified
fs.writeFileSync(dataPath, JSON.stringify(dataArr));
console.log('wrote json file!');
}
});
});
});
};
function getNumberInFormat(num){
var min=0, max=99;
if(min<=num && num<=max){
if(0<=num && num<=9){
return '0'+num;
}
else{
return num;
}
}
}
module.exports=getSrc;
● naver.js
getSrc.js를 통해 data를 data.json에 담고
data.json의 정보를 불러와 분류하는 앱
express를 이용한 기타 라우터 및 index라우터를 제공한다.
//COLLECTING WEBTOON PREVIEWS
var url="http://comic.naver.com/webtoon/weekday.nhn"; //now url is naver webtoon site
var request=require('request');
var requestP=require('request-promise');
var cheerio=require('cheerio');
var fs=require('fs');
var getSrcs=require('./getSrcs.js');
var dataPath='data.json';
var dataArr=[];
var tasksArr=[];
getSrcs();
setTimeout(async function(){
console.log('go');
var string=await fs.readFileSync(dataPath, 'utf-8');
var data=JSON.parse(string);
var _i=-1; //to check if it's first src
for(var i=0; i<data.length; i++){
var item=data[i];
var src=item.src;
var day=item.day;
var num=item.num;
if(_i!=day){
console.log("Day "+day+" pipe");
_i++;
}
request(src).pipe(fs.createWriteStream(__dirname+'/imgs/'+day+'_'+num+'.jpg'));
}
}, 4000);
var express=require('express');
var app=express();
app.listen(80);
app.use(express.static(__dirname));
//image files are saved in Directory imgs.
//and set routes for them
app.use(express.static('imgs'));
app.get('/', function(req, res){
console.log('someone in');
res.sendFile(__dirname+'/index.html');
});
app.get('/renew', function(req, res){
fs.readdir(__dirname+'/imgs', function(err, fileArr){
var body="<h1>Naver Webtoon Previews</h1>";
for(var i=0; i<fileArr.length; i++){
var day=fileArr[i].charAt(0);
var num=fileArr[i].substr(2, 2);
console.log(fileArr[i]);
if(num==='00'){
console.log('true');
switch(day){
//case 0: - unavailable
//case '0': - good
case '0':body+='<h1>MON</h1>'; break;
case '1':body+='<h1>TUE</h1>'; break;
case '2':body+='<h1>WED</h1>'; break;
case '3':body+='<h1>THU</h1>'; break;
case '4':body+='<h1>FRI</h1>'; break;
case '5':body+='<h1>SAT</h1>'; break;
case '6':body+='<h1>SUN</h1>'; break;
}
}
body+='<img src="';
body+='/'+fileArr[i];
body+='">';
}
fs.writeFile('index.html', body, function(){
res.send('Sent!!');
});
});
});
'Node.js' 카테고리의 다른 글
Socket io, node js 를 이용한 채팅 사이트 만들기 예시 (0) | 2018.06.10 |
---|---|
Socket io, nodejs를 이용한 채팅 사이트 만들기 (0) | 2018.06.10 |
[카톡봇] openAPI와 카카오톡API를 이용한 버스 도착 정보 조회 (2) | 2018.04.26 |
[버스 API] 공공 데이터 api를 이용해 버스 도착 정보 얻는 예제 (0) | 2018.04.26 |
[카톡봇] 카카오톡 API를 이용해 사진 자동 전송하기 (0) | 2018.04.26 |