2016-10-16 3 views
1

안녕하세요, JSoup을 사용하여 중첩 된 DIV 태그에있는 범위 태그를 추출하려고합니다. 아래의 코드는 더 큰 코드의 조각입니다.JSOUP을 사용하여 중첩 된 DIV 태그에서 SPAN 태그를 검색하려고 시도했습니다.

<div class="formitem formgroup horizontal"> 
 
    <div class="formitem formgroup horizontal"> 
 
    <div class="formitem formgroup vertical" style="width:325px"> 
 
     <div class="formitem formgroup horizontal"> 
 
     <div class="formitem formgroup vertical" style="width:325px;"> 
 
      <div class="formitem formgroup horizontal"> 
 
      <span class="formitem formfield"> 
 
          <span class="value" style="font-weight:bold">47 Lower River St</span> 
 
      </span> 
 
      <span class="formitem formfield"> 
 
          <span class="value" style="font-weight:bold">531</span> 
 
      </span> 
 
      </div> 
 
     </div> 
 
     </div> 
 
     <div class="formitem formgroup horizontal"> 
 
     <span class="formitem formfield"> 
 
        <span class="value" style="font-weight:bold">Toronto</span> 
 
     </span> 
 
     <span class="formliteral formitem" /> 
 
     <span class="formitem formfield"> 
 
        <span class="value">Ontario</span> 
 
     </span> 
 
     <span class="formliteral formitem" /> 
 
     <span class="formitem formfield"> 
 
        <span class="value">M5A0G1</span> 
 
     </span> 
 
     </div> 
 
    </div> 
 
    <div class="formitem formgroup vertical" style="width:150px;"> 
 
     <div class="formitem formgroup horizontal"> 
 
     <span class="formitem formfield"> 
 
        <label>List:</label> 
 
        <span class="value" style="font-weight:bold">$279,900</span> 
 
     </span> 
 
     <span class="formitem formfield"> 
 
        <label>For:</label> 
 
        <span class="value" style="font-weight:bold">Sale</span> 
 
     </span> 
 
     </div> 
 
    </div> 
 
    </div> 
 
    <span class="formitem formfield"> 
 
     <span class="value">Toronto C08</span> 
 
    </span> 
 
    <span class="formliteral formitem" /> 
 
    <span class="formitem formfield"> 
 
     <span class="value">Moss Park</span> 
 
    </span> 
 
    <span class="formliteral formitem" /> 
 
    <span class="formitem formfield"> 
 
     <span class="value">Toronto</span> 
 
    </span> 
 
    <span class="formitem formfield"> 
 
     <span class="value">120-21-S</span> 
 
    </span> 
 
</div>

내가 마지막 SPAN 태그 (토론토 C08, 모스 공원, 토론토 120-21-S)

<span class="formitem formfield"> 
 
    <span class="value">Toronto C08</span> 
 
</span> 
 
<span class="formliteral formitem" /> 
 
<span class="formitem formfield"> 
 
    <span class="value">Moss Park</span> 
 
</span> 
 
<span class="formliteral formitem" /> 
 
<span class="formitem formfield"> 
 
    <span class="value">Toronto</span> 
 
</span> 
 
<span class="formitem formfield"> 
 
    <span class="value">120-21-S</span> 
 
</span>

에서 텍스트를 추출하는 것을 시도하고있다

문서의 다른 부분을 성공적으로 파싱했지만이 스팬을 격리 할 수는 없습니다. 에스. 코드 스 니펫은 훨씬 더 큰 페이지 (full page)에서 왔습니다. 나는 잘못된 접근법을 사용하고 있을지 모르지만, 여기에 부모 DIV (게시물 상단의 결과) 사이의 기간을 포착하기 위해 수행 한 작업이 있습니다.

Elements elements = doc.select("div[class=formitem legacyBorder formgroup vertical]"); 
     Element zoneElement = elements.select("div[class=formitem formgroup vertical") 
       .select("[style=width:500px]").select("div[class=formitem formgroup horizontal").first(); 

이제 첫 번째 요소가 있지만 선택한 코드 블록 끝에 마지막 6 개의 span 태그가 필요합니다. 감사합니다

+0

이유는 스푼 피드가 필요합니다. –

+1

더 큰 코드의 조각이라면 실제 선택기가 스 니펫의 선택기와 다를 수 있습니다. 웹 페이지의 링크를 게시 할 수 있습니까? – TDG

+0

다음은 전체 페이지 링크입니다. [link] (http://v3.torontomls.net/Live/Pages/Public/Link.aspx?Key=4fb27e624b1c4e8c8cd9543a3eef1a3e&App=TREB). 또한 원래 게시글에 더 많은 정보를 추가했습니다. – sunpack

답변

0

브라우저의 developer tool (F12)을 열고 "요소 검사"도구를 선택한 다음 원하는 필드 (예 : TORONTO C08)를 강조 표시하고 css selector을 선택하십시오. "토론토 C08"에 대한이 될 것입니다 :

#C3627690 > div:nth-child(3) > div:nth-child(2) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(2) > div:nth-child(1) > span:nth-child(2) > span:nth-child(1) 

다른 모든 elemens에 대해 동일한 작업을 수행합니다. 모든 셀렉터를 얻은 후에는 세 가지 값만 다른 공통 패턴 (예 : 세 번째 값에서만 다름)을 가지고 있는지 확인하십시오. 루프를 사용하여 선택기를 반복 할 수 있습니다.

+0

감사합니다. TDG를 사용하면 더 간단한 방법이 될 수 있기를 기대했지만 예제를 살펴보면 가장 직접적인 방법 일 수 있습니다. 나는 많은 목록을 보았다. 패턴은 마지막 범위 태그 (항상 6)입니다. CSS 선택이 중단 될 수 있도록 다른 목록이 추가 div 태그에 포함되었습니다. 또한 ID는 고유합니다. ID를 추출 할 코드가 있습니다. JSoup의 의사 선택기 ** 대담한 ** ': nth-last-child (an + b)'를 보았습니다.이 부분을 보면서, 아래에서 위로 선택할 수 있다고 생각합니다. 나는 이것을 당신의 해결책과 함께 시도해 볼 것이고, 해결책을 생각해 내는지 알려줄 것입니다. 더 나은 걸 본다면? – sunpack

+0

TDG 솔루션은 솔루션으로 평가됩니다. 고양이를 다듬는 방법에는 여러 가지가 있습니다. – sunpack

+0

'int zoneSize = elements.select ("div [class = formitem formgroup vertical]"). select ("[style = width : 500px]"). select ("span [class = formitem formfield")] select ("span [class = value]") size(); ("[style = width : 500px]"). select ("i = 1; i <5; i ++) ("span [class = value]"). get (zoneSize - i) .text() 클래스를 선택하면 ("div [class = formitem formgroup horizontal" ; System.out.println (zone); } ' – sunpack