Foros del Web » Programando para Internet » ASP Clásico »

Error en SPIDER

Estas en el tema de Error en SPIDER en el foro de ASP Clásico en Foros del Web. Hey MAESTROS prueben este pequeño SPIDER. Funciona de la siguiente manera: al colocar una url en el Formulario, este script visita la página y extrae ...
  #1 (permalink)  
Antiguo 05/02/2003, 16:38
 
Fecha de Ingreso: diciembre-2002
Mensajes: 100
Antigüedad: 22 años, 4 meses
Puntos: 1
Error en SPIDER

Hey MAESTROS prueben este pequeño SPIDER.

Funciona de la siguiente manera:

al colocar una url en el Formulario, este script visita la página y extrae información de ella, luego le da salida.

me da un error cuando la URL no existe......

Como corregirian este error???.....

Espero que puedan entender esto


Consta de dos scrip ASP.

Primero:

<<<<<<<<<<<"spider.asp">>>>>>>>>>>>>>>>
<%
dim HTTP, url
url=Request.Form("url")
'url="http://www.sgi.com/homepage.html"
set HTTP=Server.CreateObject("Microsoft.XMLHTTP")
HTTP.open "GET", url , False
HTTP.Send
stu=HTTP.statusText
if HTTP.statusText="OK" then
strFileContents = HTTP.ResponseText
else
Response.write "Error obteniendo Página " & HTTP.statustext
end if
set HTTP = nothing


%>
<%
Dim key1, key2, errorkey, errordes

strFileContents = replace(strFileContents, "<meta name=keywords", "<meta name=""keywords""")
strFileContents = replace(strFileContents, "<meta NAME=keywords", "<meta name=""keywords""")
strFileContents = replace(strFileContents, "<META NAME=keywords", "<meta name=""keywords""")
strFileContents = replace(strFileContents, "<META NAME=KEYWORDS", "<meta name=""keywords""")
strFileContents = replace(strFileContents, "<META name=keywords", "<meta name=""keywords""")
strFileContents = replace(strFileContents, "<META name=KEYWORDS", "<meta name=""keywords""")
strFileContents = replace(strFileContents, "<meta NAME=KEYWORDS", "<meta name=""keywords""")

strFileContents = replace(strFileContents, "<meta name='keywords'", "<meta name=""keywords""")
strFileContents = replace(strFileContents, "<meta NAME='keywords'", "<meta name=""keywords""")
strFileContents = replace(strFileContents, "<META NAME='keywords'", "<meta name=""keywords""")
strFileContents = replace(strFileContents, "<META NAME='KEYWORDS'", "<meta name=""keywords""")
strFileContents = replace(strFileContents, "<META name='keywords'", "<meta name=""keywords""")
strFileContents = replace(strFileContents, "<META name='KEYWORDS'", "<meta name=""keywords""")
strFileContents = replace(strFileContents, "<meta NAME='KEYWORDS'", "<meta name=""keywords""")

strFileContents = replace(strFileContents, "<meta name=""keywords""", "<meta name=""keywords""")
strFileContents = replace(strFileContents, "<meta NAME=""keywords""", "<meta name=""keywords""")
strFileContents = replace(strFileContents, "<META NAME=""keywords""", "<meta name=""keywords""")
strFileContents = replace(strFileContents, "<META NAME=""KEYWORDS""", "<meta name=""keywords""")
strFileContents = replace(strFileContents, "<META name=""keywords""", "<meta name=""keywords""")
strFileContents = replace(strFileContents, "<META name=""KEYWORDS""", "<meta name=""keywords""")
strFileContents = replace(strFileContents, "<meta NAME=""KEYWORDS""", "<meta name=""keywords""")

strFileContents = replace(strFileContents, "<meta name=description", "<meta name=""description""")
strFileContents = replace(strFileContents, "<meta NAME=description", "<meta name=""description""")
strFileContents = replace(strFileContents, "<META NAME=description", "<meta name=""description""")
strFileContents = replace(strFileContents, "<META NAME=DESCRIPTION", "<meta name=""description""")
strFileContents = replace(strFileContents, "<META name=description", "<meta name=""description""")
strFileContents = replace(strFileContents, "<META name=DESCRIPTION", "<meta name=""description""")
strFileContents = replace(strFileContents, "<meta NAME=DESCRIPTION", "<meta name=""description""")

