2012-04-07 4 views
3

문자열을 반환하기 위해 node.js의 regex를 사용하여 HTML을 구문 분석합니다. 그러나, 나는이 게시물에 좋은 생각이 아니라고 들었습니다 : Pull a specific string from an HTTP request in node.jsRegex로 HTML 구문 분석 대체

더 안정적인 대안은 무엇입니까?

프로그래밍에 익숙하지 않기 때문에 자습서 링크가 도움이 될 것입니다. 설명서 설명을 이해하는 데 어려움이 있습니다.

+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

''var d = JSON.parse'와 for 문을 제 'http.get' 콜백에 정의합니까? – 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