2016-05-11 6 views
0

Also habe ich versucht, die Städte von dieser Seite zu analysieren: https://en.wikipedia.org/wiki/List_of_cities_in_SwitzerlandJsoup parst mehr Felder als notwendig, in Java verwendet

Ich bin neu in jsoup, also habe ich versucht, die Namen der Städte zu holen, aber ich bekomme jedes Element der Stadt.

Document doc = Jsoup.connect("https://en.wikipedia.org/wiki/List_of_cities_in_Switzerland").userAgent("Mozilla").get(); 
String title = doc.title(); 

Elements test = doc.select("table.wikitable").select("tbody").select("tr"); 

for (Element link : test) { 
    Elements temp = link.select("td").select("a"); 
    System.out.println(temp.text()); 

} 

Zum Beispiel bekomme ich diese Aarberg Aarberg Bern, während ich gerade Aarberg

wollte

Antwort

3

Du overcomplicating Dinge von so vielen select Anrufungen hinzufügen. Sie können Ihren Code vereinfachen, indem Sie eine select verwenden, in der Sie alle Elemente anzeigen, die Sie finden möchten. Verwenden Sie Leerzeichen, um die Beziehung zwischen Vorfahren und Nachkommen zu beschreiben.

Wie auch immer select("td") wählt alle td in ausgewählten tr. Dann sammeln Sie jeden a Link in diesen ausgewählten td.

Um nur zuerst td in jedem tr auszuwählen, können Sie den Selektor td:eq(0) verwenden. Dann können Sie jede a von jeder ersten td auswählen.

Wie auch immer Ihr Code etwas vereinfacht werden, eher wie:

Elements links = doc.select("table.wikitable tr td:eq(0) a"); 

for (Element link : links) { 
    System.out.println(link.text()); 
} 

Um mehr zu erfahren über Selektoren http://jsoup.org/cookbook/extracting-data/selector-syntax besuchen, wo Sie Beschreibung von :eq(n)

:eq(n) finden: Elemente finden, deren Geschwister Index ist gleich n; z.B. form input:eq(1)

Verwandte Themen