使用jsoup将相对链接转换为绝对链接

5

我正在使用jsoup清理一个html页面,问题是当我将html本地保存时,图片不会显示出来,因为它们都是相对链接。

以下是示例代码:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;


public class so2 {

    public static void main(String[] args) {

        String html = "<html><head><title>The Title</title></head>"
                  + "<body><p><a href=\"/data/abstract/ash/2014/5/9/Paper_69295_abstract_120490_0.gif\" target=\"_blank\"><img width=\"437\" src=\"/data/abstract/ash/2014/5/9/Paper_69295_abstract_120490_0.gif\" height=\"418\" class=\"documentimage\"></a></p></body></html>";
        Document doc = Jsoup.parse(html,"https://whatever.com"); // baseUri seems to be ignored??

        System.out.println(doc);        
    }
}

输出:

<html>
 <head>
  <title>The Title</title>
 </head>
 <body>
  <p><a href="/data/abstract/ash/2014/5/9/Paper_69295_abstract_120490_0.gif" target="_blank"><img width="437" src="/data/abstract/ash/2014/5/9/Paper_69295_abstract_120490_0.gif" height="418" class="documentimage"></a></p>
 </body>
</html>

输出仍然显示链接为a href="/data/abstract/ash/2014/5/9/Paper_69295_abstract_120490_0.gif"。我希望它将它们转换成a href="http://whatever.com/data/abstract/ash/2014/5/9/Paper_69295_abstract_120490_0.gif"。有人能告诉我如何使用jsoup将所有链接转换为绝对链接吗?
1个回答

8
您可以使用Element.absUrl()选择所有链接并将它们的href转换为绝对地址。
在您的代码中的示例:

编辑(添加图像处理)

public static void main(String[] args) {

    String html = "<html><head><title>The Title</title></head>"
              + "<body><p><a href=\"/data/abstract/ash/2014/5/9/Paper_69295_abstract_120490_0.gif\" target=\"_blank\"><img width=\"437\" src=\"/data/abstract/ash/2014/5/9/Paper_69295_abstract_120490_0.gif\" height=\"418\" class=\"documentimage\"></a></p></body></html>";
    Document doc = Jsoup.parse(html,"https://whatever.com"); 

    Elements select = doc.select("a");
    for (Element e : select){
        // baseUri will be used by absUrl
        String absUrl = e.absUrl("href");
        e.attr("href", absUrl);
    }

    //now we process the imgs
    select = doc.select("img");
    for (Element e : select){
        e.attr("src", e.absUrl("src"));
    }

    System.out.println(doc);        
}

谢谢,这对于 href 有效,但是我该如何在 img src 上实现呢? - localhost
好的,你可以做同样的事情,选择图片并转换src属性,我将更新示例... - fonkap

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接