strFileContents = replace(strFileContents, "<meta name='description'", "<meta name=""description""")
strFileContents = replace(strFileContents, "<meta NAME='description'", "<meta name=""description""")
strFileContents = replace(strFileContents, "<META NAME='description'", "<meta name=""description""")
strFileContents = replace(strFileContents, "<META NAME='DESCRIPTION'", "<meta name=""description""")
strFileContents = replace(strFileContents, "<META name='description'", "<meta name=""description""")
strFileContents = replace(strFileContents, "<META name='DESCRIPTION'", "<meta name=""description""")
strFileContents = replace(strFileContents, "<meta NAME='DESCRIPTION'", "<meta name=""description""")

strFileContents = replace(strFileContents, "<meta name=""description""", "<meta name=""description""")
strFileContents = replace(strFileContents, "<meta NAME=""description""", "<meta name=""description""")
strFileContents = replace(strFileContents, "<META NAME=""description""", "<meta name=""description""")
strFileContents = replace(strFileContents, "<META NAME=""DESCRIPTION""", "<meta name=""description""")
strFileContents = replace(strFileContents, "<META name=""description""", "<meta name=""description""")
strFileContents = replace(strFileContents, "<META name=""DESCRIPTION""", "<meta name=""description""")
strFileContents = replace(strFileContents, "<meta NAME=""DESCRIPTION""", "<meta name=""description""")

strFileContents = replace(strFileContents, "<TITLE>", "<title>")
strFileContents = replace(strFileContents, "</TITLE>", "</title>")

if InStr(1, strFileContents, "<meta name=""keywords""",1) > 0 then
key1 = InStr(1, strFileContents, "<meta name=""keywords""", 1)
key1 = key1 + Len("<meta name=""keywords""")
key2 = InStr(key1, strFileContents, """>", 1)

keywords = Trim(Mid(strFileContents, key1, (key2 - key1)))

keywords = Replace (keywords, "content=""", "")
keywords = Replace (keywords, "CONTENT=""", "")
keywords = Replace (keywords, "content=", "")
keywords = Replace (keywords, "CONTENT=", "")
keywords = Replace (keywords, "content='", "")
keywords = Replace (keywords, "CONTENT='", "")

Dim desc1, desc2
if InStr(1, strFileContents, "<meta name=""description""",1) > 0 then
desc1 = InStr(1, strFileContents, "<meta name=""description""", 1)
desc1 = desc1 + Len("<meta name=""description""")
desc2 = InStr(desc1, strFileContents, """>", 1)

descripcion = Trim(Mid(strFileContents, desc1, (desc2 - desc1)))

descripcion = Replace (descripcion , "content=""", "")
descripcion = Replace (descripcion , "CONTENT=""", "")
descripcion = Replace (descripcion , "content=", "")
descripcion = Replace (descripcion , "CONTENT=", "")
descripcion = Replace (descripcion , "content='", "")
descripcion = Replace (descripcion , "CONTENT='", "")

if InStr(1, strFileContents, "<title>",1) > 0 then

tit1 = InStr(1, strFileContents, "<title>", 1)
tit1 = tit1 + Len("<title>")
tit2 = InStr(tit1, strFileContents, "</title>", 1)
titulo = Trim(Mid(strFileContents, tit1, (tit2 - tit1)))
titulo = Replace (titulo, "'", " ")

if keywords <> "" then
response.Write("<strong>pagina Indexable</strong><br><br>")
response.Write("<strong>"+stu+"</strong><br><br>")
response.Write(keywords)
response.Write("<br><br>")
response.Write(descripcion)
response.Write("<br><br>")
response.Write(titulo)
else
response.Write("pagina No Indexable")
'response.Write("<br><br>")
end if
end if
end if
end if
'set HTTP = nothing
%>
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<p>&nbsp;</p>
<p>
</p>
<table width="450" border="0">
<tr>
<td><form name="form1" method="post" action="spider.asp">
<input name="url" type="text" id="url" value="http://" size="55">
<input type="submit" name="Submit" value="Indexar">
</form></td>
</tr>
</table>
</BODY>
</HTML>
<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>

Segundo:

<<<<<<<<<<<<<"default.asp">>>>>>>>>>>>>>>>>>>>>>
<html>
<head>
<title>Documento sin t&iacute;tulo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<table width="450" border="0">
<tr>
<td><form action="spider.asp" method="post" name="form" id="form">
<input name="url" type="text" id="url" value="http://" size="55">
<input type="submit" name="Submit" value="Indexar">
</form></td>
</tr>
</table>
</body>
</html>
<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>
  #2 (permalink)  
Antiguo 05/02/2003, 17:11
 
