Как извлечь абсолютный URL из относительных HTML-ссылок с помощью Jsoup?
Я использую Jsoup для извлечения URL-адреса веб-страницы. Атрибут href
этих URL относителен, как:
<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?
2 ответа:
Вам нужно
Element#absUrl()
.String url = dl.select("a").absUrl("href");
Вы можете кстати сократить select:
Document document = Jsoup.connect(url).get(); Elements links = document.select("div.results dl a"); for (Element link : links) { String url = link.absUrl("href"); }
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");
с индексом вашего элемента. Или используйте select, который больше специфический, который приведет только к одному элементу.