Einzelne Werte im Array nacheinander im Seitenquelltext einer Webseite suchen

  • Hallo zusammen,

    ich möchte gerne die wöchentlichen Kicker-Spielernoten der Bundesligamannschaften automatisiert in eine Exceldatei mit AutoIt einfügen. Ich habe mir das so vorgestellt:
    1. Öffne den Seitenquelltext der jeweilgen Partie
    2. Suche dann nach den einzelnen Spielernamen der jeweiligen Mannschaften.
    3. Da es sein kann, dass ein Name mehrfach vorkommt, habe ich mir überlegt nach: Spieler + </a> (note) zu suchen. Im Quelltext stehen die Noten z.B. so: Tschauner</a> (3)
    4. Wenn der Name vorkommt -> Kopiere die Note. Sonst -> suche den nächsten Namen im Quelltext

    Nun komme ich beim Zusammenfügen der einzelnen Namen im Array und dem: </a> (note) nicht weiter.

    Kann es sein, dass mein Zusammenfügen von §muster und dem Array garnicht geht ?
    Es wäre Super wenn ich die Spieler +Note in eine Textdatei ausgegeben bekommen würde.

    Ich hoffe es ist verständlich geschrieben.
    Danke schonmal
    mfg Ben


    [autoit]


    #Include <Array.au3>
    #Include <file.au3>

    [/autoit][autoit][/autoit][autoit]

    Dim $spieler[10]
    $file = "kader.txt"
    $anzahl = _FileCountLines($file)
    $line =1
    $quelle = BinaryToString(InetRead("http://www.kicker.de/news/fussball/2bundesliga/spieltag/2-bundesliga/2013-14/3/1894589/spielanalyse_fc-st-pauli-18_arminia-bielefeld-10.html", 1), 4)

    [/autoit][autoit][/autoit][autoit]

    $muster = "\<\/a\>.\(.\)"

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ;Textdatei einlesen
    for $i = 1 to $anzahl
    $spieler=StringSplit(FileReadLine($file, $line), "6",2)
    $line +=1
    $muster = $muster + $spieler[0]

    MsgBox(0, "", $muster)

    ;FileWriteline("ausgabe.txt",$spieler[0]) / Diese Zeile zeigt mir, dass sich die korrekten Werte im Array befinden
    ;Hier muss der befehl hin um nach jedem eintrag im array auf der seite zu suchen.

    [/autoit][autoit][/autoit][autoit]

    $regexp = StringRegExp($quelle,$muster ,3)

    $rest = $anzahl - $i
    ToolTip($rest & " lines left")

    [/autoit][autoit][/autoit][autoit]

    Next

    [/autoit]

    Einmal editiert, zuletzt von benny159 (21. August 2013 um 19:32)

  • Moin!

    Da alle Informationen aus dem Quelltext bezogen werden können, halte ich deinen Ansatz mit der seperaten Datei für ziemlich umständlich.

    Es gibt natürlich etliche Methoden die Daten auszulesen.
    In diesem Skript werden alle verfügbaren Spielanalysen pro Spieltag auf einmal geladen (erste/dritte Liga funktioniert ebenfalls):

    [autoit]

    #include <Array.au3> ;==> wird nur zur Anzeige der Arrays benötigt
    #include <String.au3>

    [/autoit][autoit][/autoit][autoit]

    Global $sHTMLSourceSpieltag, $aAllePartien

    [/autoit][autoit][/autoit][autoit]

    ;$sHTMLSourceSpieltag = InetRead("http://www.kicker.de/news/fussball/bundesliga/spieltag/1-bundesliga/2013-14/spieltag.html", 1) ;erste Liga
    ;$sHTMLSourceSpieltag = InetRead("http://www.kicker.de/news/fussball/3liga/spieltag/3-liga/2013-14/spieltag.html", 1) ;dritte Liga
    $sHTMLSourceSpieltag = InetRead("http://www.kicker.de/news/fussball/2bundesliga/spieltag/2-bundesliga/2013-14/spieltag.html", 1) ;2te Liga
    $sHTMLSourceSpieltag = BinaryToString($sHTMLSourceSpieltag, 1)

    [/autoit][autoit][/autoit][autoit]

    $aAllePartien = StringRegExp($sHTMLSourceSpieltag, '<td><a class="link" href="(.*)">Analyse</a></td>', 3) ;==> es gibt auch "Spielbericht", die Seite enthält aber keine Wertungen
    ;_ArrayDisplay($aAllePartien) ;==> das Array enthält die Links zu allen Spielanalysen

    [/autoit][autoit][/autoit][autoit]

    _AnalyseIt()

    [/autoit][autoit][/autoit][autoit]

    Func _AnalyseIt()
    Local $iPartie, $sHTMLSourcePartie, $aMannschaften, $aAufstellungBlock, $iTeam, $aSpieler
    For $iPartie = 0 To UBound($aAllePartien) - 1
    $sHTMLSourcePartie = InetRead('http://www.kicker.de' & $aAllePartien[$iPartie])
    $sHTMLSourcePartie = BinaryToString($sHTMLSourcePartie, 1) ;UMLAUTE!!!
    $sHTMLSourcePartie = StringReplace($sHTMLSourcePartie, '&nbsp;', ' ') ;==> "geschützte" Leerzeichen entfernen

    [/autoit][autoit][/autoit][autoit]

    ;==> liest ALLE Spieler in ein Array
    ;$aSpieler1 = StringRegExp($sHTMLSourcePartie, '.html">([\wÄäÖöÜüßÁÀáàÉÈéè\-. ]*)</a> \((\d,*\d*)\)', 3) ;==> "ÄäÖöÜüßÁÀáàÉÈéè" -> weitere Umlaute bei Bedarf einfügen
    ;_ArrayDisplay($aSpieler1)

    [/autoit][autoit][/autoit][autoit]

    ;==> trennt nach Mannschaften. Jede Mannschaft hat ihr eigenes Array (siehe Titel bei _ArrayDisplay Zeile 35)
    $aMannschaften = StringRegExp($sHTMLSourcePartie, '<th class="first alignleft">([\wÄäÖöÜüß\-. ]*)</th>', 3)
    _ArrayDisplay($aMannschaften, "Partie Nr. " & $iPartie + 1)

    [/autoit][autoit][/autoit][autoit]

    $aAufstellungBlock = _StringBetween($sHTMLSourcePartie, '<div><b>Aufstellung:', '<div class="sep13"></div>') ;==> Ein Block pro Mannschaft

    [/autoit][autoit][/autoit][autoit]

    For $iTeam = 0 To 1 ;oder 0 To Ubound($aAufstellungBlock) - 1
    $aSpieler = StringRegExp($aAufstellungBlock[$iTeam], '.html">([\wÄäÖöÜüßÁÀáàÉÈéè\-. ]*)</a> \((\d,*\d*)\)', 3) ;==> "ÄäÖöÜüßÁÀáàÉÈéè" -> weitere Umlaute bei Bedarf einfügen
    _ArrayDisplay($aSpieler, $aMannschaften[$iTeam])
    Next
    Next
    EndFunc ;==>_AnalyseIt

    [/autoit]


    Sanfte Grüße :D

  • Krass !! So was geiles. Ich fummel Tagelang an meinem kleinem Code Zeile für Zeile rum und du schüttelst dir das mal so eben viel komfortabler aus dem Ärmel.
    Nun werde ich mich mal dran versuchen jede einzelne Zeile wirklich auch selber zu verstehen.

    Vielen Dank !