Webseiten mittels Java auslesen

7bkahnt

Aktives Mitglied
Hallo,
ich würde mir gern den Inhalt einer Website auslesen lassen und diese dann entsprechend auswerten. Ziel des ganzen ist es z.B. die Wettquoten der Bundesliga auf bwin auszulesen und aufzulisten, damit ich nicht immer die bwin-Seite aufrufen und mich entsprechend zur Bundesliga navigieren muss. Kurzum Spielerei ^^.
Eigentlich müsste es ja mit folgendem Code funktionieren:

Java:
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
 
public class WebsiteReader {
    final String[] KEYWORDS = {"."};
    public static void main(String[] args) {
    	long time = System.currentTimeMillis();
        new WebsiteReader().doIt("https://www.bwin.com/de/betViewIframe.aspx?SportID=4&bv=bb&selectedLeagues=0");
        System.out.println(System.currentTimeMillis() - time);
    }
 
 
    private void doIt(String s) {
        // TODO Auto-generated method stub
 
        BufferedReader br = null;
        InputStreamReader isr = null;
        URL url = null;
        try {
            url = new URL(s);
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
 
        if (url != null) {
            try {
                isr = new InputStreamReader(url.openStream());
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            br = new BufferedReader(isr);
 
            String line = null;
            File file = new File("temp.txt");
            FileOutputStream ausgabe = null;
			try {
				ausgabe = new FileOutputStream(file);
			} catch (FileNotFoundException e1) {
				e1.printStackTrace();
			}
            DataOutputStream raus = new DataOutputStream(ausgabe);
            try {
                while ((line = br.readLine()) != null) {
                    if (checkKeyWords(line)) {
                    	try {
            	            raus.writeBytes(line+"\n");
            	        }
            	        catch (IOException e) {
            	        }
                        System.out.println(line);
                    }
                }
 
            } catch (IOException e2) {
                // TODO Auto-generated catch block
                e2.printStackTrace();
            }
 
        }
 
    }
 
  
    private boolean checkKeyWords(String line) {
        // TODO Auto-generated method stub
 
        for (int i = 0; i < KEYWORDS.length; i++) {
            if (line.indexOf(KEYWORDS[i]) >= 0)
                return true;
        }
 
        return false;
    }
}

Funktioniert bei vielen Seiten auch. Ich bekomme in einer temp.txt datei den fast kompletten Quellcode der bwin Seite zusehen. Aber ich sehe keine Quoten im Quelltext, der mir geoutprintleintelt wird 🙂 .
Wenn ich allerdings auf der bwin-Seite rechtsklick-->Framequelltext anzeigen klicke, sehe ich diese Quoten im Quelltext.
Mir ist aufgefallen, dass die url als Endung aspx hat. Muss ich da irgendetwas beachten?

Wäre echt dankbar für nen Tipp.

Grüsse
 
Zuletzt bearbeitet:
wenn es dir darum geht, den quellcode (html ausgaben) zu kriegen, geht das so:

Java:
	private String getStrFromUrl(String surl){
		final String userAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12";
		try {
			URL url = new URL(surl);
	        URLConnection conn = url.openConnection();
	        conn.addRequestProperty("User-Agent", userAgent);
	        
	        BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
			String str, str1; 
			str = new String();
			while ((str1 = in.readLine()) != null) {
	            str = str + str1;
	        } 
	        in.close(); 
	        return str;
			} catch (MalformedURLException e) 
			{	System.out.println( e.getMessage());
			} 
			catch (IOException e) 
			{	System.out.println( e.getMessage());
			} 
	}

alles, was per php, sonstige serverseitigen scripte und html ausgegeben wird kannst du so auslesen, sollte js oder ähnliches da sein, kriegst auch im quellcode halt die js daten, das gleiche gilt für css.

Hoffe es hilft dir.
 
Zuletzt bearbeitet:
Super Sache, damit bekomme ich alles zu Gesicht! Danke!
Dauert nur recht lang ne. An die 15s.
Jetzt geht es nur noch ans auswerten^^. Das ist aber recht aufwendig ne? Würde jetzt mittels test.replace(....) alles einzeln auftrotteln und rausfiltern...

grüsse
 
also die dauer hängt von der größe der seite ab ... wenn jemand die methode optimieren möchte kann er mir gern bescheid geben^^ würde mich auch freuen, die hab ich mal vor längerer zeit gebraucht, für ein programm.

Beim auswerten kann ich auch net richtig helfen, ich hab immer nach bestimmten wörter gesucht, position bestimmt und dort den string abgeschnitten, dann die entsprechenden paar bytes gelesen und dann das nächte schlüsselwort gesucht ... geht recht gut, musst halt wissen, wie die seite aufgebaut ist, aber dafür hast ja den code^^
 
wenn jemand die methode optimieren möchte kann er mir gern bescheid geben^^ würde mich auch freuen, die hab ich mal vor längerer zeit gebraucht, für ein programm.

Vorschlag (in Schleifen Strings mit + verketten ist keine gute Idee/langsam):
Java:
   private String getStrFromUrl(String surl) {
      final String userAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12";
      try {
         URL url = new URL(surl);
         URLConnection conn = url.openConnection();
         conn.addRequestProperty("User-Agent", userAgent);

         BufferedReader in = new BufferedReader(new InputStreamReader(
               conn.getInputStream()));
         String str;
         StringBuilder builder = new StringBuilder(1024);
         while ((str = in.readLine()) != null) {
            builder.append(str);
            builder.append("\n"); //damit es hinterher auch so aussieht wie vorher ;-) 
         }
         in.close();
         return builder.toString();
      } catch (MalformedURLException e) {
         System.out.println(e.getMessage());
      } catch (IOException e) {
         System.out.println(e.getMessage());
      }
   }
 
Super Sache eigentlich. Habe mir jetz alle Spiele auflisten lassen.

Mir ist da nur ein Problem aufgefallen, dass bwin anscheinend die Seiten ändert.
Beispielweise wollte ich mir mal alle Quoten vom Fussball aufrufen lassen. Das ist mir am ersten Tag mit dieser Seite gelungen:
https://www.bwin.com/de/betviewifra...s=133&bv=bb&ShowDays=2147483647&currentPage=1

Heute seh ich, dass mir mit dem Link nicht mehr alle Spiele angezeigt werden (2 3 Spiele weniger)
bis ich gesehn habe dass sich die Adresse des Frames geändert hat:
https://www.bwin.com/de/betviewifra...s=168&bv=bb&ShowDays=2147483647&currentPage=1

Habt ihr da einen Rat bzw. Erfahrung?^^ Hab das ganze auch mal bei bet365.com probiert, weil die manchmal bessere Quoten haben, aber da kann ich ja gleich gar nichts rausfiltern... Da komme ich immer nur auf JavaScript-Methoden.... :-(
Scheint doch schwerer als gedacht zu werden...

grüsse und schönes we ;-)
 
Parsen von HTML Seiten und auslesen der Daten.... schau dir jtidy.sourceforge.net/ an. Damit kannst du dir aus dem Source Code einen DOM Baum geben lassen. Da drin kann man relativ sauber durch navigigieren und dinge auslesen.

Ich denke jedoch das bwin dir das nciht so leicht machen wird, da die sicher viel mit ajax nachlesen gehen.
 

Neue Themen


Zurück
Oben