Ich würde gerne einzelne Daten von einer Internetseite auslesen und abspeichern

...komplette Frage anzeigen

1 Antwort

Ja, stimmt doch schon fast.

Der Lufttemperatur-Meßwert am Mast zum Beispiel könnte mit

"<!--TRS1 channel="temperaturmast"-->([^<]*)<!--TRS2-->"

"getroffen" werden.

Die anderen Meßwerte entsprechend. Einfach die Baumdarstellung der Seite öffnen (je nach Browser sitzt das irgendwo unter den jeweiligen "Entwicklerwerkzeugen" in einem verschachtelten Menü) und dort die entsprechenden Kennungen rauskopieren!

Hallo,

danke schon einmal für die Hilfe!!

Ich habe dies nun mal versucht einzufügen, er gibt mir keine Fehler an, jedoch spuckt er nicht aus. Es steht nur da das er erfolgreich durchgelaufen ist. Hier noch einmal ein kleiner Ausschnitt aus dem Code:

  URL u;
  InputStream is = null;
  DataInputStream dis;
  String s;

// Hauptprogramm: Hier wird der Befehl durchgeführt den Html code runterzuladen

  try {

     u = new URL("http://wetter.eit.uni-kl.de/anfang/messdaten.html");


     is = u.openStream();      


     dis = new DataInputStream(new BufferedInputStream(is));


  while ((s = dis.readLine()) != null) {

  String stringToSearch = s;

Pattern p = Pattern.compile(("temperaturmast-->([^<].*)<!--TRS2-->"));
Matcher m = p.matcher(stringToSearch);



    if (m.find()) {

                 System.out.println(m.group());

                           }


{

                           }

     }

  } catch (MalformedURLException mue) {

     System.out.println("A MalformedURLException happened.");
     System.exit(1);

  } catch (IOException ioe) {

     System.out.println("An IOException happened.");
     System.exit(1);

  } finally {


     try {
        is.close();
     } catch (IOException ioe) {

     }

}

  }

}

Ich sehe meinen Fehler nicht!?!? und noch eine Frage wenn ich mein Ergebnis ausgeben will aber vorher noch einen Antwortsatz schreiben will, wie "Die Temperatur beträgt"---dann das Ergebnis aus der Match funktion geht das?!?! oder bin ich auf einem ganz falschen Weg hier??

0
@Flaix007

Ja, da waren noch zwei Fehler im Pattern-Ausdruck (hatte nicht getestet): Anführungszeichen und Non-Greedy-Operator. Hiermit läuft's korrekt:

try
{
    Pattern p = Pattern.compile(("temperaturmast\"-->([^<].*?)<!--TRS2-->"));
    URL u = new URL("http://wetter.eit.uni-kl.de/anfang/messdaten.html");
    BufferedReader r = new BufferedReader(new InputStreamReader(u.openStream()));

    String s;
    while ((s = r.readLine()) != null)
    {
        //System.out.println(s);
        Matcher m = p.matcher(s);

        if (m.find())
        {
            System.out.println(m.group(1));
        }
    }
    r.close();
}
catch (Exception e)
{
    System.out.println(e);
}
0
@WhiteGandalf

Aaaaaaalso, Ich habe weiter an meinem kleinen Projekt getüftelt und bin durchaus zufrieden bis jetzt wie weit ich gekommen bin (auch danke eurer Hilfe). Ich kann jetzt mit meinem Programm alle Werte auslesen, was ich nun vorhabe ist folgendes, ich habe meine Outputs, diese sind aber noch nicht geordnet....nun würde ich gerne so machen das mein j=0 Wert neben meinen i=0 Wert angezeigt wird...habe schon einiges ausprobiert jedoch klappt es nicht ganz bei mir...ihr könnt unten meinen Quellcode sehen...ich habe unten auch (mit Komentar zeichen versehen) die Ausgabe hingeschrieben so wie ich es mir vorstelle....evtl. kann mir ja wieder jemand von euch helfen wie ich das Puzzel vervollständigen kann :-)

