Firefox Daten einlesen

  • Hallo,
    versuche seit geraumer Zeit den Inhalt einer Tabelle auf einer Homepage auszulesen. Leider habe ich keine Ahnung wie ich dabei vorgehen soll und alle Versuche die ich bisher getätigt habe, sind gescheitert. Habe es zuletzt über die FF.au3 versucht. Wollte den Quelltext einlesen und dann aus diesem den für mich relevanten Teil herausfiltern. Nur weiß ich nicht wie ich dazu vorgehen soll. Das auslesen des Quelltextes ging Problemlos.

    Bsp.:

    Wenn ich von dieser Seite nur die erste Zelle ausgeben möchte, wie gehe ich da vor?
    Wäre nett wenn mir dies jemand erklären könnte.

    Spoiler anzeigen
    [autoit]

    #Include <FF.au3>

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

    _FFStart("http://german.documentation.ff-au3.thorsten-willert.de/")
    _FFLoadWait()

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

    $sHTML = _FFReadHTML()

    MsgBox(64,"Sourcecode",StringLeft($sHTML,1000))

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

    while 1
    wend

    [/autoit]

    Einmal editiert, zuletzt von descent (16. April 2010 um 18:54)

  • Hallo descent,

    du hast doch den Source in $sHTML. Diesen kannst du mit den normalen Funktionen zur Stringmaniplation (Hilfe: Zeichenketten, Strings Funktion Referenz) oder StringRegEx auswerten,

    mfg (Auto)Bert

  • Hallo,

    am einfachsten ist es den Quelltext erst gar nicht auszulesen z.B. die der Text in der ersten Tabellen-Zeile:

    Spoiler anzeigen
    [autoit]


    #Include <FF.au3>

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

    _FFStart("http://german.documentation.ff-au3.thorsten-willert.de/") ; beinhaltet schon _FFLoadWait
    MsgBox(0,"Erste Tabellen-Zeile:", _FFXPath("//tr[1]","textContent") )

    [/autoit]
  • Vielen Dank, dass ist eig. genau das, wonach ich gesucht habe. Weißt du ob man nun, unabhängig von der Länge Tabelle, da diese ja bei anderen variieren kann, die komplette einlesen kann, damit man diese später beispielsweise wieder über ein Label auf einem Gui ausgeben kann?
    Das mit dem Ausgeben müsste ich hinbekommen, nur das Einlesen bereitet mir noch immer Schwierigkeiten..

  • Hallo,

    da _FFTableWriteToArray gerade ein Problem hat ...
    Geht es z.B. so:

    Spoiler anzeigen
    [autoit]


    ;....

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

    $_FF_COM_TRACE = False ; Ausgabe in die Console ausschalten

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

    $iSpalten = _FFXPath("//table[1]//tr[1]//td", "", 10) ; Anzahl der Spalten ermitteln
    MsgBox(0,"2 Spalten",$iSpalten)
    $aTD = _FFXPath("//table[1]//td","textContent",6) ; alle Zellen auslesen
    _ArrayDisplay($aTD)

    [/autoit]


    damit läßt sich eine einfache Tabelle (ohne verbundene Zellen) sehr schnell auslesen.

  • Danke dir vielmals. Stehe nun vor einem weiteren Problem. Ich möchte die Inhalte in einer eigenen Listview auf einem Gui ausgeben. Das Einfügen einzelner Werte klappt soweit dank deiner Hilfe auch :) . Wie muss ich jedoch vorgehen, um alle Daten die gefunden wurden einzulesen? Es wäre auch noch interessant zu wissen ob man die Breite der Einzelnen Unterteilungen im Listview festlegen kann.

    Danke im Voraus für jegliche Tipps und Hilfen.

    Spoiler anzeigen
    [autoit]


    #Include <FF.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>

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

    _FFStart("http://german.documentation.ff-au3.thorsten-willert.de/") ; beinhaltet schon _FFLoadWait

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

    $_FF_COM_TRACE = False ; Ausgabe in die Console ausschalten

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

    $aTD = _FFXPath("//table[1]//td[1]","textContent",6) ; alle Zellen auslesen
    $aTD1 = _FFXPath("//table[1]//td[2]","textContent",6) ; alle Zellen auslesen

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 633, 447, 192, 124)
    $List1 = GUICtrlCreateListview("Zeile 1|Zeile 2", 32, 64, 561, 344)
    GUICtrlCreateListViewItem($aTD[1] &"|"& $aTD1[1], $List1)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

    [/autoit]
  • Hallo,

    nicht ausführlich getestet:

    Spoiler anzeigen
    [autoit]

    #Include <FF.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #Include <GuiListView.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>

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

    _FFStart("http://german.documentation.ff-au3.thorsten-willert.de/") ; beinhaltet schon _FFLoadWait

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

    $_FF_COM_TRACE = False ; Ausgabe in die Console ausschalten

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

    $iSpalten = _FFXPath("//table[1]//tr[1]//td", "", 10) ; Spalten ermitteln
    $aTD = _FFXPath("//table[1]//td","textContent",6) ; alle Zellen auslesen

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

    $aArray = _2DArray($aTD, $iSpalten)
    $aListViewData = _ArrayToListViewData($aArray)

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 633, 447, 192, 124)
    $List1 = GUICtrlCreateListview($aListViewData[0], 32, 64, 561, 344)
    ;ListView Daten einfügen
    For $i = 1 To UBound($aListViewData) -1
    GUICtrlCreateListViewItem($aListViewData[$i], $List1)
    Next
    ; Spaltenbreite setzen
    For $i = 0 To $iSpalten
    _GUICtrlListView_SetColumnWidth($List1, $i, $LVSCW_AUTOSIZE)
    Next
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd
    ;===============================================================================
    Func _ArrayToListViewData($a) ; Umwandeln eines 2D-Array in ListView-Daten
    Local $aTMP[UBound($a)]
    For $i = 0 To UBound($a)-1
    $aTMP[$i] = ""
    For $j = 0 To UBound($a,2)-1
    $aTMP[$i] &= $a[$i][$j] & "|"
    Next
    Next
    Return $aTMP
    EndFunc
    ;===============================================================================
    Func _2DArray($aData, $iSpalten) ; Umwandeln der Zellen in ein 2D-Array
    Local $aTMP[UBound($aData)/$iSpalten][$iSpalten]
    For $i = 1 To UBound($aData)-1 Step $iSpalten
    For $j = 0 To $iSpalten-1
    $aTMP[$i/$iSpalten][$j] = $aData[$i+$j]
    Next
    Next
    Return $aTMP
    EndFunc

    [/autoit]
  • Vielen Dank. Du bist der Beste :thumbup:
    Sieht sehr gut aus. Werd mich da jetzt reinarbeiten damit ich weiß wie du das gemacht hast. Habe noch nie mit Arrays gearbeitet, weshalb es mir ziemliche Schwierigkeiten bereitet.