NodeJS로 웹 페이지를 긁어내는 URL을 반환합니다
-
23-12-2019 - |
문제
NodeJS 및 2 개의 모듈 요청 및 Cherio를 사용하여 웹 사이트를 긁어내는 간단한 웹 앱을 구축하려고합니다.
다음 코드로 수행 할 수 있습니다.
var printURL=function(url){
request(url, (function() {
return function(err, resp, body) {
if (err)
throw err;
$ = cheerio.load(body);
$('img').each(function(){
console.log($(this).attr('src'));
});
}
} )());
};
.
웹 사이트의 그림 URL을 인쇄하기 위해 잘 작동하지만 실제로 여기에서 수행하려는 것은 기능을 벗어날 수있는 URL 목록을 만드는 것입니다.나는 그것을 이렇게 시도했지만 빈 목록을 반환합니다.
var urlList=[];
var printURL=function(url){
request(url, (function() {
return function(err, resp, body) {
if (err)
throw err;
$ = cheerio.load(body);
$('img').each(function(){
urlList.push($(this).attr('src'));
});
}
} )());
};
.
어떻게 해결할 수 있습니까?많은 감사합니다
해결책
모든 콜백이 완료 될 때까지 기다려야합니다.
var urlList=[];
var printURL=function(url){
request(url, (function() {
return function(err, resp, body) {
if (err)
throw err;
$ = cheerio.load(body);
var images = $('img');
var counter = images.length;
images.each(function(){
urlList.push($(this).attr('src'));
counter--;
if (counter==0) {
// now we have all images!!
console.log(urlList);
}
});
}
})());
};
.
이것은 node.js의 비동기적 성격의 일부입니다.상황이 더 복잡해지면 와 같은 흐름 제어 라이브러리를 사용하는 것이 좋습니다.
제휴하지 않습니다 StackOverflow