URL处理

在抓取网页内容的时候,可能会遇到href="/"开头的相对路径,那么我们需要把这些相对路径转成绝对路径

创建一个Java类:

public static void main(String[] args) throws IOException {    Document doc = Jsoup.connect("http://news.baidu.com/").get();    Element menuList = doc.select(".menu-list").first();    if(menuList!=null){        Elements as = menuList.select("a[href]");////带有href属性的a元素        if(as!=null && as.size()>0){            for(Element a:as){                System.out.println(a.attr("href")+" \t\t "+a.attr("abs:href"));            }        }    } }

输出结果:

/   http://news.baidu.com/ https://baijia.baidu.com/   https://baijia.baidu.com/ /guonei   http://news.baidu.com/guonei /guoji   http://news.baidu.com/guoji /mil   http://news.baidu.com/mil /finance   http://news.baidu.com/finance /ent   http://news.baidu.com/ent /sports   http://news.baidu.com/sports /internet   http://news.baidu.com/internet /tech   http://news.baidu.com/tech /game   http://news.baidu.com/game /lady   http://news.baidu.com/lady /auto   http://news.baidu.com/auto /house   http://news.baidu.com/house http://jian.news.baidu.com/   http://jian.news.baidu.com/


说明


使用 abs: 属性前缀来取得包含base URI的绝对路径。

在HTML元素中,URLs经常写成相对于文档位置的相对路径: <a href="/download">...</a>,当你使用 Node.attr(String key) 方法来取得a元素的href属性时,它将直接返回在HTML源码中指定定的值。

假如你需要取得一个绝对路径,需要在属性名前加 abs: 前缀。这样就可以返回包含根路径的URL地址attr("abs:href")

因此,在解析HTML文档时,定义base URI非常重要。

如果你不想使用abs: 前缀,还有一个方法能够实现同样的功能 Node.absUrl(String key)。