2012-09-21 9 views
4

페이지에서 모든 링크를 가져 와서 필요한 링크를 선택해야하는 웹 로봇을 구현하고 있습니다. 나는 링크가 "테이블"또는 "스팬"태그 안에있는 경우를 제외하고는 모두 작동합니다. 다음은 내 코드입니다 :Jsoup는 페이지의 모든 링크를 가져옵니다.

Document doc = Jsoup.connect(url) 
    .timeout(TIMEOUT * 1000) 
    .get(); 
Elements elts = doc.getElementsByTag("a"); 

그리고 여기 예제 HTML이다 :

<table> 
    <tr><td><a href="www.example.com"></a></td></tr> 
</table> 

내 코드는 링크를 가져 오지 않습니다. doc.select를 사용하는 것도 도움이되지 않습니다. 내 질문은 페이지에서 모든 링크를 얻는 방법입니다.

편집 : 문제가있는 부분을 알고 있다고 생각합니다. 문제가있는 페이지가 너무 잘못 작성되어 HTML 유효성 검사기에서 엄청난 양의 오류가 발생합니다. 이것이 문제를 일으킬 수 있습니까?

답변

4

일반적으로 JSUP는 가장 나쁜 HTML을 처리 할 수 ​​있습니다. JSoup에서 HTML을 덤프합니다 (간단한 출력 doc.toString()).

: getElementsByX() 대신 select()을 사용하십시오. 빠르고 더 유연합니다.

Elements elts = doc.select("a");(편집)

여기 선택기-API에 대한 개요입니다 : http://jsoup.org/cookbook/extracting-data/selector-syntax

+0

죄송합니다 나는이 문장하지 않는다 "덤프를 JSoup로 HTML (간단한 출력 doc.toString()) "할 수 있습니다. 더 명확하게 작성할 수 있습니까? –

+0

'Document' (Jsoup가 요소를 선택하기 위해 그것을 사용할 때 파싱 된 HTML을 포함합니다)를 출력하십시오. 'System.out.println (doc)'을 통해 읽거나 파일에 씁니다. 이제 필요한 요소를 확인할 수 있습니다. Btw. 내 대답의 편집을 참조하십시오 (선택자로 getElements를 대체하지 못했습니다). – ollo

0

것은이 코드를 시도

String url = "http://test.com"; 
Document doc = null; 
     try { 
      doc = Jsoup.connect(url).get(); 
      Elements links = doc.select(<i>"a[href]"<i>); 
      Element link; 

       for(int j=0;j<150;j++){ 
        link=links.get(j); 
        System.out.println("a= " link.attr("abs:href").toString()); 
      } 

     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
관련 문제