Fecha de Ingreso: diciembre-2002
Mensajes: 100
Antigüedad: 22 años, 4 meses
Puntos: 1
Si lo desean pueden probar el scrip en........

URL MODIFICADA, esta si funciona...

Prueba de SPIDER......

el error se presenta cuando no existe la dirección url que se solicite buscar, en vez de aparecer....


un mensaje que tengo de error.

Última edición por RakoVky; 05/02/2003 a las 17:42
  #3 (permalink)  
Antiguo 06/02/2003, 14:19
 
Fecha de Ingreso: enero-2003
Mensajes: 71
Antigüedad: 22 años, 4 meses
Puntos: 0
muy bueno el script.
Acabo de verlo funcionando y me ha gustado, felicidades.
  #4 (permalink)  
Antiguo 02/05/2003, 11:44
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 23 años, 4 meses
Puntos: 4
Hola,

he implementado tu script de spider en mi sitio y me ha funcionado perfectamente, se me ha ocurrido una idea ya que he visto en otros sitios como google, etc..

con esta misma aplicacion se podra capturar las etiquetas <img> de las paginas ya indexadas en mi base de datos?

por ejemplo, con tu escript capturo las palabras claves, descripcion, titulo, despues esos datos los almaceno en una base de datos comun y corriente,

despues en un buscador sencillo coloco las palabras claves y me busca en la base de datos arrojandome las url de cada sitio que concuerde..

hasta alli bien..

mi idea es colocar tambien buscador de imagenes, que cuando coloques el nombre o palabra clave se meta a un sitio y verifique las etiquetas <img y me imprima en mi hoja .asp las imagenes que se parezcan a la palabra clave que coloque, (qeu se llamen igual o parecido) por ejemplo busco pajaros, y me muestre las imagenes del sitio <img "pajaros.jpg" > o pajaros.gif etc...

se podra hacer esto? la verdad no se como modificar tu codigo para hacer algo asi..
me podras echar una manito o alguien que sepa?
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #5 (permalink)  
Antiguo 02/05/2003, 15:46
 
Fecha de Ingreso: diciembre-2002
Mensajes: 100
Antigüedad: 22 años, 4 meses
Puntos: 1
Creo que tu idea se puede hacer, voy a tratar de adaptar todo este codigo, aver lo consigo........

Imediatamente lo subo al foro como buscador de imagenes

  #6 (permalink)  
Antiguo 02/05/2003, 16:34
Avatar de maestro  
Fecha de Ingreso: febrero-2002
Ubicación: España
Mensajes: 2.364
Antigüedad: 23 años, 3 meses
Puntos: 1
Veo que tu pagina ha tenido tanto exito hoy que....
The daily bandwidth limit for this member has been exceeded. Try again after midnight, EST.
Click here for more information.
__________________
Jose Maria Fernandez
[email protected]
Http://www.expansionweb.net
  #7 (permalink)  
Antiguo 03/05/2003, 16:10
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 23 años, 4 meses
Puntos: 4
hola,

he estado usando tu spider bastante, ya qye estoy construyendo el buscador que comente anteriormente, he encontrado varios errores, sera que me puedes dar una mano¿


por ejemplo cuando el spider indexa una pagina que no tiene etiquetas de keywords o description, la pagina que busca (spider.asp) queda en blanco (no hace nada) lo mismo pasa cuando tiene frames o iframes.

por ejemplo cuando no encuentra una pagina o un servidor, sale este error

error '800c0005'
/decali/spider/spider.asp, line 20

no habra una funcion en asp que cuando encuentre este error te diga un mensaje "pagina o servidor inexistente"

por ejemplo algo asi:
if error = error '800c0005' then
response.write "pagina o servidor inexistente"
end if

algo asi, se que no sirve peroalgo se podra hacer..


espero no sea mucha molestia que me ayudes a corregir estos errorcitos, con esto quedara super bien tu codigo (mas de lo que esta)..
muchas gracias.
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #8 (permalink)  
Antiguo 04/05/2003, 05:47
 
Fecha de Ingreso: abril-2003
Mensajes: 63
Antigüedad: 22 años
Puntos: 0
No se si te podria valer esta solucion, pero podrías definir una página externa con el error en tu servidor

Vete a Servicios de informacion de servidores, luego propiedades en tu carpeta web de trabajo y luego errores personalizados
No olvides guardar la pagina de error en la carpeta common
  #9 (permalink)  
