Как извлечь абсолютный 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?


person sundhar    schedule 10.11.2010    source источник
comment
Где пример html? Мы не можем помочь вам, угадывая ....   -  person Buhake Sindi    schedule 10.11.2010


Ответы (2)


Вам потребуется 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");
}
person BalusC    schedule 10.11.2010

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

Неверно, потому что dl.select("a") вернет не один элемент, а коллекцию. Вам нужно получить элементы по индексу

eg :

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"); индексом вашего элемента. Или используйте более конкретный выбор, который приведет только к одному элементу.

person tindase    schedule 22.03.2012