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)。