如何使用Jsoup从相对HTML链接中提取绝对URL?

20
我正在使用Jsoup来提取网页的URL。这些URL的href属性是相对路径,例如:
<a href="/text">example</a>

这里是我的翻译尝试:
Document document = Jsoup.connect(url).get();
Elements results = document.select("div.results");
Elements dls = results.select("dl");
for (Element dl : dls) {
    String url = dl.select("a").attr("href");
}

这个很好,但是如果我使用

标签,它会破坏我的布局。
String url = dl.select("a").attr("abs:href");

要获取类似于http://example.com/text的绝对URL,目前无法实现。您可以采用以下方法获取绝对URL:

示例HTML在哪里?我们无法通过猜测来帮助您... - Buhake Sindi
2个回答

21

您需要使用 Element#absUrl() 方法。

String url = dl.select("a").absUrl("href");

顺便提一下,你可以缩短选择语句:

Document document = Jsoup.connect(url).get();
Elements links = document.select("div.results dl a");
for (Element link : links) {
    String url = link.absUrl("href");
}

10

String url = dl.select("a").get(0).absUrl("href");

这不正确,因为dl.select("a")不会返回单个项目,而是一个集合。 您需要通过索引获取元素。

例如:

Elements elems = dl.select("a");
Element a1 = elems.get(0); //0 is the index first element increasing to (elems.size()-1)
now you can do
a1.absUrl("href");

如果你确定从上面的选择中只会得到一个结果,或者想要的项目将是第一个,那么你可以:
String url = dl.select("a").get(0).absUrl("href"); 

这也与

String url = dl.select("a").first().absUrl("href");

实际上并不一定需要使用第一个元素,你可以用你的元素索引替换代码中的0,例如: String url = dl.select("a").get(0).absUrl("href"); 或者,你可以使用更加具体的选择器,只选择符合条件的一个元素。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接