rekursiv links verfolgen

  • Hallo,

    ich habe eine Adresse, in den ich allen Links folge und dann alle dateien rekursiv herunterladen möchte.


    ich hatte erst einfach an wget gedacht, aber der verweigert blöderweise bei diesen Ordnern den Dienst.

    Hat jemand eine Idee wie das einfach und schnell zu lösen wäre...
    bin nicht besonders weit und habe gerade eine denk blockade:

    [autoit]

    #include <IE.au3>
    $link = "http://www.etsi.org/deliver/"
    $target = "T:\etsi"
    dim $array[1]

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

    $oIE = _IECreate ($link, 0, 1, 1)
    $oLinks = _IELinkGetCollection ($oIE)
    $iNumLinks = @extended
    MsgBox(0, "Link Info", $iNumLinks & " links found")
    For $oLink In $oLinks
    ConsoleWrite($oLink.href & @CRLF)
    Next

    [/autoit]

    Kann mir jemand einen tipp geben ?

    Danke

    Franz

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

    2 Mal editiert, zuletzt von franzp (29. Juni 2010 um 10:55)

  • Hab da mal was gebastelt - hoffe, dass das funktioniert.
    Scheint aber tatsächlich alle Ordner & Dateien durchzugehen.
    Sind 'ne ganze Menge oO

    Spoiler anzeigen
    [autoit]


    #include <IE.au3>
    $link = "http://www.etsi.org/deliver/"
    $target = "T:\etsi"

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

    _linkRec( $link )

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

    Func _linkRec( $link, $parent = Default, $oIE = Default )
    If $parent = Default Then $parent = StringLeft( $link, StringInStr( $link, '/', 0, -2 ) )

    If $oIE = Default Then
    $oIE = _IECreate( $link, 0, 1, 1 )
    Else
    _IENavigate( $oIE, $link )
    EndIf

    $oLinks = _IELinkGetCollection( $oIE )
    Local $array[@extended]
    Local $i = 0
    For $oLink In $oLinks
    $array[$i] = $oLink.href
    $i += 1
    Next

    For $sLink In $array
    If $sLink = $link Then ContinueLoop
    If $sLink = $parent Then ContinueLoop

    If StringRight( $sLink, 1 ) = '/' Then
    _linkRec( $sLink, $link, $oIE )
    _IENavigate( $oIE, $link )
    Else
    ConsoleWrite( '+> To download: ' & $sLink & @CRLF )
    EndIf
    Next
    EndFunc

    [/autoit]

    Musst halt nur noch den Download mit einfügen - ob direkt oder erst nach der Auflistung bleibt dir überlassen.. ;)

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

    • Offizieller Beitrag

    Hier mal eine Version ohne die IE-UDF:

    Spoiler anzeigen
    [autoit]


    $sURL = 'http://www.etsi.org/deliver/'
    $sTarget = @ScriptDir & '\tmp\' ; <- anpassen!

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

    If Not FileExists($sTarget) Then DirCreate($sTarget)
    $sServer = StringRegExpReplace($sURL, '(http:\/\/.+?)\/.+', '$1')
    _RekDownload($sURL)

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

    Func _RekDownload($sURL)
    Local $aFiles, $sFilename
    $aFiles = StringRegExp(BinaryToString(InetRead($sURL)), '(?i)<a href="(.+?)"', 3)
    If Not IsArray($aFiles) Then Return

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

    For $i = 1 To UBound($aFiles) - 1
    If StringRight($aFiles[$i], 1) = '/' Then
    _RekDownload($sServer & $aFiles[$i])
    Else
    $sFilename = StringRegExpReplace($aFiles[$i], '.+\/(.+)', '$1')
    ToolTip('Download "' & $sServer & $aFiles[$i] & '"' & @CR & 'Please wait...')
    InetGet($sServer & $aFiles[$i], $sTarget & $sFilename)
    EndIf
    Next
    EndFunc

    [/autoit]
  • Super vielen Dank !
    :D

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---