Selektornachhilfe JSoup

Dieses Thema Selektornachhilfe JSoup im Forum "Allgemeine Java-Themen" wurde erstellt von f10, 29. Dez. 2016.

Thema: Selektornachhilfe JSoup Hallo zusammen, ich habe neulich hier die Bibliothek JSoup entdeckt und damit ein bisschen herumgespielt. Nun habe...

  1. f10
    f10
    Hallo zusammen,

    ich habe neulich hier die Bibliothek JSoup entdeckt und damit ein bisschen herumgespielt.

    Nun habe ich ein kleines Problem. Reine Fiktion: Ich habe eine Lieblingswebseite und auf dieser präsentiert ein Restaurant seine Highlightangebote. Die Struktur der Webseite sieht ungefährt so aus:

    HTML:
    <h1 class="big">
    <a class="special_link" href="/dates/2016/12/28">
    <font class="event_link">MI. 28.12.16 MEXIKANISCH</font>
    </a>
    </font>
    </h1>
    <div style="width:500px;">
    <font class="raum_info">oben:</font>
    <br/>
    <font style="white-space:nowrap;">
    <font class="highlight_title">TAPAS</font>
    <font class="highlight_information“>- 4,80</font>
    </font>
    <font style="white-space:nowrap;">
    <font class="highlight_title">BURRITOS</font>
    <font class="highlight_information">- 3,70</font>
    </font>
    <br/>
    </div>
    <a class="more_link" href="/dates/2016/12/28">weiter lesen...</a>
    <br/>
    <br/>
    <h1 class="big">
    <a class="special_link" href="/dates/2016/12/31">
    <font class="event_link">SA. 31.12.16 SILVESTER</font>
    </a>
    </font>
    </h1>
    <div style="width:550px;">
    <font class="raum_info">oben:</font>
    <br/>
    <font style="white-space:nowrap;">
    <font class="highlight_title">Hirschragout</font>
    <font class="highlight_information“>- 22,80</font>
    </font>
    <font style="white-space:nowrap;">
    <font class="title">Sauerbraten</font>
    <font class="information“>- 11,70</font>
    </font>
    <font style="white-space:nowrap;">
    <font class="title">Cordon Bleu</font>
    <font class="information“>- 5,90</font>
    </font>
    <font style="white-space:nowrap;">
    <font class="title">Schnitzel</font>
    <font class="information">- 2,50</font>
    </font>
    <font style="white-space:nowrap;">
    <font class="title">Kartoffeln</font>
    <font class="information“>- 0,60</font>
    </font>
    <font style="white-space:nowrap;">
    <font class="title">Braubier</font>
    <font class="information“>- 2,30</font>
    </font>
    <font style="white-space:nowrap;">
    <font class="title">Gemüse</font>
    <font class="information“>- 0,50</font>
    </font>
    <br/>
    <font class=„raum_info">unseen:</font>
    <br/>
    <font style="white-space:nowrap;">
    <font class="title">Rotten</font>
    <font class="information“>- 10,60</font>
    </font>
    <font style="white-space:nowrap;">
    <font class="title">Weisswein</font>
    <font class="information“>- 11,20</font>
    </font>
    <font style="white-space:nowrap;">
    <font class="title">Rosé</font>
    <font class="information“>- 12,50</font>
    </font>
    <font style="white-space:nowrap;">
    <font class="title">Sekt</font>
    <font class="information">- 30,40</font>
    </font>
    <br/>
    </div>
    <a class="more_link" href="/dates/2016/12/31">weiter lesen...</a>
    <br/>
    <br/>
    <h1 class="big">
    <a class="freitag_link" href="/dates/2017/01/06">
    <font class="event_link">FR. 06.01.17 CABARET ZUM FRUEHSTUECK </font>
    </a>
    </font>
    </h1>
    <div style="width:550px;">
    <font class="raum_info">oben:</font>
    <br/>
    <font style="white-space:nowrap;">
    <font class="highlight_title">CREME BRULEE</font>
    <font class="highlight_information">- 4,90</font>
    </font>
    <font style="white-space:nowrap;">
    <font class="highlight_title">RUEHREI MIT KARTOFFELSALAT</font>
    <font class="highlight_information">- 7,60</font>
    </font>
    <font style="white-space:nowrap;">
    <font class="title">Orangensaft</font>
    <font class="information">- 2,30</font>
    </font>
    <font style="white-space:nowrap;">
    <font class="title">U.V.M.</font>
    <font class="information">und wie immer vieles mehr</font>
    </font>
    <font style="white-space:nowrap;">
    <font class="title">MODERATION:</font></font>
    <font style="white-space:nowrap;">
    <font class="title">Paule Paulson</font>
    <font class="information">(Heidewitzka)</font>
    </font>
    <br/>
    </div>
    <a class="more_link" href="/dates/2017/01/06">weiter lesen...</a>
    <br/>
    <br/>
    <h1 class="big">
    <a class="samstag_link" href="/dates/2017/01/07">
    <font class="event_link">SA. 07.01.17 THEATER MIT FREUNDEN</font>
    </a>
    </font>
    </h1>
    <div style="width:550px;">
    <font class="raum_info">oben:</font>
    <br/>
    <font style="white-space:nowrap;">
    <font class="highlight_title">Entenbrustfilet</font>
    <font class="highlight_information">- 6,90</font>
    </font>
    <font style="white-space:nowrap;">
    <font class="highlight_title">Gänsebraten</font>
    <font class="highlight_information">- 5,80</font>
    </font>
    <font style="white-space:nowrap;">
    <font class="highlight_title">Hühnerfrikasse</font>
    <font class="highlight_information">- 5,70</font>
    </font>
    <br/>
    <font class="raum_info">unten:</font>
    <br/>
    <font style="white-space:nowrap;">
    <font class="title">Kaninchen</font>
    <font class="information">- 5,90</font>
    </font>
    <font style="white-space:nowrap;">
    <font class="title">Rehkeule</font>
    <font class="information">- 12,60</font>
    </font>
    <br/>
    </div>
    <a class="more_link" href="/dates/2017/01/07">weiter lesen...</a>
    <br/>
    <br/>
     
    und das geht so weiter...
    Nun wollte ich alle Events in eine Liste packen.

    Code (Java):
    org.jsoup.nodes.Document doc = org.jsoup.Jsoup.connect("http://link.zum/Restaurant.html").get();

    org.jsoup.select.Elements events = doc.select("font.event_link");

    ArrayList<String> vas = new ArrayList<String>();

    for (org.jsoup.nodes.Element e : events)
               vas.add(e.text());
     
    Klappt auch wunderbar. Per Substring kann ich ja nun auch den Tag und das Datum und den Namen des Events in Strings speichern, da der Titel ja immer nach dem gleichen Schema aufgebaut ist. (z.B. FR. 13.08.16 STAR TREK MITTAGESSEN). Soweit so gut. Die Highlights ("font.highlight_title" und "font.title") bekomme ich auch in eine Liste geladen. Aber wie kann ich jetzt zum Beispiel nur die Highlights in eine Liste laden, die es am 13.08.16 gibt? Hat da jemand einen Tipp für mich? Denn anhand von CSS-Selektoren kriege ich das ja nicht formuliert, oder?
    Ich würde die Highlights gern nach Datum sortiert in Listen speichern wollen, aber noch fehlt mir die Idee, wie ich das bewerkstelligen soll.

    Vielen Dank schon mal.

    LG
    f10
     
  2. Vielleicht helfen dir diese Java-Grundlagen weiter --> *Klick*
  3. Ich persönlich würde das mit dem OOP-Prinzip lösen. Mache ich eigentlich immer wenn mehr als 3 Attribute zusammengehören.
    So könntest du dir eine Klasse erstellen, bzw eine Liste und dann kannst du ja Methoden schreiben a la getHighlightsByDate, getMealsByDate, etc pp
     
  4. f10
    f10
    Einfacher (für mich) ist es wohl, wenn ich das Ganze als String aneinanderreihe und dann splitte.

    Aber ich verfolge den Gedanken von dir mal.
     
  5. KOSTENLOSES Java-Grundlagen Training im Wert von 39 € Sichere dir hier den kostenlosen Zugriff auf umfangreiches Java-Know How und starte richtig durch!