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

标签 java web-crawler jsoup

我正在使用 JSoup 来抓取页面。我通常需要在一个页面或一页中获取所有 url 的图像,然后放入 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。

最佳答案

没有关于 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());

关于java - 如何使用 JSoup 获取页面中的所有 url 图片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32616933/

相关文章:

java - 如何在Jsoup中关闭自动生成关闭标签</tagName>?

java - 支持具有相同 servlet 的两个 URI

java - Android Soundboard 一次只有一种声音

java - 重复实现公共(public)接口(interface)的父类和子类

java - 在对父类(super class)构造函数的 super 调用中使用子类方法作为参数

vba - VBA 的网络爬虫

php - 如何从返回 403 Forbidden 的站点的 PHP 中获取 URL 的标题

java - Jsoup.clean() 未关闭并打开标签

javascript - 是否可以禁用道场蜘蛛图动画?

java - 解析微数据时我得到空值