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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top