tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
885
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    7bkahnt 7bkahnt ist offline Mitglied Silber
    Registriert seit
    Apr 2010
    Beiträge
    61
    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:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    
    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
    Geändert von 7bkahnt (04.10.10 um 21:29 Uhr)
     

  2. #2
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo,

    welche Quoten meinst du denn?

    Hier wird auch alles Ausgegeben:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    public class WebScraperExample {
        public static void main(String[] args) throws Exception{
            Scanner scanner = new Scanner(new URL("https://www.bwin.com/de/betViewIframe.aspx?SportID=4&bv=bb&selectedLeagues=0").openStream());
            while(scanner.hasNextLine()){
                System.out.println(scanner.nextLine());
            }
            scanner.close();
        }
    }

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  3. #3
    7bkahnt 7bkahnt ist offline Mitglied Silber
    Registriert seit
    Apr 2010
    Beiträge
    61
    Hi Thomas,

    danke erstmal für die schnelle Antwort.Ich meine die Wettquoten. Die blieben mir bisher verborgen.
    Mit deinem Bsp. bekomme ich nur eine Zeile in der Console:

    "java.util.Scanner[delimiters=\p{javaWhitespace}+][position=0][match valid=false][need input=false][source closed=false][skipped=false][group separator=\.][decimal separator=\,][positive prefix=][negative prefix=\Q-\E][positive suffix=][negative suffix=][NaN string=\Q?\E][infinity string=\Q?\E]"


    Jetzt funktioniert es aber mit folgendem Code:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    
    public static void main(String[] args) {
             File file = new File("temp.txt");
             FileOutputStream ausgabe = null;
                try {
                    ausgabe = new FileOutputStream(file);
                } catch (FileNotFoundException e1) {
                    e1.printStackTrace();
                }
                DataOutputStream raus = new DataOutputStream(ausgabe);
                String test=new WebsiteReader().getStrFromUrl("https://www.bwin.com/de/sportsbook.aspx");
                try {
                    raus.writeBytes(test);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                System.out.println(test);
            
        }
        
        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";
            String str=null;
            String str1=null; 
            try {
                URL url = new URL(surl);
                URLConnection conn = url.openConnection();
                conn.addRequestProperty("User-Agent", userAgent);
                
                BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                
                str = new String();
                while ((str1 = in.readLine()) != null) {
                    str = str +"\r\n"+ str1;
                } 
                in.close(); 
                return str;
                } catch (MalformedURLException e) 
                {   System.out.println( e.getMessage());
                } 
                catch (IOException e) 
                {   System.out.println( e.getMessage());
                }
                return str;
        }

    Jetzt bekomme ich auch die js-skripte usw. zu Gesicht und auch die Quoten. Jetzt geht es nur noch ans auswerten. Das ist aber sehr aufwendig ne? Würde jetz mittels test.replace(....) alles einzeln auftrotteln und rausfiltern....

    grüsse
    Geändert von 7bkahnt (05.10.10 um 18:54 Uhr)
     

  4. #4
    dadom110 dadom110 ist offline Mitglied Brokat
    Registriert seit
    Nov 2005
    Beiträge
    252
    Zitat Zitat von 7bkahnt Beitrag anzeigen
    HJetzt geht es nur noch ans auswerten. Das ist aber sehr aufwendig ne?
    Das "Problem" ist das die Seite nicht gerade unkomplex ist, aufgrund der vielen Javascript Spielerreien die sie haben. Ich hätte es jetzt mit Regex gemacht ( jaja "HTML-Parsen mit Regex" - pfui), Thomas hat aber bestimmt noch einen ordentlichen HTML-parser an der Hand mit dem man so was sauber implementieren würde. Da ich so was bisher immer nur mit Python gemacht habe, habe ich mich mal auch in Java dran versucht und dabei ist so was "schmutziges" bei raus gekommen:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    
    //Regex Pattern, das steht so im Quelltext drin, die Einträge: "((.)*?)" heissen so viel wie: ein beliebiges Zeichen (.) beliebig oft (*) bis zum ersten auftauchen des folge Strings (?)
    // die klammern bilden die Gruppen 
    Pattern patt = Pattern.compile(".*?</div>((.)*?)</td><td class='odd'>((.)*?)</td></tr></table>.*?");
    Matcher matcher;
     
    //Spielerei um die Match-Partner gegenüber an zuzeigen
    String matchOut = "";
    int first = 1;
     
    //für jede Zeile in der Response
    String line=getNextLine()
    while (getNextLine() != null)
    {
      matcher = patt.matcher(line);
      if (matcher.matches())
      {
        //Erster Gegner
        if (first == 1)
        {
          matchOut = String.format("%s (%s) :", matcher.group(1), matcher.group(3));
        }
        //zweiter Gegner
        else
        {
          matchOut += String.format("%s (%s)", matcher.group(1), matcher.group(3));
          System.out.println(matchOut);
        }
        first *= -1;
     
      }
        line=getNextLine();
    }

    Output:
    Code :
    1
    2
    3
    
    Tschechien (1.62) : Schottland (5.25)
    Moldawien (13.00) : Niederlande (1.20)
    ....

    Grüße
    Dom
     

  5. #5
    7bkahnt 7bkahnt ist offline Mitglied Silber
    Registriert seit
    Apr 2010
    Beiträge
    61
    Das sieht ja top aus. Ich hatte es bisher etwas mühseeliger gemacht. Indem ich jedes einzelne Zeichen gereplaced habe aus dem String
    Da macht es sich doch mit dem .compile deutlich besser...

    Mir ist da auch noch 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/betviewifram...&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/betviewifram...&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
    Geändert von 7bkahnt (07.10.10 um 20:52 Uhr)
     

Ähnliche Themen

  1. [C#/C++] DHCP Lease Zeit auslesen und auswerten
    Von MartinNN89 im Forum C/C++
    Antworten: 5
    Letzter Beitrag: 03.09.10, 10:48
  2. MySQL: Mehrere Tabellen auslesen und Ergebnis auswerten
    Von tuFrogs im Forum Relationale Datenbanksysteme
    Antworten: 8
    Letzter Beitrag: 13.09.07, 15:24
  3. fremde Webseiteninhalte auslesen
    Von gamba im Forum PHP
    Antworten: 2
    Letzter Beitrag: 12.11.06, 01:47
  4. VBS Textdatei auslesen und auswerten
    Von dwg im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 21.09.04, 11:59
  5. Antworten: 5
    Letzter Beitrag: 05.07.04, 21:28