ERLEDIGT
NEIN
NEIN
ANTWORTEN
4
4
ZUGRIFFE
885
885
EMPFEHLEN
-
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üsseGeändert von 7bkahnt (04.10.10 um 21:29 Uhr)
-
04.10.10 22:52 #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ß TomJava 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
-
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üsseGeändert von 7bkahnt (05.10.10 um 18:54 Uhr)
-
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
-
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...¤tPage=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...¤tPage=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
-
[C#/C++] DHCP Lease Zeit auslesen und auswerten
Von MartinNN89 im Forum C/C++Antworten: 5Letzter Beitrag: 03.09.10, 10:48 -
MySQL: Mehrere Tabellen auslesen und Ergebnis auswerten
Von tuFrogs im Forum Relationale DatenbanksystemeAntworten: 8Letzter Beitrag: 13.09.07, 15:24 -
fremde Webseiteninhalte auslesen
Von gamba im Forum PHPAntworten: 2Letzter Beitrag: 12.11.06, 01:47 -
VBS Textdatei auslesen und auswerten
Von dwg im Forum Visual Basic 6.0Antworten: 2Letzter Beitrag: 21.09.04, 11:59 -
Auswerten von Strömen (zugestreamte HTML-Quelltexte auswerten)
Von metacortex im Forum JavaAntworten: 5Letzter Beitrag: 05.07.04, 21:28





Zitieren


Login





