我在下面的代码中,想法是当用户提供参数(歌手/名字),它保存并转到每个(歌手)的URL并打印所有歌曲然后转到下一个(歌手姓名)url并打印所有歌曲,以及So On,
此代码中的问题是,当它为第一个(歌手)打印并进入下一个时,它会打印(第一个和第二个一起再次)
喜欢(首先,(第一+第二),(第一,第二,第三)......)
我怎么一次打印整个东西,就像所有在一起一次......
我试图在代码中的某些地方打印,但它不会工作,
当我尝试打印console.log(mailoutput);
时,它在each loop
内部工作但在其外部,它显示了它Undefined
var request = require('request');
var cheerio = require('cheerio');
var urls = [];
var mailoutput ;
var songs = [];
// save all arguments into an array
for (let j = 2; j < process.argv.length; j++) {
urls.push(process.argv[j]);
}
// loop through the array
for(var i =0; i<urls.length; i++){
request('https://www.billboard.com/music/'+urls[i], function(error,response,body){
if(!error && response.statusCode == 200){
var $ = cheerio.load(body);
var title = $('a.artist,div.artist-name').each(function(i, element) {
mailoutput = $(this).text();
//console.log(mailoutput);
songs= songs +mailoutput;
});
} // END OF IF ERROR
console.log(songs);
}); // end of the REQUEST here
} // end of the LOOP here ...
答案 0 :(得分:3)
您需要稍微更改一下代码
而不是: -
songs= songs +mailoutput;
做的: -
songs.push(mailoutput);
完整代码需要: -
var request = require('request');
var cheerio = require('cheerio');
var urls = [];
var mailoutput ;
var songs = [];
for (let j = 2; j < process.argv.length; j++) {
urls.push(process.argv[j]);
}
for(var i =0; i<urls.length; i++){
request('https://www.billboard.com/music/'+urls[i], function(error,response,body){
if(!error && response.statusCode == 200){
var $ = cheerio.load(body);
var title = $('a.artist,div.artist-name').each(function(i, element) {
mailoutput = $(this).text();
songs.push(mailoutput); // you define as array so push values to array
});
}
});
}
console.log(songs);
答案 1 :(得分:1)
```
for(var i =0; i<urls.length; i++){
request('https://www.billboard.com/music/'+urls[i], function(error,response,body){
if(!error && response.statusCode == 200){
var $ = cheerio.load(body);
var title = $('a.artist,div.artist-name').text();
console.log(title);
}
});
}
```