Website Scannen klappt "fast"

  • Hallo,

    ich habe mir ein Script geschrieben, welches eine Website Scannt und die von mir benötigten Informationen aus dem Quelltext liest.

    Mit _Stringbetween finde ich die Informationen. Allerdings gibt es eine Information, die mal Text und mal Bild ist. Mal sieht die Information so aus:

    Code
    <span id="id_12345"><font size="2"> gesuchte Information </font></span>


    und mal so:

    Code
    <span id="id_23456"><img src="bild.gif" alt="text" /></span>

    da die span id natürlich immer eine andere ist, fällt es mir schwer hier einen zuverlässige lösung zu finden.
    Wie kann ich das Problem lösen? Kann man da was mit FFXpath machen?

    Danke
    Gruß Daniel

    Einmal editiert, zuletzt von danielsan85 (2. August 2010 um 21:57)

  • wenn du die ID haben willstgeht das:

    [autoit]

    $sString = '<span id="id_23456"><img src="bild.gif" alt="text" /></span>'

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

    $aRet = StringRegExp($sString,'<span id="id_(\d+)">.+</span>',3)

    [/autoit]

    EDIT: nicht richtig gelsen :-8

    Das dürfte wohl dann ein Lösungsansatz sein:

    [autoit]

    $sString = '<span id="id_12345"><font size="2"> gesuchte Information </font></span>'

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

    $aRet = StringRegExp($sString,'<span id="id_\d+">[^>]>(.+)[^>]',3)

    [/autoit]

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • So in etwar?

    [autoit]

    Global $aRnd[2] = ['<span id="id_12345"><font size="2"> gesuchte Information </font></span>','<span id="id_23456"><img src="bild.gif" alt="text" /></span>']

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

    $sString = $aRnd[Random(0,1,1)]

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

    If StringInStr($sString,'<font size="2">') Then
    $aReg = StringRegExp($sString,'<span id="(.+)"><font size=".+">(.+)</font></span>',3)
    _Ausgeben($aReg)
    Else
    $aReg = StringRegExp($sString,'<span id="(.+)"><img src="(.+)"\salt=".+"\s/></span>',3)
    _Ausgeben($aReg)
    EndIf

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

    Func _Ausgeben($aReg)
    For $i = 0 To UBound($aReg) -1 Step +2
    MsgBox(64,'Ergebnis','Span ID:' & @TAB & @TAB & 'Information:' & @CR & _
    $aReg[$i] & @TAB & @TAB & $aReg[$i+1])
    Next
    EndFunc

    [/autoit]

    Und mal wieder so langsam, dass mich 2 andere Nutzer überholen X( Egal ;)

    Einmal editiert, zuletzt von Understood (2. August 2010 um 16:16)

  • Einen Link kann ich euch nicht geben, weil der euch nichts nützt. Man muss sich dort einloggen! Und ihr habt dort kein Konto und bekommt dort auch keins.

    Mir ist aber gerade noch eine Idee gekommen. Dafür würde ich ein etwas größeres Stück des Quellcodes mit _Stringbetween "rausnehmen" und seperat untersuchen. Gibt es eine Funktion, die direkt nach dem String "bild.gif" suchen kann?

    Dann könnte ich das ungefähr so lösen:

    Code
    If bild.gif NICHT vorhanden then
    $info = _stringbetween('<font size="2"> ',' </font>')
    endif

    Könnte das klappen? Ich benötige die Information nur wenn kein Bild vorhanden ist bzw. wenn ein Bild vorhanden ist, ist die Information = Bild vorhanden ;)

    Danke
    Gruß Daniel

  • Nimm doch das Beispiel von mir, dort wird doch abgefragt ob Bild nicht existiert (im Else-Block), willst Du es aber genauer haben:

    [autoit]

    Global $aRnd[2] = ['<span id="id_12345"><font size="2">200</font></span>','<span id="id_23456"><img src="bild.gif" alt="text" /></span>']

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

    While 1
    $sString = $aRnd[Random(0,1,1)]

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

    If _StringRegInStr($sString,'<span id=".+"><font size="2">') = 1 Then
    $aReg = StringRegExp($sString,'<span id="(.+)"><font size=".+">(.+)</font></span>',3)
    _Ausgeben($aReg)
    Else
    $aReg = StringRegExp($sString,'<span id="(.+)"><img src="(.+)"\salt=".+"\s/></span>',3)
    _Ausgeben($aReg)
    EndIf
    WEnd

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

    Func _Ausgeben($aReg)
    For $i = 0 To UBound($aReg) -1 Step +2
    MsgBox(64,'Ergebnis','Span ID:' & @TAB & @TAB & 'Information:' & @CR & _
    $aReg[$i] & @TAB & @TAB & $aReg[$i+1])
    Next
    EndFunc

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

    Func _StringRegInStr($sString,$sPattern)
    If $sString = '' Then Return -1
    Local $aReg = StringRegExp($sString,$sPattern,3)
    If IsArray($aReg) Then Return 1
    Return -2
    EndFunc

    [/autoit]
  • er kann doch einfach mit strininstr abfragen ob der string "bild.gif" in seinem test vorkommt oder

  • Ja, ich habe Ihn ein Beispiel anhand eines anderem Quellcodes gezeigt. Er kann Ihn jetzt einfach nach Seinem Belieben abändern ;)

  • Habe mir gerade mal "stringingstr" angesehen. Damit müsste es gehen. ich werde das gleich mal testen.

    Das "(.+)" ist der gesuchte String oder?

    Danke für die schnellen Antworten. Ich melde mich ob es geklappt hat!

    Gruß
    Daniel

  • ne ich glaub du wolltest

    if Stringinstr($String,"bild.gif") = 1 Then
    ...
    Else
    Msgbox(0,"Error","String wurde nicht gefunden")
    Endif

  • Da hab ich mich unklar ausgedrückt sry ich meinte in dem Obigen Beispiel.
    Da steht doch das "(.+)" für den String den ich suche!?

    Aber genauso wie du das geschrieben hast Alex hab ich mir das vorgestellt. Der Code ist schön kurz und übersichtlich!

    Danke

  • kein problem freut mich wenn ich dir geholfen habe

    wenn damit das problem gelöst ist pitte das präfix auf gelöst setzen

  • So ich habe gerade weiter gemacht.

    Da Stringinstr die Position des gefundenen Strings ausgibt, hat es erst nicht funktioniert. Ich war davon ausgegangen, das er mir nur mitteilt das er einen String gefunden hat.

    Aber das ist ja mit...
    If Stringinstr(....................) > 0 then statt If Stringinstr(....................) = 1 then
    ...kein Problem.

    Jetzt funktioniert es so wie es soll.
    Hier noch mein Code: (für die nachwelt)

    [autoit]

    If StringInStr($var[$j],'<font size="2">') > 0 Then
    $nvar = _StringBetween($quelltext,'<font size="2"> ', '&nbsp;')
    FileWriteLine($file, $nvar[$j])
    Else
    FileWriteLine($file, "Bild gefunden")
    EndIf

    [/autoit]

    Der Code ist leider etwas aus dem Zusammenhang gerissen. Aber ich denke das Prinzip ist klar.

    Danke für die Hilfe!!!
    Gruß Daniel