Laden...

Einlesen unterscheidlicher Webseitenformate is C# Sharp

Erstellt von gunjag vor 16 Jahren Letzter Beitrag vor 16 Jahren 5.054 Views
G
gunjag Themenstarter:in
17 Beiträge seit 2007
vor 16 Jahren
Einlesen unterscheidlicher Webseitenformate is C# Sharp

Hallo liebe Forumsgemeinde.
Ich bin nach dem Studium 2er Grundlagenbücher dabei mein erstes Projekt in C# zu realisieren und muss sagen, ich stehe doch leider wie der berühmte Ochs vorm Berg.

Ich scheiter an dem auslesen, bzw. parsen von Webseiten.
Konkret. Ich bin dabei einen Bot für unterscheidliche Wettanbieter zu entwickeln.
Dabei muss ich beispielsweise pages wie bwin oder auch betfair auslesen. Und an dieser Stelle tritt das Problem auf, dass es keine normalen HTML Pages sind und beispielsweise die Quoten etc. nicht ausgelesen werden können.
Hat jemand von euch einen Tipp, wie ich am besten an die Sache herangehe bzw. wo ich gute INfos zu dem Thema bekommen kann.
Danke und viele Grüße
gunjag

5.941 Beiträge seit 2005
vor 16 Jahren

Hallo gunjag

Original von gunjag
Ich scheiter an dem auslesen, bzw. parsen von Webseiten.

Wo genau scheiterst du?

Original von gunjag
Und an dieser Stelle tritt das Problem auf, dass es keine normalen HTML Pages sind und beispielsweise die Quoten etc. nicht ausgelesen werden können.

Sondern?

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

M
402 Beiträge seit 2005
vor 16 Jahren

Hi!

Möglicherweise liegt es daran, daß die Anbieter vielleicht gar nicht
möchten, daß irgendjemand die Wetten oder Quoten ausliest.

Ich vermute, daß die Tabellen per Ajax oder ähnl. nachgeladen werden
und somit ein auslesen schwierig wird.

Frag doch mal bei den Anbietern nach ob es eine Möglichkeit für
3rd Party - Entwickler gibt legal an die Daten zu kommen.

lg

183 Beiträge seit 2006
vor 16 Jahren

In vielen Fällen bieten die Anbieter dann Ihre Daten in Form von WebServices an, somit kannst Du sie dann ohne großer Arbeit auf einer eigenen Seite einbinden. ABER viele Anbieter wollen auch einen kleinen "obolus" dafür haben!

Gut Schuß
VuuRWerK 😉

G
gunjag Themenstarter:in
17 Beiträge seit 2007
vor 16 Jahren

Hallo zusammen.
Danke für eure Antworten.
Ich habe auch schonmal dran gedacht, dass es verhindert werden soll an die Daten zu kommen.
Aber andererseits gibt es bereits einige, auch private Bots, die auf die Webseiten zugreifen und exact die Quoten etc auslesen.
Zumindestens beim Anbieter Betfair kenne ich mehrere.

Ajax sagt mir leider gar nichts, muss ich mich mal schlau machen.

@Peter: Ich weiß nicht genau welche Datei bzw. Webformate das sind.
Vielleicht schaust du einfach einmal auf www.betfair.com -->sports und dann ein beliebiges ereignis.

Thx für Anregungen
gunjag

5.941 Beiträge seit 2005
vor 16 Jahren

Hallo gunjag

Das wird mit AJAX nachgeladen.
Da wirds relativ schwierig bis unmöglich, das auszulesen.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

G
gunjag Themenstarter:in
17 Beiträge seit 2007
vor 16 Jahren