Antiguo 04/05/2003, 06:25
Avatar de Aston  
Fecha de Ingreso: mayo-2001
Ubicación: Madrid
Mensajes: 933
Antigüedad: 24 años
Puntos: 0
Spider mejorado

Hola RakoVky y los demás:

Me he tirado un rato retocando tu Spider y creo que ha mejorado un poco, si no en la respuesta, si en optimización de código.

Aún se pueden mejorar cosas como los sitios que ponen antes el CONTENT que el NAME en cuyo caso sigue sin devolver nada, y el problema de los acentos que se puede resolver usando el método ResponseBody de XMLHTTP en lugar de ResponseText y leyendo el retorno con Request.BinaryRead. Yo no dispongo de mucho más tiempo. Quizá algún maestro...

Los siguientes errores han sido arreglados:

1. Daba un error cuando no se encontraba la página. Ahora se detecta y te lo comunica.

2. Este otro bug consistía en que no daba error y no ocurría nada pero no devolvía ningún valor para el sitio encontrado. Este error era debido a que en las cadenas a buscar, por ejemplo "<meta name='description' content='" en muchos siitios, entre palabras dejaban más de un espacio y en consecuencia, no se encontraba. También se ha resuelto para una gran mayoría de los casos.

3. Este otro era igual que el anterior, pero en este caso, se daba porque hay sitios que en vez de estar escritos en HTML, están escritos en XHTML y los metas acaban en vez de en '> en espacio /> y al no encontrar etiqueta final devolvía mucha basura. Esto está solucionado.

El Spider retocado se puede descargar en http://www.laventanita.net/tutorial/spider.zip

No lo he dejado para probar poque si se hacen varias peticiones al mismo tiempo y algunas son fallidas el servidor se queda pillado. Es algo a tener muy en cuenta.

Mejor descargar el ejemplo que copiar el código de aquí, para que las sentencias y bucles no pierdan la sangría. Cuestión de ahorrase trabajo. No obstante os pongo el código y explico los cambios:

Sólo comentar que en este ejemplo elimino la página Default.asp y ahora Spider.asp muestra el formulario y realiza la búsqueda, con lo que todo queda en un página.

Igualmente el código que ha quedado es unas 8 veces menor.


Spider.asp

<%@ LANGUAGE="VBSCRIPT"%>
<%Option Explicit
Response.Expires = -1000
Response.Buffer = False%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Spider</title>

Unos estilitos y así ya me servía para mi sitio. Sólo debeis cambiar estos 4 estilos y ya...

