# Webseiten mittels Java auslesen



## 7bkahnt (4. Okt 2010)

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:


```
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


----------



## darkeye2 (4. Okt 2010)

wenn es dir darum geht, den quellcode (html ausgaben) zu kriegen, geht das so:


```
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.


----------



## 7bkahnt (5. Okt 2010)

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


----------



## darkeye2 (5. Okt 2010)

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^^


----------



## 7bkahnt (5. Okt 2010)

Jut okay. Danke auf jeden Fall! ;-)


----------



## madboy (5. Okt 2010)

darkeye2 hat gesagt.:


> 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):

```
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());
      }
   }
```


----------



## 7bkahnt (7. Okt 2010)

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 ;-)


----------



## ARadauer (8. Okt 2010)

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.


----------

