2014-07-17 2 views
1

웹 사이트에서 일부 데이터를 수집해야하는 프로젝트에서 작업 중이므로 webharvest를 사용하고 있습니다.Webharvest if/else 및 try/catch 항상 성공

내가 수집하는 데이터 (뉴스 웹 사이트의 의견)가 여러 페이지에 걸쳐 나타나는 문제가 있습니다. 웹 페이지의 xpath에있는 주석의 두 번째 페이지에 대한 링크를 찾도록 구성하려고합니다. 문제는 내가 if 테스트를 시도하면 조건이 항상 통과하고 try 문을 시도하면 try 본문이 항상 성공합니다. 이 결과 내 스크립트에서 첫 페이지 (단 하나만있는 경우)에서 주석을 추출합니다. 그러나 두 세트의 주석을 가진 기사는 아름답게 작동합니다. 그래서 내 질문은 if 조건과 try 문 구문과 관련이 있습니다. Webharvest에 대한 문서는 이러한 기능과 관련하여 부족합니다.

다음은 내가 시도하고있는 것입니다. 첫째, if 시험 :

<var-def name="secondPageLink"> 
    <xpath expression="/a[@class='next']/@href"> 
     <var name="firstPage"/> 
    </xpath> 
</var-def> 
<case> 
    <if condition="${secondPageLink != null}"> 
     [ process second page ] 
    </if> 
</case> 

둘째, try/catch :

<try> 
    <body> 
     <var-def name="secondPageLink"> 
      <xpath expression="/a[@class='next']/@href"> 
       <var name="firstPage"/> 
      </xpath> 
     </var-def> 
     [ continue to process page ] 
    </body> 
    <catch> 
    </catch> 
</try> 

if 시험과의 문제는 더 두 번째 페이지가 존재하지 않는 경우 변수가 (비어 있다는 사실에도 불구하고 어떤 내가 gui에서 디버깅에서 볼 수 있습니다), if 사실을 반환하는 것, 그리고 시체를 실행합니다.

아무런 값도 반환하지 않는 xpath (두 번째 페이지가없는 경우)가 '오류'로 간주되지 않으므로 시도가 올바르게 수행되지 않으므로 try/catch이 제대로 작동하지 않는 이유를 더 쉽게 알 수 있습니다. 여전히 성공합니다. 또 다른 어려움은 다음 페이지 링크의 @href가 상대적이므로 첫 번째 페이지의 URL (또는 기사의 기본 URL, 실제로는 여기에서 같은 것이지만)에 추가해야합니다. 즉, 내 HTML -to-xml은 $ {firstPage} $ {secondPageLink} URL을 사용하며, 첫 번째 페이지 URL이 다시 끝나고 webharvest는 첫 번째 페이지를 두 번째로 처리합니다.

누군가가 내 if 테스트를 다시 작성하여 secondPageLink xpath가 빈 값을 반환 할 때 false를 반환하면 매우 감사하게 생각합니다.

+0

secondPageLink를 기대하는 정확한 문자열을 테스트 해 보았습니다. 그래서'condition = "$ {secondPageLink == '? page = 2'}"'. 그러나 이것은 결코 사실을 반환하지 않으므로 두 페이지짜리 기사는 첫 페이지 만 반환합니다. – Jangari

답변

1

답변을 찾았습니다.

This personif과 비슷한 문제가 있으며 여기에 응답은 condition="${variable.toString().length() > 0}"을 사용하는 것이 좋습니다. 로 if 시험을 대체 내 코드에 따라서

:

<case> 
    <if condition="${secondPageLink.toString().length() > 0}"> 
     <var-def name="secondPageFull"> 
      <html-to-xml> 
       <http url="${commentedArticleURL}${secondPageLink}"/> 
      </html-to-xml> 
[...]     

는 올바른 결과를 생산했다.