Das ist natürlich ein Traum X(
Schwierig bis unmöglich heißt: unmöglich oder schwierig? 😁
Weil wie gesgat, es gibt definitiv bots, die das auslesen und das auch in Echtzeit.
Oder arbeiten die dann mit dem Anbieter zusammen und bekommen die Daten auf einem anderen Weg übermittelt
Gruß
Tim

5.941 Beiträge seit 2005
vor 16 Jahren

Hallo Tim

Ich würde sagen, dass das nicht über ein Host möglich ist.
D.h. weil das alles ins DOM geladen wird, bräuchtest du einen Browser bei dem du das DOM auslesen könntest.
Das ist jetzt mein Gedanke auf die Schnelle.

Ich denke die anderen lösen das über einen Webservice oä.
Alles andere wäre zu umständlich, schwierig und langsam.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

G
gunjag Themenstarter:in
17 Beiträge seit 2007
vor 16 Jahren

Tja und ienen Webservice müsste ich dann wahrscheinlich bei dem Anbieter "beantragen", was der sicherlich nicht so gerne hat.
Tja, scheiße gelaufen.
Meinst du es gäbe eine chance irgendwie einen bestehenden Bot zu nutzen und diesen "Auszulesen", d.h. den im Hintergrund mitlaufen zu lassen und im Grunde die Daten irgendwo abzweigen und dann weiterverarbeiten?

Gruß
Tim

PS: Wird bwin auch mit AJAX nachgeladen?

5.941 Beiträge seit 2005
vor 16 Jahren

Hallo gunjag

Nunja, wenn der Anbieter ein Webservice anbietet, wird er es sicherlich (evt. mit entsprechenden Konditionen) gerne haben, wenn dieser auch benutzt wird 😉

Welches bwin meinst du? bwin.de?
Wenn ja, welchen Teil davon?
Wenn du mir ein Link eines Artikels schicken kannst, geht auch das auslesen 🙂

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

G
gunjag Themenstarter:in
17 Beiträge seit 2007
vor 16 Jahren

Hey
So langsam fange ich an ein paar Sachen zu raffen, aber langsam.

Hier ist eine Page die ich gerne auslesen würde
https://www.bwin.de/livebets.aspx?eventID=1066395

5.941 Beiträge seit 2005
vor 16 Jahren

Hallo gunjag

Okay, das ist wiederum Flash.
Das geht AFAIK gar nicht bzw. nur mit riesen grossen Umwegen, also besser vergessen.

Ich würde den anderen Weg gehen und um Kooperation mit den anderen Webseiten anfragen.
Webservices sind dann eine kleine[tm] Runde bequemer 😉

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

G
gunjag Themenstarter:in
17 Beiträge seit 2007
vor 16 Jahren

Lol
Du verstehst es echt einem Mut zu machen 😁
Jetzt habe ich nämlich gerade rausgefunden, dass Betfair einen Webservice anbietet, aber bwin nicht. Und nun das 🙂
Also nur nochmal um sicher zu gehen.
Die in Flash dargestellten quoten auszulesen sollte ich lieber schnell vergessen??

5.941 Beiträge seit 2005
vor 16 Jahren

Hallo gunjag

Original von gunjag
Lol
Du verstehst es echt einem Mut zu machen 😁

Okay, sorry.
Natürlich ist es relativ einfach möglich, probiers einfach g.

Nein, Schwerz beiseite 😉

Original von gunjag
Also nur nochmal um sicher zu gehen.
Die in Flash dargestellten quoten auszulesen sollte ich lieber schnell vergessen??

Ich habe das noch nie probiert, kann aber dank meinen bisherigen Erfahrungen und des Verständnisses folgende Schlüsse ziehen:

  1. Bei einem externen Request auf eine Webseite bekommt man den Html Quellcode zurück, nicht mehr und nicht weniger.
  2. Im Html Quellcode steht dann die Einbindung des Flash Filmes, also bspw. <object ...... .</object>
  3. Daraus könntest du den Dateinamen des Flash Filmes extrahieren, soweit kein Problem
  4. Mit dem Dateienamen des Flash Filmes kannst du diesen downloaden.
  5. Musst du jetzt bei dir irgendwie Informationen aus dem Flash Film herausziehen

5.1 Das wird höchstwahrscheinlich aber nicht gehen, da du eine ander Umgebung stehen hast, als dies Live der Fall ist

Die Konklusion: Ich versuche nicht dich zu entmutigen, sondern eher dich vor unnützen Anstrengungen zu bewahren.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

G
gunjag Themenstarter:in
17 Beiträge seit 2007
vor 16 Jahren

Hey Peter.
Das habe ich auch so verstanden, schon klar dass Du mich nicht entmutigen willst.
Ich habe aber nun entgegen deiner Aussage jetzt doch eine Möglichkeit gefunden an die Frames bzw. an die Flash Infos zu kommen und zwar über das http Sniffing.
Damit fange ich die genauen html Links ab und kann die dann mittels eines einfachen Web Request auslesen.
Hier der Code dazu:

using System;
using System.IO;
using System.Net;
using System.Text;

class WebFetch
{
static void Main(string[] args)
{
// ganzen Input bereitstellen
StringBuilder sb = new StringBuilder();

    // erzeugt Array   
    byte[] buf = new byte[8192];  

    // Eingabe der Page die augelesen werden soll  
    
    HttpWebRequest  request  = (HttpWebRequest)  

WebRequest.Create("http://live.bwin.de/V2GetEventData.aspx?eid=1077020&cts=633300441455888374&lang=2&mbo=0&cs=75A900F4&n=1&r=1194447365594");

    HttpWebResponse response = (HttpWebResponse)  
        request.GetResponse();  

      
    Stream resStream = response.GetResponseStream();  

    string tempString = null;  
    int count = 0;  

    do  
    {  
        // daten in den Buffer einlesen  
        count = resStream.Read(buf, 0, buf.Length);  

        // sicher gehen, dass Daten vorhanden sind  
        if (count != 0)  
        {  
            // in ASCII  
            tempString = Encoding.ASCII.GetString(buf, 0, count);  

            // string aufbauen  
            sb.Append(tempString);  
        }  
    }  
    while (count &gt; 0); // noch weitere Daten?  

    // Ausgabe  
    Console.WriteLine(sb.ToString());  
    Console.Read();  
     
}  

}

Das ist jetzt ein Beispiel von vorhin, also es kann sein, dass der jetzt unter diesem Frame nichts mehr ausspuckt 😁

Nun aber habe ich doch noch eine Frage.
Das habe ich ja jetzt als eine Klasse festgelegt und die Ausgabe erfolgt über eine Konsole.
Ich würde das ganze aber gerne in eine GUI einbinden, in der ich beispielsweise die gewünschte URL eingeben kann, die wird dann dem o.a. Code übergeben und anschließend kann ich das ganze dann per Regex auswerten.
Also, meine eigentliche Frage. Wo muss der gepostete Code hin, dass ich ihn in eine GUI einbinden kann.
Ich hoffe ich ahbe nciht alle vollständig verwirrt.

Ein sich durch Foren wühlender

Tim 8)

