2017-12-09 7 views
0

Ich brauche einige Statistiken von einer Website, die keine API hat. Nachdem ich den Quellcode überprüft hatte, sah ich, dass die Daten (die ich brauche) verwendet wurden, um eine statistische Grafik zu erstellen.NodeJS Cheerio, Verschrottung & Variablen erhalten

konnte ich das Skript-Tag Anfrage & Cheerio erhalten:

request(nodeUrl, function(error, res, body) { 
    var $ = cheerio.load(body); 

    var scripts = $('script').filter(function() { 
     return ($(this).html().indexOf('Dygraph(document') > -1); 
    }); 
    if (scripts.length === 1) { 
     var text = $(scripts[0]).html(); 
     console.log(text); 
    } 
}); 

Die Daten I (unter Verwendung eines js Formatierer alle anderen Skripte um sein leicht zu lesen und zu entfernen) müssen:

d = new Dygraph(document.getElementById("container"), [ 
    [new Date("2017/08/01"), 0.0654], 
    [new Date("2017/08/02"), 0.257], 
    [new Date("2017/08/03"), 0.245], 
    [new Date("2017/08/04"), 0.15], 
    [new Date("2017/08/05"), 0.107], 
    [new Date("2017/08/06"), 0.109], 
    [new Date("2017/08/07"), 0.143], 
    [new Date("2017/08/08"), 0.222], 
    [new Date("2017/08/09"), 0.166], 
    [new Date("2017/08/10"), 0.156], 
    [new Date("2017/08/11"), 0.143], 
    [new Date("2017/08/12"), 0.199] 
]); 

Ich brauche nur alle: [neues Datum ("2017/08/12"), 0.199]

Alle Vorschläge werden groß sein. Danke im Voraus.

Antwort

1

Sie können reguläre Ausdrücke verwenden, um die Daten zu analysieren.

var re = /new Date\("([0-9]{4}\/[0-9]{2}\/[0-9]{2})"\), ([0-9]+\.[0-9]+)/g; 
var m; 
do { 
    m = re.exec($(scripts[0]).html()); 

    // scraped data: 
    // [new Date(m[1]), m[2]] 
} 
while (m) 
+0

Danke !. Ich sehe, dass es einige Nullwerte gibt, nicht im Datum (1. Parameter), sondern im Wert (2. Parameter). Ich habe versucht: \ [new Date \ ("([0-9] {4} \/[0-9] {2} \/[0-9] {2})" \), (*) \], aber es passt nicht dazu. Im Beispiel: [new Date ("2017/10/29"), null] – Eduardo

+0

es gefunden: \ [new Date \ ("([0-9] {4} \/[0-9] {2} \/[0-9] {2}) "\), ([0-9] \. [0-9] + | null) \] – Eduardo