2012-04-07 15 views
3

Ich analysiere HTML mit Regex in node.js, um eine Zeichenfolge zurückzugeben. Allerdings wurde mir gesagt, dass dies keine gute Idee in diesem Post ist: Pull a specific string from an HTTP request in node.jsAlternative zu HTML-Parsing mit Regex

Was sind die stabileren Alternativen?

Ich bin neu in der Programmierung, so Links zu Tutorials wäre sehr hilfreich. Ich habe Probleme, einige der Erläuterungen zur Dokumentation zu verstehen.

+1

Sie wurden bereits über das Problem informiert, aber Sie sollten wahrscheinlich [this] (http://goo.gl/i8h6) lesen, nur um vollständig informiert zu sein. Das Grundproblem hat mit der theoretischen "Macht" des "Maschinen" -Modells von regulären Ausdrücken zu tun, verglichen mit dem, was benötigt wird, um eine Sprache wie HTML zu parsen. Es hat mit der Sprache/Automatentheorie zu tun. – Pointy

+0

Sie können dies sehen: http://stackoverflow.com/questions/7372972/how-do-i-parse-a-html-page-with-node-js – HoLyVieR

Antwort

3

node-htmlparser behandelt alle schweren Lasten von HTML-Parsing. Obendrein können Sie mithilfe von CSS-Stil-Selektoren node-soupselect finden, um das gewünschte Element zu finden.

Aber, ich habe mir deine andere Frage angeschaut und die Frage, die du eigentlich stellen solltest, ist nicht "wie kratze ich diese Daten von einer HTML-Seite", sondern "gibt es eine bessere Möglichkeit, die Daten zu erhalten Suchst du? " Die USGS hat APIs that provide their data in machine-readable form.

Here's the JSON object for the location you're intersted in. Um den „letzten Momentanwert“ für die Erhöhung der Reservoiroberfläche zu erhalten, können Sie diese Datei herunterladen würde, machen einen var d = JSON.parse, und:

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 jetzt wie { dateTime: "2012-04-07T17:15:00.000-05:00", value: "1065.91" } aussehen wird.

+0

Wow, danke! Das hat enorm geholfen. – mnort9

+0

Definiere ich 'var d = JSON.parse' und die for-Anweisung in meinem' http.get' Callback? – mnort9

+0

'http.get (..., function (res) {...});' ruft Ihren Callback an, wenn er eine Verbindung herstellt und * beginnt, Daten zu empfangen * - nicht, wenn er abgeschlossen ist. Sie müssen auf Daten warten ('res.on ('data', function (chunk) {...});') und die eingehenden Daten puffern, die Sie dann zum Aufruf von 'JSON.parse (pufferString)' verwenden können Sobald "res" "end" ausstrahlt. [Siehe hier zum Beispiel.] (Http://nodemanual.org/latest/nodejs_dev_guide/creating_http_requests.html) – josh3736