public static void main (String[] args) {

  URL u;
  InputStream is = null;
  DataInputStream dis;
  String s;
  String[] names = new String[] {"Tag", "Monat", "Jahr", "Stunde", "Minute", "Sekunde", "Lufttemperatur Mast", "Lufttemperatur Nordseite", "Lufttemperatur Suedseite", "Lufttemperatur Westseite", "Lufttemperatur Ostseite", "Feuchte", "Feger-Pyranometer", "Thies-Pyranometer", "Krieger-Radiostat, Helligkeit", "Tageslichtdauer", "Absoluter Druck", "Hypothetischer Luftdruck bei NN", "Windgeschwindigkeit", "Regenmengenmesser", "Niederschlagswächter"};

//Hauptprogramm: Hier wird der Befehl durchgeführt den Html code runterzuladen

  try {

     u = new URL("http://wetter.eit.uni-kl.de/anfang/messdaten.html");


     is = u.openStream();      


     dis = new DataInputStream(new BufferedInputStream(is));
  List<String> value = new ArrayList<String>();


  while ((s = dis.readLine()) != null) {




  String stringToSearch = s;

// the pattern we want to search for

   Pattern p = Pattern.compile(("->(.*?)<!-"));
    Matcher m = p.matcher(stringToSearch);

// while (m.find()) { if (m.find()) {

                // folgende zeile von na
        value.add(m.group(1));


                           }

// So stelle ich mir die Ausgabe von i und j vor?!?!?! //int j=0; // int i=0; //while (j<value.size() && i< names.length){ //System.out.println(value.get(j)+names.get(i)); //j++; //i++; // }

     }
 int j=0;
  while (j<value.size()){
  System.out.println(value.get(j));
  j++;

}
// Namen ausgeben for (int i = 0; i < names.length; i++) { System.err.println(names[i] + " "); }

  } catch (MalformedURLException mue) {

     System.out.println("A MalformedURLException happened.");
     System.exit(1);

  } catch (IOException ioe) {

     System.out.println("An IOException happened.");
     System.exit(1);

  } finally {


     try {
        is.close();
     } catch (IOException ioe) {

     }

}

  }

}

0
@Flaix007

Juhuuuu, also ich habe noch ein wenig dran rumgespielt und ausprobiert und es klappt nun fast alles. Es kommt genau der Output raus wie ich es wollte nur kommt er komischerweise mehrere male heraus, es würde mir reichen wenn jeder Wert nur einmal angezeigt wird....ich habe so das Gefühl das es an der while schleife liegt die meinen Code durchsucht nach dem match...bin mir da aber nicht sicher evtl. kann mir einer von euch etwas dazu sagen bzw. was ich verbessern muss um nur einmal den jeweiligen Wert zu bekommen?!?! (Ok diese Frage ist nicht ganz so wichtig da es mehr um die Estetik geht aber könnte ich die Ausgabe auch schön in einer Tabelle linke Spalte die names (i) und rechte Spalte die value(j) rein versetzten?!?!?!...wie gesagt nicht ganz so wichtig wie die Hauptfrage )

Hier noch einmal mein gebastelter Code: public static void main (String[] args) {

  URL u;
  InputStream is = null;
  DataInputStream dis;
  String s;
  String[] names = new String[] {"Tag", "Monat", "Jahr", "Stunde", "Minute", "Sekunde", "Lufttemperatur Mast", "Lufttemperatur Nordseite", "Lufttemperatur Suedseite", "Lufttemperatur Westseite", "Lufttemperatur Ostseite", "Feuchte", "Feger-Pyranometer", "Thies-Pyranometer", "Krieger-Radiostat", "Helligkeit", "Tageslichtdauer", "Absoluter Druck [gemessen ca. 285 m über NN]", "Hypothetischer Luftdruck bei NN", "Windgeschwindigkeit", "Windrichtung", "Regenmengenmesser", "Niederschlagswächter"};

//Hauptprogramm: Hier wird der Befehl durchgeführt den Html code runterzuladen

  try {

     u = new URL("http://wetter.eit.uni-kl.de/anfang/messdaten.html");


     is = u.openStream();      


     dis = new DataInputStream(new BufferedInputStream(is));
  List<String> value = new ArrayList<String>();



  while ((s = dis.readLine()) != null) {




  String stringToSearch = s;
   Pattern p = Pattern.compile(("->(.*?)<!-"));
    Matcher m = p.matcher(stringToSearch);

   if (m.find()) {
   // folgende zeile von na
   value.add(m.group(1));
   }

  // Tabelle erstellen

            int j = 0;
            int i = 0;
            while (j < value.size() && i < names.length) {
                System.out.println(names[i] + ":\t" + value.get(j));
                j++;
                i++;

            }





  }
  catch (MalformedURLException mue) {

     System.out.println("A MalformedURLException happened.");
     System.exit(1);

  } catch (IOException ioe) {

     System.out.println("An IOException happened.");
     System.exit(1);

  } finally {


     try {
        is.close();
     } catch (IOException ioe) {

     }

}

  }

}

0

Was möchtest Du wissen?