2017-12-12 4 views
0

ich eine Web-Scraping App in node.js gemacht, die p.title und p.artist aus dem HTML-Code der Website führt, dann speichert jedes der beiden Elemente in zwei getrennte Felder wie folgt aus:Daten druckt mehrmals statt, sobald

res.on('data', function(html){ 
    var $ = cheerio.load(html); 
    var commonTitles = []; 
    var commonArtists = []; 

    commonTitles.push($.text($('p.title').eq(0))); 
    commonTitles.push($.text($('p.title').eq(1))); 
    commonTitles.push($.text($('p.title').eq(2))); 
    commonTitles.push($.text($('p.title').eq(3))); 
    commonTitles.push($.text($('p.title').eq(4))); 

    commonArtists.push($.text($('p.artist').eq(0))); 
    commonArtists.push($.text($('p.artist').eq(1))); 
    commonArtists.push($.text($('p.artist').eq(2))); 
    commonArtists.push($.text($('p.artist').eq(3))); 
    commonArtists.push($.text($('p.artist').eq(4))); 

    console.log(
    'The 5 most recently played titles: \n' + 
    commonTitles[0] + '/' + commonArtists[0] + '\n' + 
    commonTitles[1] + '/' + commonArtists[1] + '\n' + 
    commonTitles[2] + '/' + commonArtists[2] + '\n' + 
    commonTitles[3] + '/' + commonArtists[3] + '\n' + 
    commonTitles[4] + '/' + commonArtists[4] 
); 
}); 

Ich möchte alle 5 zuletzt gespielten Titel mit ihren Künstlern von einer Seite auflisten und mit Hilfe von console.log ausdrucken. Ich erwarte, dass dies als meine Ausgabe in Eingabeaufforderung erhalten:

The 5 most recently played titles: 
I Make It Rain (Original Trap Mix)/Jimithegenius 
More Pragmatic (Original Version)/Jahnauasca 
Kiss The Devil (Just A Gent Remix)/Bel Hair 
Check (Levitate Remix)/Meek Mill 
Party Right (Charlie Traplin Trap Mix)/Lethal Bizzle feat. Ruby Goe 

Das Playlist-Updates ab und zu, so ist dies nur ein Beispiel.
Statt sich zu drucken wie darauf hin, dass es druckt sie ohne die Arrays mit zusätzlichen arguements aus, als ob die console.log hat mich in eine seltsame Schleife wie folgt gesetzt worden:

The 5 most recently played titles: 
/
/
/
/
/
The 5 most recently played titles: 
/
/
/
/
/
The 5 most recently played titles: 
I Make It Rain (Original Trap Mix)/Jimithegenius 
More Pragmatic (Original Version)/Jahnauasca 
Kiss The Devil (Just A Gent Remix)/Bel Hair 
Check (Levitate Remix)/Meek Mill 
Party Right (Charlie Traplin Trap Mix)/Lethal Bizzle feat. Ruby Goe 
The 5 most recently played titles: 
/
/
/
/
/
The 5 most recently played titles: 
/
/
/
/
/

Warum es zusätzliche Daten nicht ausdrucken? Wenn die console.log in einer Schleife gewesen wäre, dann wäre die gesamte zusätzliche Ausgabe nicht leer, alle würden Daten von den Arrays enthalten. Ich habe sogar versucht, die Arrays außerhalb von res.on als globale Arrays zu erstellen, aber dann druckt es die Titel und Künstler als undefined. Wie werde ich diese unerwünschten Linien los?

Vielen Dank im Voraus,
Tim_W8

+1

"res.on" wird 5 Mal aufgerufen. – Veve

Antwort

0

Sie haben sowohl in data und end zu hören, diese Arbeit zu machen.

data wird jedes Mal aufgerufen, wenn ein Datenblock ankommt.

end heißt alle Daten kommen an.

var html = ''; 
res.on('data', function(chunk){ 
    html+=chunk; 
}); 

res.on('end',function(){ 

    var $ = cheerio.load(html); 
    var commonTitles = []; 
    var commonArtists = []; 

    commonTitles.push($.text($('p.title').eq(0))); 
    commonTitles.push($.text($('p.title').eq(1))); 
    commonTitles.push($.text($('p.title').eq(2))); 
    commonTitles.push($.text($('p.title').eq(3))); 
    commonTitles.push($.text($('p.title').eq(4))); 

    commonArtists.push($.text($('p.artist').eq(0))); 
    commonArtists.push($.text($('p.artist').eq(1))); 
    commonArtists.push($.text($('p.artist').eq(2))); 
    commonArtists.push($.text($('p.artist').eq(3))); 
    commonArtists.push($.text($('p.artist').eq(4))); 

    console.log(
    'The 5 most recently played titles: \n' + 
    commonTitles[0] + '/' + commonArtists[0] + '\n' + 
    commonTitles[1] + '/' + commonArtists[1] + '\n' + 
    commonTitles[2] + '/' + commonArtists[2] + '\n' + 
    commonTitles[3] + '/' + commonArtists[3] + '\n' + 
    commonTitles[4] + '/' + commonArtists[4] 
); 
}) 
+1

Verstanden. Ich danke dir sehr! –

Verwandte Themen