2017-12-09 14 views
0

APIを持たないサイトから統計を取得する必要があります。ソースコードを確認した後、私は必要なデータが統計的なグラフィックを構築するのに使用されているのを見た。NodeJS Cheerio、廃止と変数の取得

私がリクエスト&チェリオを使用してスクリプトタグを取得することができた:

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); 
    } 
}); 

私は(読みやすいようにjsのフォーマッタを使用し、周りのすべての他のスクリプトを削除する)必要なデータ:

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] 
]); 

私はすべてが必要です:[新しい日付( "2017/08/12")、0.199]

いずれかの提案は素晴らしいでしょう。前もって感謝します。

答えて

1

正規表現を使用してデータを解析することができます。

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

ありがとうございます。いくつかのヌル値がありますが、日付(第1パラメータ)ではなく値(第2パラメータ)にあります。私は試しました:\ [新しい日付\( "([0-9] {4} \/[0-9] {2} \/[0-9] {2})" \)、(*)\]、それはそれに一致しません。例:[new Date( "2017/10/29")、null] – Eduardo

+0

が見つかりました:\ [new Date \( "([0-9] {4} \/[0-9] {2} \/[0-9] {2}) "\)、([0-9] \。[0-9] + | null)\] – Eduardo

関連する問題