5.941 Beiträge seit 2005
vor 16 Jahren

Hallo Tim

Nett was du rausgefunden hast 🙂
Hmm du brauchst eigentlich nur Windows Forms Grundlagen.
Dann kannst du diesen Code ganz einfach einbinden.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

G
gunjag Themenstarter:in
17 Beiträge seit 2007
vor 16 Jahren

So, jetzt bin ich ein gutes Stück weiter gekommen und schon zum Teil dabei, meinen doch etwas chaotischen Quelltext mal ein bisschen zu pimpen und ordnen.
Dabei folgendes Problem.
Ich habe nun viele einzelne Funktionen "private xxxx()", in denen alle möglichen Codes stehen.
Noch mache ich es so, dass ich diese Funktionen über die Ausgabefelder miteinander verknüpfe. Soll heißen, wenn ich einen string erzeugt habe, dann gebe ich ihn in einem Textfeld aus, welches ich dann anschließend in der nächsten Funktion wieder auslese um den String beispielsweise zu durchsuchen.
Das ist ziemlich unelegant, das ist mir auch klar.
Aber ich will, bzw. kann nicht alles in eine Funktion packen.
Jetzt meine Frage: Wie kann ich beispielsweise in einer Funktion einen String erzeugen, auf den ich aus der nächstebn Funktion dann wieder zugreifen kann. Es muss irgendwie mit public gehen, aber ich kriege es einfach nciht hin 🙂
LG
Tim

5.941 Beiträge seit 2005
vor 16 Jahren

Hallo Tim

Entweder übergibtst du die Werte immer oder hältst sie innerhalb der eigentlichen Klasse verfügbar.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

G
gunjag Themenstarter:in
17 Beiträge seit 2007
vor 16 Jahren

erledigt...