Come estrarre URL assoluto dal link HTML relativi in ??una Jsoup?
Domanda
Jsoup per estrarre l'URL di una pagina web. L'attributo href
di quelle di URL sono relative, come:
<a href="/text">example</a>
Ecco il mio tentativo:
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");
}
Questo funziona bene, ma se uso
String url = dl.select("a").attr("abs:href");
per ottenere l'URL assoluto come http://example.com/text
, non sta funzionando. Come posso ottenere l'URL assoluto?
Soluzione
È necessario Element#absUrl()
.
String url = dl.select("a").absUrl("href");
È possibile dal modo in cui ridurre la select:
Document document = Jsoup.connect(url).get();
Elements links = document.select("div.results dl a");
for (Element link : links) {
String url = link.absUrl("href");
}
Altri suggerimenti
String url = dl.select("a").absUrl("href");
Non è corretto perché dl.select("a")
non restituirà un singolo elemento, ma un insieme.
È necessario per ottenere gli elementi di indice
es:
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");
Se si è sicuri solo elemento risulterà dalla seleziona sopra, o che l'elemento che si desidera sarà il primo, è possibile:
String url = dl.select("a").get(0).absUrl("href");
che è anche uguale a
String url = dl.select("a").first().absUrl("href");
E non deve essere il primo elemento in ogni caso, è sempre possibile sostituire il 0 a
String url = dl.select("a").get(0).absUrl("href");
con l'indice del vostro elemento.
Oppure utilizzare un selezionare che è più specifico che si tradurrà in un solo elemento.