+ Antworten
Ergebnis 1 bis 19 von 19

Thema: Jsoup Zugriff auf Kind im letzten DIV

  1. #1
    User short Themenstarter

    Registriert seit
    10.04.2014
    Fachbeiträge
    18
    Genannt
    1 Post(s)
    Ich versuche mit Jsup Daten von einer Internetseite zu lesen. Mein Vorgehen ist wie folgt :

    doc = Jsoup.connect("http://www.die Seite").get();
    String contentText = doc.select("..... div#feed_asset_1.long").first().text();
    System.out.println(contentText);

    Normalerweise sollte das klappen. der Wert den ich bemötige steht innerhalb des letzten DIV in childNodes. Wie kann ich darauf zugreifen. Ich hänge mal 2 Screenshot an, einem mit den Phatangaben und der 2. ist die DOM Panel untersuchung des letzten DIV. Soweit ich mitbekommen habe ist es ein long-Wert, und wenn ich den Namen des ChildNodes ermitte steht da #Text. Aber das ist nicht sicher. Jedenfalls erhalte ich keine Ausgabe der Zahlen. Ich habe es mit den Varianten unter versucht Das Resultat steht dahinter. Kann mir einer helfen bitte. Bitte keine Diskussion wegen illegal usw. Es ist legal. Da der Anbieter der Internetseite keine Benutzerschnittstelle hat, weiß er bescheid, das ich die Daten auslesen will für statistische Zwecke.
    .last().toString()==> <div class="long" id="feed_asset_1"> ... </div>
    .outerHtml() ==> <div class="long" id="feed_asset_1"> ... </div>
    .first().text(); ==> ...

    Danke Gerald

    Jsoup Zugriff auf Kind im letzten DIV-option1.jpg
    Jsoup Zugriff auf Kind im letzten DIV-option2.jpg

  2. #2
    Global Moderator Viertel Gigabyte
    Registriert seit
    05.08.2008
    Fachbeiträge
    4.913
    Genannt
    309 Post(s)
    Hm. Du willst die "1.38624" haben. Und du bekommst schon den richtigen Knoten, der Ausgabe nach. Inwieweit war das
    .first().text(); ==> ...
    eine Abkürzung für den Post hier? Also, er wird ja nicht drei Punkte ausgeben, und dem Muster der anderen Beispiele nach sollten die drei Punkte ja genau für die gesuchte Zahl stehen...!?

  3. #3
    User short Themenstarter

    Registriert seit
    10.04.2014
    Fachbeiträge
    18
    Genannt
    1 Post(s)
    Ich komm einfach nicht an die Zahl ran. Ich weiß nicht was ich falsch mache. Nein es ist keine Abkürzung sondern in der Ausgabe von Eclipse stehen tatsächlich nur die 3 punkte, oder eben der Ausdruck hinter dem ==> . Ich werd langsamm irre ich hab alles probiert kein Erfolg. Deswegen hoffe ich einer kann mir sanft auf die Sprünge helfen oder wie auch immer. Ich hatte eben angenommen das der Wert nicht im Div steht sondern im ersten Child. Aber was ich auch mache, entweder Fehler keine Ausgabe oder eben das was ich gepostet habe. Ich bastel schon ne Woche und auch in Google finde ich nichts. Na ja mein Englisch ist halt nicht so gut, das ich was rauslesen könnte. Aber ich denke es kann nur eine Kleinigkeit sein.

  4. #4
    Global Moderator Viertel Gigabyte
    Registriert seit
    05.08.2008
    Fachbeiträge
    4.913
    Genannt
    309 Post(s)
    Also mit einer Test-Datei
    HTML Code:
    1.  
    2. <hmtl>
    3.   <head></head>
    4.   <body>
    5.       <div>
    6.           <div class="long" id="feed_asset_1">123.456</div>
    7.       </div>
    8.   </body>
    9. </html>

    und folgendem Programm

    Java Code:
    1.  
    2. import java.io.File;
    3. import java.nio.charset.Charset;
    4.  
    5. import org.jsoup.Jsoup;
    6. import org.jsoup.nodes.Document;
    7.  
    8. public class JSoupTest
    9. {
    10.     public static void main(String[] args) throws Exception
    11.     {
    12.         File file = new File("JSoupTestInput.html");
    13.         Document doc = Jsoup.parse(file, Charset.defaultCharset().toString());
    14.         String contentText = doc.select("div#feed_asset_1.long").first().text();
    15.         System.out.println(contentText);
    16.     }
    17. }

    gibt er bei mir
    123.456
    aus. Kannst du das so weit bestätigen?

  5. #5
    User short Themenstarter

    Registriert seit
    10.04.2014
    Fachbeiträge
    18
    Genannt
    1 Post(s)
    danke erst mal werd ich ausprobieren. hoff es klappt
    Gerald

  6. #6
    User short Themenstarter

    Registriert seit
    10.04.2014
    Fachbeiträge
    18
    Genannt
    1 Post(s)
    leider klappt das im Netz nicht. Fehlermeldung " (Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch)" sobald ich eine Seite mit http:\www....... aufrufe. Die HP ist nicht auf dem Computer sondern im Netz. Hast du dafür auch eine Lösung ? Ich hatte es ja schon mit
    Zitat Zitat von gr170 Beitrag anzeigen
    doc = Jsoup.connect("http://www.die Seite").get();
    String contentText = doc.select("..... div#feed_asset_1.long").first().text();
    System.out.println(contentText);
    versucht.
    Danke Gerald

  7. #7
    Global Moderator Viertel Gigabyte
    Registriert seit
    05.08.2008
    Fachbeiträge
    4.913
    Genannt
    309 Post(s)
    Hm. Diese Meldung kann doch eingentlich nur kommen, wenn gerade versucht wird, das Dokument zu erstellen (und nicht bei der Suche, um die es ursprünglich ja ging). Oder... ?! Poste ggf. mal den Stack Trace.

  8. #8
    User short Themenstarter

    Registriert seit
    10.04.2014
    Fachbeiträge
    18
    Genannt
    1 Post(s)
    Was soll ich posten bitte und wie mach ich das? ich kann dir die HTML Adresse schicken da kannst du es selber ausprobieren. Ich bin ja wie gesagt auch ratlos. Ich habe es auch schon mit dem kompletten Pfad versucht. Kein Resultat.
    Danke Gerald

  9. #9
    Global Moderator Viertel Gigabyte
    Registriert seit
    05.08.2008
    Fachbeiträge
    4.913
    Genannt
    309 Post(s)
    Der Stack Trace ist das, was mit der Fehlermeldung zusammen noch so alles ausgegeben wird (oder werden sollte). Kannst die Seite ja mal posten, notfalls ans PN wenn sie nicht hier verlinkt sein soll (werde aber erst morgen abend oder am Mi. genauer schauen können)

  10. #10
    User short Themenstarter

    Registriert seit
    10.04.2014
    Fachbeiträge
    18
    Genannt
    1 Post(s)
    jo also es sind mit meinem Ansatz keine Fehlermeldungen aufgetreten. nur eben bringt er kein ergebnis außer den ... Ich schick dir die seite mal PN eventuell kannst du was rausfinden. Danke Gerald

  11. #11
    Global Moderator Viertel Gigabyte
    Registriert seit
    05.08.2008
    Fachbeiträge
    4.913
    Genannt
    309 Post(s)
    Hab' mir die Seite gerade mal angeschaut: Dort steht drin
    HTML Code:
    1.  
    2.                 <li class="currentPosition">
    3.                     <div class="long" id="feed_asset_1">...</div>
    4.                 </li>
    Kann es sein, dass er den Wert nur einsetzt, wenn man eingeloggt ist / irgendwelche Cookies gesetzt sind / man JavaScript aktiviert hat oder oder oder?

  12. #12
    User short Themenstarter

    Registriert seit
    10.04.2014
    Fachbeiträge
    18
    Genannt
    1 Post(s)
    genau so ratlos bin ich auch
    Da sich ja der Wert entsprechend ändert, dachte ich bisher was ich sehe ist auch zu händeln ich laß mir mal die Zugangsdaten geben .

  13. #13
    Projekt-Moderator - Simple Reader Halbes Megabyte Avatar von schlingel
    Registriert seit
    31.07.2013
    Fachbeiträge
    603
    Genannt
    59 Post(s)
    Zitat Zitat von gr170 Beitrag anzeigen
    Da sich ja der Wert entsprechend ändert, dachte ich bisher was ich sehe ist auch zu händeln ich laß mir mal die Zugangsdaten geben
    Browserweiche am Server? JS generierter Content?
    Es gibt nichts Gutes, außer man tut es!

  14. #14
    Global Moderator Viertel Gigabyte
    Registriert seit
    05.08.2008
    Fachbeiträge
    4.913
    Genannt
    309 Post(s)
    Ja, es gibt auf der Seite eine .JS-Datei, die zumindest auf dieses Element zugreift, und es scheint, als würde der Inhalt erst durch diese .JS gesetzt (aber die ist "obfuskiert"). Welche Möglichkeiten es da gibt, weiß ich nicht. Theoretisch könnte man zwar das .JS auslesen und ausführen, aber ... das ist kaum praktikabel...

  15. #15
    Projekt-Moderator - Simple Reader Halbes Megabyte Avatar von schlingel
    Registriert seit
    31.07.2013
    Fachbeiträge
    603
    Genannt
    59 Post(s)
    Zitat Zitat von Marco13 Beitrag anzeigen
    Theoretisch könnte man zwar das .JS auslesen und ausführen, aber ... das ist kaum praktikabel..
    Theoretisch war gestern

    Neben den üblichen Verdächtigen Web Extraction Wrappern (mozenda, etc.) gibt's da auch noch die Möglichkeit in HtmlUnit mit dem JS-Support zu experimentieren, Selenium und einen echten Browser zu verwenden oder eine PhantomJS getriebene Lösung anzupeilen.

    Ich hab' die besten Erfahrungen mit der Fernsteuerung echter Browser und mit PhantomJS. HtmlUnit funzt' bei komplexen Skripten sehr schlecht oder gar nicht. Je nachdem ... Aber Probieren geht über studieren.

    Puncto PhantomJS gibt's das schon etwas angestaubte pjscrape. Aber es funktioniert. Ansonsten kannst du dir mit einem HTML Snapshot Tool (prerender <- sehr gut!, seoserver) das generierte HTML organisieren und darauf dann JSoup loslassen.
    Es gibt nichts Gutes, außer man tut es!

  16. #16
    Global Moderator Viertel Gigabyte
    Registriert seit
    05.08.2008
    Fachbeiträge
    4.913
    Genannt
    309 Post(s)
    Ich sehe schon, dass da jemand diese Frage eher beantworten können wird, als ich

  17. #17
    User short Themenstarter

    Registriert seit
    10.04.2014
    Fachbeiträge
    18
    Genannt
    1 Post(s)
    da ich allerdings Anfänger bin, versteh ich erstmal Bahnhof und da ist meist nicht sehr viel zu verstehen. oh oh ich ahne schlimmes.

    *** Edit ***

    Also hab mir den link mal angesehen beim url ist klar, scraper steht offensichtlich wieder der CCSPfad also im beispiel oben "div#feed_asset_1.long" . Was bedeutet " tr td:nth-child(2)" ? entspricht das dem 2. Kind. Also in meinem Fall giebt es nur ein Kind dann sollte es "tr td:nth-child(1) sein richtig? Aber wie gesagt ich bin Anfänger und fühl mich recht unwohl mit meinem gestocher.
    Und wieder alles Englisch ein Kraus.
    Gerald

  18. #18
    Global Moderator Viertel Gigabyte
    Registriert seit
    05.08.2008
    Fachbeiträge
    4.913
    Genannt
    309 Post(s)
    Ja, ich kann/konnte mit den Begriffen auch nichts anfangen. Schon die Frage "Wie bekommt man den Shice dann nach Java rüber?" könnte ich bisher nur beantworten mit "Hui, da müßte man mal schauen, vielleicht irgendwie mit der ScriptEngine aus dem JDK?!"... Sowas wie cookies und login-informationen sind da sicher weitere Stolpersteine...

  19. #19
    Projekt-Moderator - Simple Reader Halbes Megabyte Avatar von schlingel
    Registriert seit
    31.07.2013
    Fachbeiträge
    603
    Genannt
    59 Post(s)
    Zitat Zitat von gr170 Beitrag anzeigen
    Und wieder alles Englisch ein Kraus.
    Der?
    Jsoup Zugriff auf Kind im letzten DIV-fleischmann_224_karl-kraus_hmw_133345_00001.jpg


    Zitat Zitat von gr170 Beitrag anzeigen
    Was bedeutet " tr td:nth-child(2)" ?
    Das bedeutet, dass du gern jedes zweite td-Element in einem jeden tr Element haben möchtest. Wenn's nur um das erste Element geht und es nur eines gibt, reicht auch tr > td

    Ich kann dir jetzt gar nicht sagen wo es eine gute Referenz gibt, da ich mir das in den letzten zwei Jahren über Stück für Stück immer weiter beigebracht habe. Aber prinzipiell sieht die Referenz ganz brauchbar aus: W3C Referenz.

    Zitat Zitat von gr170 Beitrag anzeigen
    Aber wie gesagt ich bin Anfänger und fühl mich recht unwohl mit meinem gestocher.
    Das hört nie ganz auf. Es gibt immer etwas wo man sich genau 0 auskennt und in erst einlesen muss. Nur Mut!

    Zitat Zitat von Marco13 Beitrag anzeigen
    Wie bekommt man den Shice dann nach Java rüber?
    Am besten per Webservice-Call. node ist node und man sollte sich da nicht auch noch die Arbeit antun und etwas auf eine Rhino-Engine zu porten die für Node gedacht war. Wenn's dann mit dem ganzen NPM-Krempel anfängt hast du meistens verloren. Es gibt allerdings für grüne Wiesenprojekte eine vielversprechende Implementierung auf Java-Basis: (ringojs)

    Zitat Zitat von Marco13 Beitrag anzeigen
    Sowas wie cookies und login-informationen sind da sicher weitere Stolpersteine...
    Das ist alles kein Problem, darauf kannst du direkt in PhantomJS zugreifen.
    Es gibt nichts Gutes, außer man tut es!

+ Antworten Thema als "gelöst" markieren

Direkt antworten Direkt antworten

Wie lautet das letzte Wort am Ende dieser Webseite?

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. NPE bei Zugriff auf Listenelement
    Von frankmehlhop im Forum Allgemeine Themen
    Antworten: 3
    Letzter Beitrag: 06.11.2013, 09:41
  2. Link zur letzten Antwort
    Von XHelp im Forum Kritiken & Anregungen
    Antworten: 15
    Letzter Beitrag: 26.08.2013, 07:55
  3. Antworten: 3
    Letzter Beitrag: 17.05.2013, 12:05
  4. "Die Top 10 Sicherheitsrisiken der letzten Wochen"
    Von L-ectron-X im Forum Sicherheit
    Antworten: 0
    Letzter Beitrag: 09.01.2009, 16:21
  5. [Erledigt] ID der letzten Frage rauskriegen
    Von swerflash im Forum Java-Grundlagen
    Antworten: 6
    Letzter Beitrag: 11.02.2007, 17:42

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •