2014-09-02 2 views
0

키워드 뒤에 특정 값을 얻기 위해 html 텍스트를 구문 분석하려고합니다. 아래의 코드에 예를 들어 : 와하이 발견 키워드 후JSoup를 사용하여 특정 값을 얻는 방법?

<table> 

    <tr> 
     <td class="odd">TW-Central</td> 
     <td class="odd">$3.8600</td> 
     <td class="odd">$3.8600</td> 
     <td class="odd">$3.8600</td> 
     <td class="odd red">-0.0168</td> 
     <td class="odd right">42,500</td> 
     <td class="odd right">7</td> 
    </tr> 



    <tr> 
     <td class="even">Waha</td> 
     <td class="even">$3.9600</td> 
     <td class="even">$3.8800</td> 
     <td class="even">$3.9196</td> 
     <td class="even red">-0.0436</td> 
     <td class="even right">69,500</td> 
     <td class="even right">17</td> 
    </tr> 



    <tr> 
     <td class="odd">White River Hub</td> 
     <td class="odd">$3.8200</td> 
     <td class="odd">$3.7975</td> 
     <td class="odd">$3.8088</td> 
     <td class="odd red">-0.0184</td> 
     <td class="odd right">81,200</td> 
     <td class="odd right">13</td> 
    </tr> 

</table> 

, 어떻게 그 아래 가격을 잡고 그것을 반환 할 수있을 것인가? 도움이 될 것입니다. 또한 STS를 사용하여 Java에서 이것을 코딩하고 있습니다. JSoup이이를 달성하는 데 최선이 아니라면 무엇을 사용할지에 대한 조언을 많이 주시면 감사하겠습니다! 감사!

답변

0

테이블이 변경되지 않으면 모든 td 요소를 가져온 다음 get (index) 메소드로 원하는 것을 선택하십시오.

StringBuilder html = new StringBuilder(); 
    html.append(" <table>"); 
    html.append(" <tr>"); 
    html.append("  <td class=\"even\">Waha</td>"); 
    html.append("  <td class=\"even\">$3.9600</td>"); 
    html.append("  <td class=\"even\">$3.8800</td>"); 
    html.append(" </tr>"); 
    html.append(" </table>"); 

    Document document = Jsoup.parse(html.toString()); 
    Elements tdElements = document.select("td"); 
    String waha = tdElements.get(0).text(); 
    String firstPrice = tdElements.get(1).text(); 
    String secondPrice = tdElements.get(2).text(); 

    System.out.println("The first td content is: " + waha); 
    System.out.println("The second td content (firstPrice) is: " + firstPrice); 
    System.out.println("The third td content (secondPrice) is: " + secondPrice); 

업데이트 :

동적으로 사용을 선택하고 다음 코드 : TW-Centralhas 가격 하나 : $ 3.9600

@Test 
public void testJSOUP() { 
    StringBuilder html = new StringBuilder(); 
    html.append(" <table>"); 
    html.append(" <tr>"); 
    html.append("  <td class=\"odd\">TW-Central</td>"); 
    html.append("  <td class=\"odd\">$3.9600</td>"); 
    html.append("  <td class=\"odd\">$3.8800</td>"); 
    html.append(" </tr>"); 
    html.append(" <tr>"); 
    html.append("  <td class=\"even\">Waha Row</td>"); 
    html.append("  <td class=\"even\">$4.9600</td>"); 
    html.append("  <td class=\"even\">$5.8800</td>"); 
    html.append(" </tr>"); 
    html.append(" <tr>"); 
    html.append("  <td class=\"odd\">White River Hub</</td>"); 
    html.append("  <td class=\"odd\">$4.9600</td>"); 
    html.append("  <td class=\"odd\">$5.8800</td>"); 
    html.append(" </tr>"); 
    html.append(" </table>"); 

    Document document = Jsoup.parse(html.toString()); 
    Elements trElements = document.select("tr"); 
    for (Element tableRows : trElements) { 
     Elements tdElements = tableRows.select("td"); 
     String articleName = tdElements.get(0).text(); 
     String firstPrice = tdElements.get(1).text(); 
     String secondPrice = tdElements.get(2).text(); 

     System.out.println("The article: " + articleName + "has price one:" + firstPrice + " and price two:" + secondPrice); 
    } 
} 

이 기사를 다음과 같은 출력

을 만들 것 및 가격 2 : $ 3.8800
기사 : 와하 Rowhas 가격 하나 : $ 4.9600 및 홍보 얼음이 : $ 5.8800
기사 : 화이트 리버 Hubhas 가격 일 : $ 4.9600 가격이 : $ 5.8800

+0

중요한 것은 HTML 코드가 유효 할 필요가 있다는 것입니다. 귀하의 예제에서 그것은 테이블 태그가 누락되었습니다 – sandrozbinden

+0

sandrozbiden 좋아,이게 의미가있어, 고마워! 질문, 표 형식이 변경되지 않고 "와하"라는 이름이 변경되지 않으면 그 아래의 값만 변경됩니다. 이 코드가 여전히 작동합니까? 예를 들어 가격이 매일 업데이트되는 경우 새 값과 알 수없는 값을 어떻게 얻을 수 있습니까? – Cris

+0

테이블이 변경되지 않으면 tdElements.get (1) .text() 명령을 사용하여 항상 첫 번째 가격을 얻을 수 있습니다. 하지만 반드시 완전한 HTML Jsoup.parse (html.toString())을 파싱하고 변경 사항을보고 싶을 때 td를 선택해야합니다. html이 조금 더 크면 (다른 테이블이있는 경우) 더 나은 필터를 찾아야합니다. – sandrozbinden

관련 문제