Как извлечь абсолютный 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?
Ответы
Ответ 1
Вам нужно 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");
}
Ответ 2
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");
с индексом вашего элемента.
Или используйте более конкретный вариант, который приведет только к одному элементу.