如何从网页的HTML获取绝对URL

时间:2014-11-05 17:18:21

标签: java html html-parsing jsoup web-crawler

这是一个实例。如果您转到http://superior.edu.pk的源代码(Ctrl + U),您将看到没有基本URL和/或http-equi等。当您向下滚动以检查图像时,它将显示不同的URL以完成相对路径以及何时检查HTML网址(例如,搜索AdmissionSchedule.aspx),您将看到不同的URL解析相对路径。我的问题是:如何将这些相对URL作为绝对URL?我尝试过jsoup abd:hre和element.absUrl(" href");两个都给我空字符串。设置document.setBaseUri(" http://www.example.com");也没有用,因为有两个不同的URL用作基本URL,比如说。

任何帮助都会让我感激不尽。

由于

1 个答案:

答案 0 :(得分:1)

为什么说有两个基本URL?所有相对链接都指向http://superior.edu.pk/presentation/user/(否则不是!)。

请尝试以下代码:

    //If you use an URL you haven't to especify base URL
    Document doc=Jsoup.connect("http://superior.edu.pk/presentation/user/Default.aspx").get();
    //If you use a file or a String you have. Base URL is http://superior.edu.pk/presentation/user/ of course  
    //Document doc = Jsoup.parse(Main.class.getResourceAsStream("page.htm"), "utf-8", "http://superior.edu.pk/presentation/user/");

    //Only as an example. You can fetch any anchor as wou wish.
    Elements links = doc.select("div.footerMaterial > a");
    for (Element link : links){
        String attr = link.absUrl("href");
        System.out.println(attr);
    }

您将正确查看所有绝对网址。从指向superior.edu.pk的相对链接获得的链接以及指向其各自域的绝对链接(www.digitallibrary.edu.pk和www.google.com)

(编辑)

您还可以测试此代码:

    Element link = doc.select(".logo > a:nth-child(1) > img:nth-child(1)").first();
    String attr = link.absUrl("src");
    System.out.println(attr);

会给你:

http://superior.edu.pk/images/logo.jpg

哪个是对的!

解释是,相对网址为../../images/logo.jpg http://superior.edu.pk/presentation/user/../../images/logo.jpg,其解析为http://superior.edu.pk/images/logo.jpg

页面只能有一个基本网址!