2015-09-16 94 views
1

我使用JSoup來抓取頁面。我通常需要在頁面或頁面中獲取所有網址的圖片,然後放入ArrayList<String>。 Suposed後續文件:如何使用JSoup獲取頁面中的所有url圖像?

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="utf-8"> 
    <title>News Page</title> 
    </head> 
    <body> 
    <div class="news"> 
     <div class="new"> 
     <div class="image"> 
      <img src="../images/img01.jpg" /> 
     </div> 
     <div class="info"> 
      <p class="title"> 
      Grumpy wizards make toxic brew for the evil Queen and Jack. 
      </p> 
     </div> 
     </div> 
     <div class="new"> 
     <div class="image"> 
      <img src="../images/img02.jpg" /> 
     </div> 
     <div class="info"> 
      <p class="title"> 
      The quick brown fox jumps over the lazy dog. 
      </p> 
     </div> 
     </div> 
     <div class="new"> 
     <div class="image"> 
      <img src="../images/img03.jpg" /> 
     </div> 
     <div class="info"> 
      <p class="title"> 
      Pack my box with five dozen liquor jugs. 
      </p> 
     </div> 
     </div> 
    </div> 
    </body> 
</html> 

我做的是這樣的:

Document document = Jsoup.parse(html); 
Elements images = document.select(img); 

ArrayList<String> binaryUrls = new ArrayList<String>(); 
for(Element image : images) { 
    binaryUrls.add(image.absUrl("src")); 
} 

而結果:

['http//www.newssite.com/images/img01.jpg', 'http//www.newssite.com/images/img02.jpg', 'http//www.newssite.com/images/img03.jpg'] 

它的工作原理,但我想知道是否存在一小段路,只需要Jsoup就可以做到。

在生產環境中,我們還使用了Java 6。如果可能的話,我喜歡用lambda來了解Java 6模式和Java 8模式。

回答

1

對Java6沒有任何建議。

在Java中8使用lambda:

ArrayList<String> binaryUrls = Jsoup.parse(html).select("img") 
    .stream().map(p -> p.absUrl("src")) 
    .collect(Collectors.toCollection(ArrayList::new)); 

或者,如果返回類型可以只是List<String>

List<String> binaryUrls = Jsoup.parse(html).select("img") 
    .stream().map(p -> p.absUrl("src")) 
    .collect(Collectors.toList()); 
相關問題