Text aus einer Website auslesen

  • Hallo Com,

    ich möchte über eine Suchfunktion bestimmte Wörter von einer Website (z.B. Google) auslesen.
    Sozusagen, ich trage in der Inputbox irgendein Wort ein, und das Programm gibt mir aus ob das Wort existiert oder nicht.

    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 623, 442, 193, 126)
    $Button1 = GUICtrlCreateButton("Suchen", 208, 168, 145, 25)
    $Input1 = GUICtrlCreateInput("Input1", 144, 120, 265, 21)
    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]

    Ich habe ein Script gefunden, was genau das tun!
    Aber leider ohne Gui ist, und keine Suchfunktion über eine Inputbox hat.
    Zudem gibt mir das Script die Suchergebnisse in Zahlen aus.

    Mein Problem ist jetzt das ich vor einer Wand stehe, und nicht weiß wie ich beide Codes funktionierend miteinander verbinden kann.

    [autoit]

    #include <IE.au3>

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

    $url = "http://www.google.de"
    $wort = "Suche"
    $Anzahl = 0

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

    $IE = _IECreate($url, "", 0)
    $text = _IEBodyReadText($IE)
    For $i = 1 to StringLen($text)
    If StringMid($text, $i, StringLen($wort)) = $wort Then $Anzahl += 1
    Next

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

    MsgBox(0, "", $Anzahl)

    [/autoit]

    LG Norie

    Einmal editiert, zuletzt von Norie (11. März 2013 um 22:05)

  • So?

    Spoiler anzeigen
    [autoit]

    #include <IE.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    #Region ### START Koda GUI section ###
    $Form1 = GUICreate("Form1", 623, 442, 193, 126)
    $Button1 = GUICtrlCreateButton("Suchen", 208, 168, 145, 25)
    $Input1 = GUICtrlCreateInput("Input1", 144, 120, 265, 21)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $Anzahl = _Suche(GUICtrlRead($Input1))
    MsgBox(0, "Ergebnis", $Anzahl)
    EndSwitch
    WEnd

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

    Func _Suche($wort, $url = "http://www.google.de")
    $Anzahl = 0
    $IE = _IECreate($url, "", 0)
    $text = _IEBodyReadText($IE)
    For $i = 1 to StringLen($text)
    If StringMid($text, $i, StringLen($wort)) = $wort Then $Anzahl += 1
    Next
    Return $Anzahl
    EndFunc

    [/autoit]

    "Je mehr Käse, desto mehr Löcher; je mehr Löcher, desto weniger Käse. Ergo: Je mehr Käse, desto weniger Käse. 8| "
    "Programmers never die: they just GOSUB without RETURN"
    "I tried to change the world but I couldn't find the source code."

  • Diese Suche erscheint mir... Ineffizient.

    Den ganzen Quellcode mit einer For durchgehen, ist ja schon... brutal. :D

    Ich würde eher so eine Funktion verwenden:

    [autoit]


    Func _String_StrCount($sMain, $sSub)
    ;chesstiger
    $aTempSplit = StringSplit($sMain, $sSub, 1)
    Return $aTempSplit[0] - 1
    EndFunc

    [/autoit]

    Aber es geht auch noch effektiver...
    Mir fällt gerade nur nicht ein, wie das ging. :S

    lg chess

  • Cool danke Developer30 :)

    Kann man das auch so machen, dass das Programm ein Text ausgibt wenn ein Wort gefunden ist z.B. 'gefunden' oder 'nicht gefunden'
    Bis Jetzt zeigt das Programm nur nur Nullen an, auch wenn das Wort vorhanden ist... komisch ;(

    LG Norie

  • Ich würde das eher so lösen...

    Spoiler anzeigen
    [autoit]


    #include <IE.au3>

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

    Global $sURL = "http://www.google.de"

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

    $hGUI = GUICreate("Seitensuche", 200, 75)
    $cSearch = GUICtrlCreateButton("Suchen", 20, 40, 160, 25)
    $cInput = GUICtrlCreateInput("", 10, 10, 180, 20)
    GUISetState()

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

    While True
    $iMsg = GUIGetMsg()
    Switch $iMsg
    Case -3 ;EVENT_CLOSE
    Exit
    Case $cSearch
    _GetCount()
    EndSwitch
    WEnd

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

    Func _GetCount()
    $oIE = _IECreate($sURL, "", 0)
    $sText = _IEBodyReadText($oIE)
    _IEQuit($oIE) ;Objekt wieder freigeben / IE schließen
    $iVorkommen = _StringInStr_Count($sText, GUICtrlRead($cInput))

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

    If $iVorkommen = 0 Then ;Kein mal vorhanden
    MsgBox(0, "Info", "Der Text ist kein einziges Mal im Quellcode vorhanden...")
    Return
    EndIf

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

    MsgBox(0, "Info", "Der Text wurde " & $iVorkommen & " Mal gefunden!")
    EndFunc

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

    Func _StringInStr_Count($sMain, $sSub)
    ;chesstiger
    $aTempSplit = StringSplit($sMain, $sSub, 1)
    Return $aTempSplit[0] - 1
    EndFunc

    [/autoit]

    Wenn es um einfache Website's geht, auch eher InetRead anstatt IE...

    chess

  • ja so:

    Spoiler anzeigen
    [autoit]

    #include <IE.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    #Region ### START Koda GUI section ###
    $Form1 = GUICreate("Form1", 623, 442, 193, 126)
    $Button1 = GUICtrlCreateButton("Suchen", 208, 168, 145, 25)
    $Input1 = GUICtrlCreateInput("Input1", 144, 120, 265, 21)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $sSuchwort=GUICtrlRead($Input1)
    if _Suche($sSuchwort) Then
    MsgBox(0, $sSuchwort, 'ist enthalten')
    Else
    MsgBox(0, $sSuchwort, 'ist nicht enthalten')
    EndIf
    EndSwitch
    WEnd

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

    Func _Suche($wort, $url = "http://www.google.de")
    $IE = _IECreate($url, "", 0)
    $text = _IEBodyReadText($IE)
    If StringInStr($text,$wort) Then Return 1
    EndFunc

    [/autoit]

    mfg autoBert

  • chesstiger

    Jup, es ist eine einfache Website, eher gesagt eine Wörterliste.
    Mir gehts halt darum ob ein bestimmtes Wort bzw. eine Url- Adresse in der Liste schon vorhanden ist, oder ob ich sie noch eintragen muss.

    Gibt es noch eine Möglichkeit in der Inputbox nur Url- Adressen für die Suche zuzulassen, Sprich nur Seiten die mit "http" oder "www" anfangen.

    LG Norie

  • So?

    Spoiler anzeigen
    [autoit]

    Global $sURL = "http://www.google.de"

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

    $hGUI = GUICreate("Seitensuche", 200, 125)
    $cSearch = GUICtrlCreateButton("Suchen", 20, 70, 160, 25)
    $cInput = GUICtrlCreateInput("", 10, 10, 180, 20)
    $cURL = GUICtrlCreateInput("www.example.com", 10, 40, 180, 20)
    GUISetState()

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

    While True
    $iMsg = GUIGetMsg()
    Switch $iMsg
    Case -3 ;EVENT_CLOSE
    Exit
    Case $cSearch
    If _VerifyURL(GUICtrlRead($cURL)) Then
    _GetCount()
    Else
    MsgBox(16, "Info", "Ungültige URL!")
    EndIf
    EndSwitch
    WEnd

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

    Func _GetCount()
    $sText = BinaryToString(InetRead(GUICtrlRead($cURL)))
    $iVorkommen = _StringInStr_Count($sText, GUICtrlRead($cInput))

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

    If $iVorkommen = 0 Then ;Kein mal vorhanden
    MsgBox(0, "Info", "Der Text ist kein einziges Mal im Quellcode vorhanden...")
    Return
    EndIf

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

    MsgBox(0, "Info", "Der Text wurde " & $iVorkommen & " Mal gefunden!")
    EndFunc

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

    Func _StringInStr_Count($sMain, $sSub)
    ;chesstiger
    $aTempSplit = StringSplit($sMain, $sSub, 1)
    If $aTempSplit[0] = 0 Then Return 0 ;Bei normalem Vorgehen wird sonst "-1" zurück gegeben...
    Return $aTempSplit[0] - 1
    EndFunc

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

    Func _VerifyURL($sURL)
    Local $aAcceptPrefix[2] = ["http://", "www."]
    For $i = 0 To UBound($aAcceptPrefix) - 1
    If StringLeft($sURL, StringLen($aAcceptPrefix[$i])) = $aAcceptPrefix[$i] Then Return True
    Next
    Return False
    EndFunc

    [/autoit]

    lg chess

  • Was ich aber eigentlich meinte: Ich meine, irgend eine String-Funktion setzt das Vorkommen eines Strings als extended o.Ä....

    Zitat

    StringReplace

    Ersetzt ein oder mehrere Zeichen in einem String.
    ...
    Rückgabewert

    Gibt den neuen String zurück. Die Anzahl der durchgeführten Ersetzungen wird in @extended gespeichert.

  • chesstiger

    Danke, das Script sieht echt toll aus :)

    Aber ein paar funktionen sind unnötig, zum einen der Seiten Counten... es geht eigentlich nur darum ob die Seite schon vorhanden ist oder nicht, wie oft spielt keine Rolle. Zum anderen die zweite Inputbox die dazu gekommen ist, die Liste die nach den Url- Adressen abgesucht wird existiert nur einmal, somit ist die Auswahl auf anderen Seiten nicht von nöten.

    LG Norie

  • Naja, konnte ich ja nicht wissen...

    Aber das kannst du dir ja leicht umschreiben.^^

    lg chess


    Ja, wenn ich es könnte würde ich es machen ;(
    Leider fehlt mir die Erfahrung bzw. die praxis.
    Bin erst seid zwei Tagen dabei und seh noch nicht wirklich durch.
    Könntest du dich erbarmen... und für mich das Script fertig machen, kriegst auch ein dreifaches HOLLADIHO :D

    LG Norie

  • Natürlich.^^

    Spoiler anzeigen
    [autoit]


    $sURL = "" ;<-- Trage hier die URL von deiner Liste ein!

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

    $hGUI = GUICreate("Seitensuche", 200, 75)
    $cSearch = GUICtrlCreateButton("Suchen", 20, 40, 160, 25)
    $cInput = GUICtrlCreateInput("Suchbegriff (URL)", 10, 10, 180, 20)

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

    GUISetState()

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

    While True
    $iMsg = GUIGetMsg()
    Switch $iMsg
    Case -3 ;EVENT_CLOSE
    Exit
    Case $cSearch
    If _VerifyURL(GUICtrlRead($cInput)) Then
    _IsIn(GUICtrlRead($cInput))
    Else
    MsgBox(16, "Info", "Ungültige URL!")
    EndIf
    EndSwitch
    WEnd

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

    Func _IsIn($sSub)
    $sText = BinaryToString(InetRead($sURL))
    If StringInStr($sText, $sSub) Then
    MsgBox(0, "Info", "Der Suchbegriff ist auf der Website vorhanden.")
    Else
    MsgBox(0, "Info", "Der Suchbegriff wurde auf der Website nicht gefunden.")
    EndIf
    EndFunc

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

    Func _VerifyURL($sURL)
    Local $aAcceptPrefix[2] = ["http://", "www."]
    For $i = 0 To UBound($aAcceptPrefix) - 1
    If StringLeft($sURL, StringLen($aAcceptPrefix[$i])) = $aAcceptPrefix[$i] Then Return True
    Next
    Return False
    EndFunc

    [/autoit]

    War das so gemeint? ^^
    Oder habe ich dich wieder falsch verstanden? :D

    lg chess


  • Jup, genauso wollte ich es haben, DANKE VIELMALS :thumbup:

    Du hast mir den Tag gerettet, ein dreifaches HOLLADIHO :D:D:D

    LG Norie