如何从JSoup中的无序列表获取img元素的绝对URL

时间:2019-06-10 13:46:55

标签: java web-scraping jsoup

我正在尝试从无序列表中的图像属性中提取绝对URL。但是我无法这样做。  我只希望无序列表中的图像链接而不是整个站点。

<ul class="bjqs">
    <li><img src="images/slider_img/8.jpg" title="Automatically generated caption" /></li>
    <li><img src="images/slider_img/aeration-1.jpg" title="Automatically generated caption" /></li>
    <li><img src="images/slider_img/DesalinationIII-1.jpg" title="Automatically generated caption" /></li>
    <li><img src="images/slider_img/Energy-the-global-view-1.jpg" title="Automatically generated caption" /></li>
    <li><img src="images/slider_img/Exergy-1.jpg" title="Automatically generated caption" /></li>
    <li><img src="images/slider_img/Exergy-2.jpg" title="Automatically generated caption" /></li>
    <li><img src="images/slider_img/Medical-Engg-1.jpg" title="Automatically generated caption" /></li>
    <li><img src="images/slider_img/Phovoltaic-Systems-1.jpg" title="Automatically generated caption" /></li>
    <li><img src="images/slider_img/Phovoltaic-Systems-2.jpg" title="Automatically generated caption" /></li>
    <li><img src="images/slider_img/solar-1.jpg" title="Automatically generated caption" /></li>
    <li><img src="images/slider_img/solar-2.jpg" title="Automatically generated caption" /></li>
    <li><img src="images/slider_img/solar-3.jpg" title="Automatically generated caption" /></li>
    <li><img src="images/slider_img/solar-4.jpg" title="Automatically generated caption" /></li>
    <li><img src="images/slider_img/solar-5.jpg" title="Automatically generated caption" /></li>
    <li><img src="images/slider_img/solar-6.jpg" title="Automatically generated caption" /></li>
    <li><img src="images/slider_img/solar-7.jpg" title="Automatically generated caption" /></li>
</ul>

以下是到目前为止我尝试过的。但这只给了我第一个链接。不是其他人。

public static void main(String[] args) throws IOException {
    Document doc = Jsoup.connect("example.org").get();

    Elements ec = doc.select("ul.bjqs");

    for (Element e : ec) {
        System.out.println(e.select("li").select("img").attr("src"));
    }
}

1 个答案:

答案 0 :(得分:0)

您的第一个选择器错误。使用它来获取所有图像的列表:

Elements images = doc.select("ul.bjqs > li > img");
for (Element e : images) {
    System.out.println(e.attr("src"));
}

这将在HTML中打印所有相对URL。要获取绝对URL,可以在基本URL中使用URI.resolve()

String url = "http://example.org/";
Document doc = Jsoup.connect(url).get();

URI uri = new URI(url);
Elements images = doc.select("ul.bjqs > li > img");
for (Element e : images) {
    String relative = e.attr("src");
    System.out.println(uri.resolve(relative));
}

这将打印图像的绝对URL。