<style type="text/css">
body { font-size: 11px; font-family: Verdana }
.fPeq { font-size: 11px; font-family: Verdana }
.fBlan { font-size: 11px; font-family: Verdana; background-color: #FFFFFF; border: 1px solid #A5ACB2 }
.fCafe { font-size: 11px; font-family: Verdana; background-color: #F5E8D8; border: 1px solid #BD7B42 }
</style>
</head>
<body><%

Ahora sólo declaramos 6 variables...

Dim oXML, cURL, cConten, cKey, cDescrip, cTit

cURL = Request.Form("url")
If cURL <> "" Then

On Error Resume Next
Set oXML = Server.CreateObject("Microsoft.XMLHTTP")
oXML.open "GET", cURL, False
oXML.Send

Controlamos el error cuando el sitio no existe...

If Err.number <> 0 Then
Response.Write "Ha sido imposible encontrar el sitio. " & "[<a href='javascript:history.back()'>Volver</a>]"
Response.End
End If

If oXML.statusText = "OK" Then
cConten = oXML.ResponseText

Recogemos los metas. Las 147 líneas que se usaban para esto se quedan en sólo 3!! llamando a una pequeña función EncuentraCad() que se reutiliza para los 3 valores.

Para ello, dentro de esta función convertimos todo a minúsculas una sola vez para hacer la comparación pero los datos los extraemos de la cadena normal, respetando las mayúsculas que puedan tener, sobre todo el título y la descripción.


cTit = EncuentraCad(cConten, "<title>", "</title>")
cDescrip = EncuentraCad(cConten, "meta name='description' content='", ">")
ckey = EncuentraCad(cConten, "meta name='keywords' content='", ">")%>

Mostramos los datos en un formulario con sus respectivos inputs y así podemos copiar y pegar...

<form name="Mostrar">
<table width="700" border="0">
<tr>
<td class="fPeq"><b>URL</b></td>
<td><input class="fBlan" type="text" name="Url" size="100" value="<%=cURL%>" onfocus="this.className='fCafe'" onblur="this.className='fBlan'"></td>
</tr>
<tr>
<td class="fPeq"><b>Título</b></td>
<td><input class="fBlan" type="text" name="Titulo" size="100" value="<%=cTit%>" onfocus="this.className='fCafe'" onblur="this.className='fBlan'"></td>
</tr>
<tr>
<td class="fPeq"><b>Descripción</b></td>
<td><input class="fBlan" type="text" name="Descripcion" size="100" value="<%=cDescrip%>" onfocus="this.className='fCafe'" onblur="this.className='fBlan'"></td>
</tr>
<tr>
<td class="fPeq" valign="top"><b>Keywords</b></td>
<td><textarea class="fBlan" name="Keywords" cols="99" rows="5" onfocus="this.className='fCafe'" onblur="this.className='fBlan'"><%=cKey%></textarea></td>
</tr>
</table>
</form>
<hr class="fPeq"><%

Se controla de nuevo si no se encontró la página...

Else
Response.Write "Error obteniendo página. " & oXML.statustext & " [<a href='javascript:history.back()'>Volver</a>]"
End If
Set oXML = Nothing
End If%>

Formulario para la búsqueda...

<table width="450" border="0">
<tr><td>
<form name="form1" method="post" action="spider.asp">
<input class="fBlan" type="text" name="url" value="http://" size="45" onfocus="this.className='fCafe'" onblur="this.className='fBlan'">
<input class="fPeq" type="submit" name="Submit" value="Indexar">
</form>
</td></tr>
</table>

<br><br><a href="spider.zip">Descargar Spider (1,5 Kb)</a>

</body>
</html><%

'-------------------- FUNCIONES

Esta es la sencilla función que llamamos arriba y que parsea el texto...

Function EncuentraCad(cCad, cDesde, cHasta)
'Encuentra una subcadena entre dos subcadenas dadas
Dim cAct, cOri, nIni, nFin

cAct = Replace(cCad, " ", " ") 'Controlando dobles espacios... Originaba el error!!
cOri = Replace(cAct, Chr(34), "'") 'Original, respeta mayúsculas, dobles comillas por comillas simples...
cAct = LCase(Replace(cAct, Chr(34), "'")) 'Dobles comillas por comillas simples y pasando a minúsculas...
nIni = InStr(1, cAct, cDesde)
If nIni = 0 Then Exit Function
nIni = InStr(1, cAct, cDesde) + Len(cDesde)
nFin = InStr(nIni, cAct, cHasta) - nIni

EncuentraCad = SinFull(Mid(cOri, nIni, nFin))
End Function

Esta otra función se añade para quitar la barra, la contrabarra y la comilla simple final, si existiese, ya que para el código XHTML como cadena final sólo buscamos > y no '> como antes.

Lo único que hace son varios Replace() metiendo los valores a eliminar en un array o arreglo. Si se añaden más caracteres al array, no olvidar aumentar el contador i


Function SinFull(cCad)
'Devuelve una cadena sin guarrerías
Dim i, aCon
aCon = Array("/", "\", "'")
For i = 0 To 2
cCad = Replace(cCad, aCon(i), "")
Next
SinFull = Trim(cCad)
End Function%>

Fin Spider.asp

Espero les sirva, un saludote.

Última edición por Aston; 04/05/2003 a las 08:20
  #10 (permalink)  
Antiguo 04/05/2003, 09:51
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 23 años, 4 meses
Puntos: 4
SAludos,

Estoy muy agradecido con ustedes dos, la verdad son unos MAESTROS y unos genios, quedaron resueltos la mayoria de los problemas y quedo excelente, muy optimizado,

muchas gracias de nuevo por esta colaboracion tan grande que me han dado, ya solo resta que algun otro maestro nos colabore con lo de los acentos y la "ñ" ya que intente con esto:


oXML.setRequestHeader "Accept-Language", "sp"
oXML.setRequestHeader "Pragma", "no-cache"
oXML.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"


y no lo soluciono, y la verdad no entendi muy bien lo de responsebody,
algun maestro que nos quiera seguir colaborando para sacar adelante este proyecto tan interesante.
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com

Última edición por lexus; 04/05/2003 a las 10:02
  #11 (permalink)  
Antiguo 05/05/2003, 16:04
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 23 años, 4 meses
Puntos: 4
hola, alguen qeu nos ayude con las "ñ" o con los acentos?
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #12 (permalink)  
Antiguo 18/05/2003, 16:12
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 23 años, 4 meses
Puntos: 4
hola, alguen qeu nos ayude con las "ñ" o con los acentos?
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:12.