2012-04-07 9 views
3

私は、regexでnode.jsのHTMLを解析して文字列を返しています。しかし、私はこれがこの記事の良いアイデアではないと言われています:Pull a specific string from an HTTP request in node.jsHTMLの代わりにRegexを使った構文解析

もっと安定した選択肢は何ですか?

私はプログラミングが初めてで、チュートリアルへのリンクは非常に役立ちます。私はいくつかのドキュメントの説明を理解するのが難しいです。

+1

あなたはすでにこの問題について知らされていますが、完全に情報を得るには[this](http://goo.gl/i8h6)を読むべきでしょう。基本的な問題は、正規表現の "マシン"モデルの理論的な "パワー"とHTMLのような言語を解析するために必要なものとの関係です。それは言語/オートマトンの理論と関係がある。 – Pointy

+0

これを見ることができます:http://stackoverflow.com/questions/7372972/how-do-i-parse-a-html-page-with-node-js – HoLyVieR

答えて

3

node-htmlparserは、解析するHTMLの大量処理をすべて処理します。さらに、node-soupselectでは、CSSスタイルのセレクタを使用して、探している特定の要素を見つけることができます。

しかしは、私はあなたの他の質問を見て、あなたが本当に求めてしなければならない質問は、「私はHTMLページから、このデータをこすりんか」ではなく、むしろ「データIを取得するための良い方法はありますお探しですか? USGSはAPIs that provide their data in machine-readable formです。

Here's the JSON object for the location you're intersted in.貯水池表面の標高のための「最新の瞬時値を」取得するには、あなたがそのファイルをダウンロードすると思いますが、var d = JSON.parseを行い、そして:

for (var i = 0; i < d.value.timeSeries.length; i++) { 
    if (d.value.timeSeries[i].variable.variableName == 'Elevation of reservoir water surface above datum, ft') { 
     var result = d.value.timeSeries[i].values[0].value[d.value.timeSeries[i].values[0].value.length-1]; 
    } 
} 

resultは今{ dateTime: "2012-04-07T17:15:00.000-05:00", value: "1065.91" }ようになります。

+0

うわー、ありがとう!これはすごく助けになりました。 – mnort9

+0

私の 'http.get'コールバックで' var d = JSON.parse'とfor文を定義しますか? – mnort9

+0

'http.get(...、function(res){...});'は、接続が確立されたときにコールバックを呼び出し、*が完了したときではなく、*データの受信を開始します。あなたはデータ( 'res.on( 'data'、function(chunk){...});')を聞き、入ってくるデータをバッファリングし、 'JSON.parse(bufferString)'を呼び出すことができます。一旦 'res'が' end'を出すと、 [ここをクリックしてください](http://nodemanual.org/latest/nodejs_dev_guide/creating_http_requests.html) – josh3736

関連する問題