如何使用JSoup获取页面中的所有url图像?

时间:2015-09-16 19:20:03

标签: java web-crawler jsoup

我正在使用JSoup来抓取页面。我通常需要在页面或页面中获取所有网址图像,然后将其放入ArrayList<String>。填写了以下文件:

<!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。如果可能,我喜欢知道Java 6模式和Java 8模式,使用lambda。

1 个答案:

答案 0 :(得分: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());