2009-05-25 5 views
0

내 페이지의 요소에 일부 텍스트가 있는데 그 옆에 텍스트가없는 페이지의 가격을 스크랩하고 싶습니다. "$ 39.99"그냥 자바 스크립트와 정규 표현식을 사용하여이 필터 그냥 얻을Regex와 javascript를 사용하여 필터링하는 방법은 무엇입니까?

<span class="discount">now $39.99</span> 

방법 :

나는 페이지가 그런 식으로 가격을 포함 발견했다.

질문이 너무 쉽거나 다른 방법으로 요청할 수는 있지만 정규 표현식에 대해서는 알지 못해서 도움이 필요합니다. :).

답변

4
<script language="javascript"> 
window.onload = function() { 

    // Get all of the elements with class name "discount" 
    var elements = document.getElementsByClassName('discount'); 

    // Loop over each <span class="discount"> 
    for (var i=0; i < elements.length; i++) { 

     // get the text, e.g. "now $39.99" 
     var rawText = elements[i].innerHTML; 

     // Here's a regular expression to match one or more digits (\d+) 
     // followed by a period (\.) and one or more digits again (\d+) 
     var priceAsString = rawText.match(/\d+\.\d+/) 

     // You'll want to make the price a floating point number if you 
     // intend to do any calculations with it. 
     var price = parseFloat(priceAsString); 

     // Now what do you want to do with the price? I'll just write it out 
     // to the console (using FireBug or something similar) 
     console.log(price); 

    } 
} 
</script> 
+0

변수의 이름을 span으로 지정한다고해서 범위가 일치하지는 않습니다 ... –

+0

좋은 지적, Matthew. 수정 됨. –

+0

예 ...하지만 변수 이름 만 수정했습니다. 그것은 여전히 ​​비 - 범위와 일치합니다! –

3
document.evaluate("//span[@class='discount']", 
    document, 
    null, 
    XPathResult.ANY_UNORDERED_NODE_TYPE, 
    null).singleNodeValue.textContent.replace("now $", ""); 

편집 :이 표준 XPath입니다. 네가 찾고있는 어떤 종류의 설명인지 모르겠다. 오래된 브라우저의 경우 Sarissa 및/또는 Java-line과 같은 타사 라이브러리가 필요합니다.

+0

일부 설명이 도움이 될 것이라고 생각하지 않습니까? 이게 뭐야? 이것을 사용하기위한 요구 사항은 무엇입니까? – rudolfson

+1

나는 막연하게 XPath에 익숙하지만 여기에 대략적인 설명이있다 : // 나무의 다음 태그 (특정 부모를 가진 태그와는 반대)와 일치시키려는 것을 의미한다. span은 일치시킬 태그이다 , [] 사이의 내용은 추가 제약 조건이며,이 경우 속성 클래스는 할인되어야합니다. –

1

정규식은 근본적으로 HTML 구문 분석에 좋지 않습니다 (이유는 Can you provide some examples of why it is hard to parse XML and HTML with a regex? 참조). 필요한 것은 HTML 파서입니다. 다양한 파서를 사용하는 예제는 Can you provide an example of parsing HTML with your favorite parser?을 참조하십시오.

Patrick McElhaney와 Matthew Flaschen의 답변은 문제를 해결하는 좋은 방법입니다.

+0

질문은 regexes와 javascript를 사용하여 필터링하는 방법을 묻습니다. 당신은 자바 스크립트의 DOM 기능을 활용하고 정규식을 사용합니다. 브라우저는 필요한만큼 좋은 파서입니다. 이 경우에만 새로운 구문 분석 라이브러리를 사용할 필요가 없습니다. – nickf

+0

@nickf 당신이 말하는 것처럼 브라우저는 파서입니다. 페이지의 예를 살펴보면 브라우저를 파서로 사용하는 브라우저가 두 개 이상 있습니다. –

0

Matthew Flaschen suggested으로 XPATH를 사용하면 더 좋은 방법입니다. 대상 문서의 노드 구조에 대해 알고있는 경우 (그리고 예제를 제공 한 이후로 생각됩니다). 노드 구조를 모르는 경우 regexes는 여전히 XML 구문 분석에 적합하지 않습니다.

좀 더 많은 자원을 킥 - 시작 :

나는 또한 DOM Inspector의 파이어 폭스 확장 콤보를 발견했습니다 XPather은 주어진 페이지에서 XPath 표현식을 파생 및 테스트하는 데 매우 중요한 도구입니다. (다른 브라우저를 사용하고 있다면 잘 모르겠습니다.)

관련 문제