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");

要获取绝对 URL http://example.com/text,它不起作用。如何获取绝对 URL?

4

2 回答 2

19

你需要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");
}
于 2010-11-10T15:37:50.917 回答
9

String url = dl.select("a").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");元素的索引。或者使用只会产生一个元素的更具体的选择。

于 2012-03-22T22:11:14.500 回答