Jsoup:null结果absUrl(绝对:)

时间:2015-01-27 04:58:58

标签: java uri jsoup

我尝试用jsoup制作图片链接下载器。我已经制作了一个下载程序HTML代码部分,当我完成一个解析部分时,我认识到,有时链接到图像时没有主要部分。所以我找到了absUrl解决方案,但由于某些原因它没有用(它给了我null)。所以我尝试使用uri.resolve(),但它给了我不变的结果。所以现在我不知道如何解决它。我附加了部分代码,负责将ant写入url解析为string:

public static String finalcode(String textin) throws Exception {
    String text = source(textin);
    Document doc = Jsoup.parse(text);
    Elements images = doc.getElementsByTag("img");
    String Simages = images.toString();
    int Limages = countLines(Simages);
    StringBuilder src = new StringBuilder();
    while (Limages > 0) {
        Limages--;
        Element image = images.get(Limages);
        String href = image.attr("src");
        src.append(href);
        src.append("\n");
    }
    String result = src.toString();
    return result;
}

1 个答案:

答案 0 :(得分:1)

看起来您正在从String解析HTML,而不是从URL解析。因为jsoup不知道这个HTML代码来自哪个URL,所以它无法创建绝对路径。

要为Document设置此URL,您应该使用Jsoup.parse(String html, String baseUri)版本解析它,例如

String url = "http://server/pages/document.htlm";
String text = "<img src = '../images/image_name1.jpg'/><img src = '../images/image_name2.jpg'/>'";
Document doc = Jsoup.parse(text, url);
Elements images = doc.getElementsByTag("img");
for (Element image : images){
    System.out.println(image.attr("src")+" -> "+image.attr("abs:src"));
}

输出:

../images/image_name1.jpg -> http://server/images/image_name1.jpg
../images/image_name2.jpg -> http://server/images/image_name2.jpg

其他选项是让Jsoup直接通过提供URL来解析页面,而不是使用HTML

提供String
Document doc = Jsoup.connect("http://example.com").get();

通过这种方式,Document将知道它来自哪个URL,因此它将能够创建绝对路径。