Tabelle aus HTML in ein array schreiben OHNE IE.au3

  • Hallo,

    ich habe ein kleines Problem wo ich hoffe das ihr mir weiterhelfen könnt.

    Ich bin gerade dabei ein Programm zu schreiben welches auch die aufgabe haben soll eine Tabelle von einer HTML Seite auszulesen und die damm in ein Array speichern soll.

    Mit _IECreate, _IETableGetCollection und _IETableWriteToArray habe ich schon sehr gute erffahrung machen können und es kommt auch das raus was ich möchte.

    Jetzt habe ich aber das problem das ich von der Browserabhängigkeit weg möchte und alles Browserunabhängig machen möchte. Ich habe es mit der HTML.au3 UDF versucht und mit _HTML_GetSource und _HTML_GetTable ausprobiert, dabei schreibt er aber nur die überschriften der Tabelle ins Array und macht mir soviele LEERE Zeilen dadrunter wie auch Zeilen in der Tabelle sind + 1-2 Zeilen mehr, aber die Werte der Tabelle fehlen. Die Tabelle ist dynamisch, sie hat eine fixe anzahl von Spalten aber die Zeilen können Variieren.

    Am liebsten wäre mir ich könnte mir mit WinHttp den quellcode in einen String speichern und mir dann daraus die Tabelle rausholen und, wie gesagt, in ein Array speichern.

    Hat jemand eine Idee wie ich das realisieren kann?

    Ich muss schonmal dazu sagen ich bin noch ziemlich am anfang was AutoIT angeht und habe sonst auch keine weiteren Programmierkenntniss.

    Gruß
    Eichi

    PS: Um der Vermutung, es handele sich um ein Bot was ich machen will vorzubeugen...Es soll kein Bot werden. Es handelt sich um eine Wunschbox eines Webradios, die ich als DJ jede Woche auswerten muss.

  • Erstmal danke für deine Antwort. Also ich denke mal inetget und binaryto string kann ich hierdurch ersetzen, korregier mich wenn ich falsch liege:

    Spoiler anzeigen
    [autoit]

    $hSession = _winhttpopen("Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1")
    $hConnection = _winhttpConnect($hSession, "host")

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

    $sHTML = _WinhttpSimpleRequest($hConnection, "GET", "die seite mit der tabelle")

    _WinhttpcloseHandle($hConnection)
    _WinhttpcloseHandle($hSession)

    [/autoit]

    damit habe ich den quellcode in $sHTML.

    So mit StringRegExp habe ich bis jetzt noch nix gemacht, ich habe mir mal 1-2 Tutorials angesehen, aber irgendwann damit aufgehört weil ich es nicht so ganz kapiert habe. Kannst du mir einen Tip geben wie diese suchparameter ungefähr aussehen wurde? der quellcode der HTML datei sieht so aus

    Spoiler anzeigen
  • Reicht dir das als kleiner Ansatz?

    Spoiler anzeigen
    [autoit]

    #region - Timestamp
    ;2011-06-22 22:45:45
    #endregion - Timestamp

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

    #include <String.au3>
    #include <array.au3>
    $sFile = FileRead(@ScriptDir & "\test.html")

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

    $aTr = _StringBetween($sFile, "<tr>", "</tr>")
    _ArrayDisplay($aTr)

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

    For $i = 2 To UBound($aTr) - 1
    $aWunsch = StringRegExp($aTr[$i], "<font.*>(.*?)</font>", 3, 1)
    _ArrayDisplay($aWunsch)
    Next

    [/autoit]


    Wenn du alle Zeilen in einem einzigen Array haben willst, kannst du sie mit _Array2DAdd() in der Schleife zusammensetzen.

  • Jepp als Ansatz hat es mir gereicht, klappt auch so wunderbar, danke! Nur das mit _Array2dadd in der schleife klappt irgendwie nicht. Was ich irgendwie nicht ganz nachvollziehen kann. Das $awunsch = StringRegExp... erzeugt doch in jedem Durchgang ein neues Array oder? Also müßte ich doch nur in der Zeile dahinter

    Spoiler anzeigen
    [autoit]

    _array2dadd($aWunsch2, $aWunsch[0] & "|" & $aWunsch[1] & "|" & $aWunsch[2] & "|" & $aWunsch[3] & "|" & $aWunsch[4] & "|" & $aWunsch[5])

    [/autoit]

    einbinden und er sollte doch bei jedem durchgang dem Array $aWunsch2 die nächste Zeile hinzufügen oder? Das klappt aber nicht, er zeigt immer wieder als Fehler

    Spoiler anzeigen
    Code
    ==> Subscript used with non-Array variable.:
    _array2dadd($aWunsch2, $aWunsch[0] & "|" & $aWunsch[1] & "|" & $aWunsch[2] & "|" & $aWunsch[3] & "|" & $aWunsch[4] & "|" &  $aWunsch[5] )
    _array2dadd($aWunsch2, $aWunsch^ ERROR

    an.

    Wenn ich die array2add nach der schleife setze führt er es sauber aus und fügt mir die letzte Zeile in das $aWunsch2 ein.

    Kannst Du mir das erklären?

  • Zum erklären ist's schon etwas spät aber ich kann dir zeigen, wie es geht. Du machst es dir da etwas zu kompliziert ;)

    Spoiler anzeigen
    [autoit]

    #Region - Timestamp
    ;2011-06-25 02:54:45
    #EndRegion - Timestamp

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

    #include <String.au3>
    #include <array.au3>
    #include<ArrayMore.au3>
    Dim $aResult[1][6]
    $sFile = FileRead(@ScriptDir & "\test.html")

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

    $aTr = _StringBetween($sFile, "<tr>", "</tr>")

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

    For $i = 2 To UBound($aTr) - 1
    $aWunsch = StringRegExp($aTr[$i], "<font.*>(.*?)</font>", 3, 1)
    _ArrayDisplay($aWunsch)
    If IsArray($aWunsch) Then
    _Array2DAdd($aResult, _ArrayToString($aWunsch))
    EndIf
    Next

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

    _ArrayDisplay($aResult)

    [/autoit]