Leí un artículo sobre la descarga de imágenes de páginas web. Solo puede descargar imágenes con encabezado http. Hice algunas mejoras. Puede descargar todos los recursos de conexión en la página web y crear un directorio local de acuerdo con la estructura del directorio en la página web. para almacenar los recursos.
El código download.asp de
la página web que desea descargar
es el siguiente<%
Servidor.ScriptTimeout=9999
función GuardarEnArchivo(desde,alarchivo)
en caso de error reanudar siguiente
geturl tenue,objStream,imgs
geturl=recortar(de)
Mybyval=getHTTPstr(geturl)
Establecer objStream = Server.CreateObject("ADODB.Stream")
objStream.Tipo =1
objStream.Open
objstream.escribir Mybyval
objstream.SaveToFile afile,2
objstream.Cerrar()
establecer objstream = nada
si número de error <> 0 entonces err.Borrar
función final
función geturlencodel (byval url) 'conversión de nombre de archivo chino
I tenue, código
geturlencodel=""
si trim(Url)="" entonces salga de la función
para i=1 a len(URL)
código=Asc(mid(Url,i,1))
si código<0 Entonces código = código + 65536
Si código>255 Entonces
geturlencodel=geturlencodel&"%"&Izquierda(Hex(Código),2)&"%"&Derecha(Hex(Código),2)
demás
geturlencodel=geturlencodel&mid(Url,i,1)
terminar si
próximo
función final
función getHTTPage(url)
en caso de error reanudar siguiente
http oscuro
establecer http=Server.createobject("Msxml2.XMLHTTP")
Http.open "OBTENER", URL, falso
http.enviar()
si Http.readystate<>4 entonces salga de la función
getHTTPPage=bytes2BSTR(Http.responseBody)
establecer http=nada
si número de error <> 0 entonces err.Borrar
función final
Función bytes2BSTR(vIn)
dim strReturn
tenue i, este código de carácter, siguiente código de carácter
strRetorno = ""
Para i = 1 a LenB(vIn)
ThisCharCode = AscB(MidB(vIn,i,1))
Si ThisCharCode < & H80 Entonces
strReturn = strReturn & Chr(ThisCharCode)
Demás
NextCharCode = AscB(MidB(vIn,i+1,1))
strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
yo = yo + 1
Terminar si
Próximo
bytes2BSTR = strReturn
Función final
función getFileName (nombre de archivo byval)
si instr(nombre de archivo,"/")>0 entonces
fileExt_a=split(nombre de archivo,"/")
getFileName=lcase(archivoExt_a(ubound(archivoExt_a)))
si instr(getFileName,"?")>0 entonces
getFileName=left(getFileName,instr(getFileName,"?")-1)
terminar si
demás
getFileName=nombre de archivo
terminar si
función final
función getHTTPstr(url)
en caso de error reanudar siguiente
http oscuro
establecer http=servidor.createobject("MSXML2.XMLHTTP")
Http.open "OBTENER", URL, falso
http.enviar()
si Http.readystate<>4 entonces salga de la función
getHTTPstr=Http.responseBody
establecer http=nada
si número de error <> 0 entonces err.Borrar
función final
Función CreateDIR(ByVal LocalPath) 'Programa para crear un directorio. Si hay varios niveles de directorios, créelos uno por uno.
En caso de error Continuar siguiente
RutaLocal = Reemplazar(RutaLocal, "", "/")
Establecer FileObject = server.CreateObject ("Scripting.FileSystemObject")
rutarr = Dividir(RutaLocal, "/")
nivel_ruta = UBound(rutarr)
Para I = 0 Para path_level
Si I = 0 Entonces pathtmp = patharr(0) & "/" De lo contrario, pathtmp = pathtmp & patharr(I) & "/"
rutac = Izquierda(rutatmp, Len(rutatmp) - 1)
Si no es FileObject.FolderExists (cpath), entonces FileObject.CreateFolder cpath
Siguiente
Establecer FileObject = Nada
Si Número de error <> 0 Entonces
CrearDIR = Falso
Err.Borrar
Demás
CrearDIR = Verdadero
Terminar si
Función final
función GetfileExt (nombre de archivo byval)
fileExt_a=split(nombre de archivo,".")
GetfileExt=lcase(archivoExt_a(ubound(archivoExt_a)))
función final
función getvirtual(cadena,ruta,encabezado de URL)
si left(str,7)="http://" entonces
url=cadena
elseif left(str,1)="/" entonces
inicio=instrRev(cadena,"/")
si inicio = 1 entonces
URL="/"
demás
url=izquierda(cadena,inicio)
terminar si
URL = encabezado de URL y URL
elseif left(str,3)="../" entonces
str1=mid(cadena,inStrRev(cadena,"../")+2)
ar=dividir(cadena,"../")
lv=ubound(ar)+1
ar=dividir(ruta,"/")
URL="/"
para i=1 a (ubound(ar)-lv)
url=url&ar(i)
próximo
url=url&cadena
URL = encabezado de URL y URL
demás
url=encabezado de URL&cadena
terminar si
obtenervirtual=url
función final
'Código de ejemplo
tenue dlpath
virtual="/downweb/"
truepath=server.MapPath(virtual)
si solicitud("url")<> "" entonces
URL=solicitud("URL")
fn=obtenerNombreArchivo(url)
urlhead=izquierda(url,(instr(reemplazar(url,"//",""),"/")+1))
urlpath=reemplazar(left(url,instrRev(url,"/")),urlhead,"")
strContenido = getHTTPPage(url)
mystr=strContenido
Establecer objRegExp = Nueva expresión regular
objRegExp.IgnoreCase = Verdadero
objRegExp.Global = Verdadero
objRegExp.Pattern = "(src|href)=.[^>]+? "
Establecer coincidencias =objRegExp.Execute(strContent)
Para cada partido en partidos
str=Coincidencia.Valor
cadena=reemplazar(cadena,"src="",")
cadena=reemplazar(cadena,"href=","")
cadena=reemplazar(cadena",""","")
cadena=reemplazar(cadena,"'","")
nombre de archivo = Obtener nombre de archivo (cadena)
getRet=getVirtual(cadena,rutaurl,cabezaurl)
temp=Reemplazar(getRet,"//","**")
inicio=instr(temp,"/")
endt=instrRev(temp,"/")-inicio+1
si inicio>0 entonces
repl=virtual&mid(temp,inicio)&" "
'respuesta.Escribir respuesta&"<br>"
mystr=Reemplazar(mystr,str,repl)
dir=mid(temp,start,endt)
temp=truepath&Reemplazar(dir,"/","")
CrearDir(temp)
'respuesta.Escribir getRet&"||"&temp&filename&"<br><br>"
SaveToFile getRet,temp y nombre de archivo
terminar si
Próximo
establecer coincidencias = nada
terminar si
%>