Как извлечь абсолютный URL из относительных ссылок HTML с помощью Jsoup? - PullRequest
16 голосов
/ 10 ноября 2010

Я использую 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 ]

15 голосов
/ 10 ноября 2010

Вам нужно 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");
}
8 голосов
/ 23 марта 2012

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

...