Como contesté en otro post hace tiempo te lo pongo aquí. Se trata de dos códigos que hice hace tiempo para buscar de forma recursiva archivos en cualquier ubicación. Participamos muchos, entre ellos uno de los que más, Ximorro. Como dije, lástima que se perdiera ese post. He intentado recuperarlo reviviendolo pero al final no he hecho nada.
Aquí otro programa que hice para buscar textos varios ficheros de una ubicación y utilizo estas técnicas:
Te cuelgo el código de un script hecho por Rogue5099 donde muestra su función de búsqueda de archivos por recursión.
Código: Seleccionar todo
#include <File.au3>
#include <GUIConstants.au3>
#include <Array.au3>
Global $temppath = @ScriptDir
GUICreate("Inventory", 320, 265, -1, @DesktopHeight/10)
GUICtrlCreateLabel("Inventory v1.03 - Created by Rogue5099", 42, 5, 375, 20)
$Button_1 = GUICtrlCreateButton("Take Invenotry", 200, 34, 100, 50)
$Checkbox_1 = GUICtrlCreateCheckbox("Include Subfolders", 10, 30)
$Checkbox_2 = GUICtrlCreateCheckbox("Include Full File Path", 10, 55)
GUICtrlCreateLabel("File type to search for. i.e. .jpg,.mp3 (Seperate /w Comma):", 8, 97, 325, 20)
Global $Input3 = GUICtrlCreateInput("*.*", 25, 117, 240, 20)
GUICtrlCreateLabel("Save Inventory File to:", 8, 147, 125, 20)
Global $Input1 = GUICtrlCreateInput(@ScriptDir, 25, 167, 240, 20)
$Browse_1 = GUICtrlCreateButton("...", 270, 167, 30, 20)
GUICtrlCreateLabel("Scan directory for file(s):", 8, 197, 125, 20)
Global $Input2 = GUICtrlCreateInput(@ScriptDir, 25, 217, 240, 20)
$Browse_2 = GUICtrlCreateButton("...", 270, 217, 30, 20)
GUICtrlCreateLabel("Progress:", 90, 240, 65, 20)
GUICtrlSetFont (-1, 10, 600)
Global $Label_1 = GUICtrlCreateLabel("Waiting", 165, 240, 95, 20)
GUICtrlSetFont (-1, 10, 600)
GUISetState (@SW_SHOW)
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $Button_1
GUICtrlSetData($Label_1, "Scanning...")
GUICtrlSetFont (-1, 10, 600)
GUICtrlSetColor(-1, 16711680)
$ext = StringSplit(GUICtrlRead($Input3), ",")
$Amount = StringTrimRight(_ArrayToString($ext), StringLen(_ArrayToString($ext) - 2))
$Text = GUICtrlRead($Input1) & "\Inventory.txt"
If FileExists($Text) Then FileDelete($Text)
For $x = 1 To $Amount
;~ MsgBox(0, "Check", $ext[$x])
If BitAND(GUICtrlRead($Checkbox_1), $GUI_CHECKED) = $GUI_CHECKED And BitAND(GUICtrlRead($Checkbox_2), $GUI_CHECKED) = $GUI_CHECKED Then
$Inventory = _FileListToArray_Recursive(GUICtrlRead($Input2), $ext[$x], 1, 2, True)
If @Error = 4 Then MsgBox (48,"Error","No "&$ext&" Files Found.", 5)
ElseIf BitAND(GUICtrlRead($Checkbox_1), $GUI_CHECKED) = $GUI_CHECKED And BitAND(GUICtrlRead($Checkbox_2), $GUI_UNCHECKED) = $GUI_UNCHECKED Then
$Inventory = _FileListToArray_Recursive(GUICtrlRead($Input2), $ext[$x], 1, 0, True)
If @Error=4 Then MsgBox (48,"Error","No "&$ext&" Files Found.", 5)
ElseIf BitAND(GUICtrlRead($Checkbox_1), $GUI_UNCHECKED) = $GUI_UNCHECKED And BitAND(GUICtrlRead($Checkbox_2), $GUI_CHECKED) = $GUI_CHECKED Then
$Inventory = _FileListToArray_Recursive(GUICtrlRead($Input2), $ext[$x], 1, 2, False)
If @Error=4 Then MsgBox (48,"Error","No "&$ext&" Files Found.", 5)
Else
$Inventory = _FileListToArray_Recursive(GUICtrlRead($Input2), $ext[$x], 1, 0, False)
If @Error=4 Then MsgBox (48,"Error","No "&$ext&" Files Found.", 5)
EndIf
$aText = FileOpen($Text, 1)
_FileWriteFromArray($aText, $Inventory, 1)
FileClose($aText)
Next
GUICtrlSetData($Label_1, "Done")
GUICtrlSetFont (-1, 10, 600)
GUICtrlSetColor(-1, 32768)
Sleep(2000)
$CountLines = (_FileCountLines($Text))
If $CountLines > 0 Then
MsgBox(1, "Info", "Number of file(s) in folder(s): " & $Countlines & @CRLF & "List saved at: " & $Text, 8)
Run("notepad.exe " & $Text)
EndIf
Case $msg = $Browse_1
$temppath = FileSelectFolder("Save File Where", "", 1, @ScriptDir)
GUICtrlSetData($Input1, $temppath)
Case $msg = $Browse_2
$temppath = FileSelectFolder("Choose a folder to search.", "", 1, @ScriptDir)
GUICtrlSetData($Input2, $temppath)
EndSelect
Wend
Func _FileListToArray_Recursive($sPath, $sFilter = "*", $iRetItemType = 0, $iRetPathType = 0, $bRecursive = False)
Local $sRet = "", $sRetPath = ""
$sPath = StringRegExpReplace($sPath, "[\\/]+\z", "")
If Not FileExists($sPath) Then Return SetError(1, 1, "")
If StringRegExp($sFilter, "[\\/ :> <\|]|(?s)\A\s*\z") Then Return SetError(2, 2, "")
$sPath &= "\|"
$sOrigPathLen = StringLen($sPath) - 1
While $sPath
$sCurrPathLen = StringInStr($sPath, "|") - 1
$sCurrPath = StringLeft($sPath, $sCurrPathLen)
$Search = FileFindFirstFile($sCurrPath & $sFilter)
If @error Then
$sPath = StringTrimLeft($sPath, $sCurrPathLen + 1)
ContinueLoop
EndIf
Switch $iRetPathType
Case 1 ; relative path
$sRetPath = StringTrimLeft($sCurrPath, $sOrigPathLen)
Case 2 ; full path
$sRetPath = $sCurrPath
EndSwitch
While 1
$File = FileFindNextFile($Search)
If @error Then ExitLoop
If ($iRetItemType + @extended = 2) Then ContinueLoop
$sRet &= $sRetPath & $File & "|"
WEnd
FileClose($Search)
If $bRecursive Then
$hSearch = FileFindFirstFile($sCurrPath & "*")
While 1
$File = FileFindNextFile($hSearch)
If @error Then ExitLoop
If @extended Then $sPath &= $sCurrPath & $File & "\|"
WEnd
FileClose($hSearch)
EndIf
$sPath = StringTrimLeft($sPath, $sCurrPathLen + 1)
WEnd
If Not $sRet Then Return SetError(4, 4, "")
Return StringSplit(StringTrimRight($sRet, 1), "|")
EndFunc ;==> Melba23's _FileListToArray_Recursive
Solo tienes que adaptarlo para las búsquedas en páginas web y ya está.
Saludos.