在使用JSoup进行网页解析的过程中,我们常常被要求获取网页中的链接。通过查看网页的源代码我们可以发现,网页中的链接一般是作为不同标签的属性来保存的,例如标签a中的href,标签img中的src等。那么很显然我们可以通过JSoup首先获取链接对应的标签,然后再获取相应的属性得到链接,如下所示
Document doc = JSoup.connect(url).get(); //使用JSoup访问网页,并获取网页内容
String imgLink = doc.select("img").first().attr("src"); //获取img标签下的链接
String aLink = doc.select("a").first().attr("href"); //获取a标签下面的链接
测试输出:
src: get_sugar_image.action?download=true&scale=0.4&outputType=png
href: show_glycan.action?glycanSequenceId=359
是不是感觉结果很奇怪,返回网页发现这个结果的确是网页上面保存的数据,也就是说网页上面并没有保存链接的完整的URL地址,而是默认将当前网页地址作为网页中链接的前缀访问的。那么,我们如何获取可访问的链接地址呢? 通过调试,我发现在获取属性值时使用以下方式--属性值前面加上"abs:":
String imgLink = doc.select("img").first().attr("abs:src"); //获取img标签下的链接完整url
String aLink = doc.select("a").first().attr("abs:href"); //获取a标签下面的链接完整url
测试输出:
src: http://unicarb-db.biomedicine.gu.se//unicarbdb/get_sugar_image.action?download=true&scale=0.4&outputType=png
href: http://unicarb-db.biomedicine.gu.se//unicarbdb/show_glycan.action?glycanSequenceId=359