JavaScript로 Web Scrapper를 하나 만드는 중입니다.
일단 다른 언어보다 접근이 쉬울것 같아서 공부할겸 만들고있었는대...
한번에 많은 페이지를 읽어오니 순서가 자기 마음대로 읽어오더군요.
이리 저리 알아보니, JavaScript의 특성이 비동기성이라고 하더라구요.
그래서 질문하나 드립니다.
100개 이상의 페이지를 불러와 분석하여 특정데이터를 뽑아내는대,
이게 순서대로 안돼니, 아직 request는 받지도 않았는대, 코드는 받았다고 생각하고 진행해서 문제가 생기더라구요.
그래서 동기화 시켜서 할수있는 방법이 있을까요?
(검색해보니 callback함수를 이용하라는대.. 아직도 이넘이 이해가 안가네요..단순히 큐에 이벤트를 쌓아뒀다가 하는것 같기도 하고...흐..)
var request = require("request");
var cheerio = require("cheerio");
var fs = require("fs");
var mkdir = require("mkdir");
var path = require('path');
var async = require('async');
var downloader = require('./downloader');
var mkdirp = require('mkdirp');
var preHttp = "파싱할 사이트";
var innerHttp;
var startPage = 1;
var endPage = 50;
var task1 = [];
for (var i = startPage; i <= endPage; i++) {
innerHttp = i.toString(10);
var url = preHttp + innerHttp;
mkdirp('./' + i, function(err) {
});
request({
url: url,
}, function(error, response, body) {
var $ = cheerio.load(body);
// 파싱과 작업
...
});
});
}
이런식으로 짯는대.. 어떻게 변경하면 좋을지 도와좀 주시면 감사하겠습니다.
다들 즐거운 주말 보내세요 ^^