Foros del Web » Programando para Internet » PHP »

¿Cómo hago un spider?

Estas en el tema de ¿Cómo hago un spider? en el foro de PHP en Foros del Web. Hola a todos... Tengo 2 preguntas que hacerles. 1. ¿Cómo hago un spider en php? Hay unos programas que se recorren Internet buscando direcciones de ...
  #1 (permalink)  
Antiguo 22/05/2003, 20:35
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 22 años, 3 meses
Puntos: 2
Pregunta ¿Cómo hago un spider?

Hola a todos...

Tengo 2 preguntas que hacerles.

1. ¿Cómo hago un spider en php? Hay unos programas que se recorren Internet buscando direcciones de e-mail y las van metiendo en una BD. ¿Cómo hago eso?

2. Tengo un gran texto... ese texto contiene de todo, fotos, texto, emails, etc. Yo lo escanee con un reconocedor de textos ABBYY Fine Reader. Lo que quiero es meter ese texto en un TEXTBOX y que automáticamente me extraiga todas las direcciones de correo electrónico que exista en el texto. Se que se hace con expresiones regulares, pero más o menos me gustaría que me diesen una idea de la estructura y las funciones que debo usar.

Muchas gracias y saludos !!!
__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)
  #2 (permalink)  
Antiguo 22/05/2003, 20:58
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Podrías ver como trabajan estos "spiders" ... ejemplos tienes en:
http://www.hotscripts.com/PHP/Script.../Web_Fetching/

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 22/05/2003, 21:02
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 22 años, 3 meses
Puntos: 2
Ok... thankz...

Y lo del texto ??... tu tienes que saber algo... JEJEJE
__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)
  #4 (permalink)  
Antiguo 22/05/2003, 21:11
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Pues .. lo del texto en el "textbox" .. ¿No será mejor abrir el archivo via PHP para que lo procese? (que te extraiga lo que necesites previo filtrado via por ejemplo expresiones regulares)?

A todo esto .. dices que es un "texto" scaneado con imagenes y no se que más .. por lo tanto es un "binario" .. No sé como se comportaran tus expresiones regulares o funciones de strings(cadenas) que puedas usar sobre ese archivo binario ..

Primero editalo con el "notepad" y mira si el texto está "legible" fuera de los "códigos" que vas a ver de las imagenes. Tal vez ese proceso lo tengas que hacer con tu sofware de scaneo de esos documentos para que te "extraiga" por lo menos por separado el texto de las imagenes que contenga .. hacia un .txt (archivo de texto plano).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 22/05/2003, 21:13
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 22 años, 3 meses
Puntos: 2
Claro claro...

Las imágenes el programa las quita. Lo que deja como resultado es un texto desordenado con mails y palabras desordenadas...

El hecho es que no se qué funciones usar para filtrar el texto...
JEJEJE
__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)
  #6 (permalink)  
Antiguo 22/05/2003, 21:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Pues .. lo que mas te haría falta es un buen manual de Expresiones Regulares para Perl (sí .. para Perl pues de ahí nacieron y de ahí obtendras mas información) ... Luego .. en PHP, tienes las funciones:

Regular Expression Functions (Perl-Compatible)
http://www.php.net/manual/en/ref.pcre.php

En concreto ... preg_grep() ... créo que te vendría bien, pues te devuelve un array con las apariciones del texto que cumpla la expresión regular que indiques ..

La expresión regular para "detectar" una cadena (string) que sea un e-mail válido .. puede ser esta:

([a-zA-Z0-9._]+)@([a-zA-Z0-9.-]+).([a-zA-Z]{2,4})

(extraido de una de las FAQ's de este foro PHP. Sin el ^ que indica "principio" y $ final .. si mal no recuerdo.)


Por supuesto .. tu archivo lo vas a tener que leer hacia una variable .. eso lo puedes hacer fácilmente con:

Código PHP:
$texto_archivo=implode('',file("tu_archivo.txt")); 
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 23/05/2003, 08:54
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 22 años, 3 meses
Puntos: 2
Chevere Cluster...

Ya agarré el hilo... muchas gracias viejo !.
__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)
  #8 (permalink)  
Antiguo 26/05/2003, 15:09
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 22 años, 3 meses
Puntos: 2
Hola viejo... se me presentó un problema. Tengo este code:

Código PHP:
<?php

if (!isset($cadena)) {
    echo 
"Debe introducir una cadena de texto.";
} else {
   
$cadena ereg_replace("\\\\\\\\""\\"$cadena);
   
   
$correcto ereg("([a-zA-Z0-9._]+)@([a-zA-Z0-9.-]+).([a-zA-Z]{2,4})"$cadena$emparejados);
                 
   if (
$correcto) {
      
// La Expresión Regular y la cadena concuerdan por lo que se 
      // muestran las subcadenas donde se han producido las 
      // coincidencias.
      
for ($i=1$i<count($emparejados); $i++) {
         echo 
"Emparejamiento $i= <FONT COLOR=Brown>" "$emparejados[$i]</FONT><br>";
      }
   } else {
      
// La Expresión Regular y la cadena NO concuerdan
      
echo "<FONT COLOR=Red>NO CONCUERDA NADA</FONT>";
   }
}

echo <<< HTML

<html>
<head>
<title>Extractor de e-mails</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<form method="post" action="">
  <textarea name="cadena" cols="120" rows="30"></textarea>
  <input type="submit" name="Submit" value="Enviar">
</form>
</body>
</html>

HTML;

?>
El hecho es que cuando meto un texto, por ejemplo "asfasdfha [email protected]" me devuelve:

Emparejamiento 1= danny
Emparejamiento 2= noseque.com
Emparejamiento 3= ve

Y quiero que me devuelva:

Emparejamiento 1= [email protected]
Emparejamiento 2= cualquier otro mail que se encuentre...

¿Qué tengo malo?

He estado echandole coco desde hace como 3 días y nada !!!

Please help !
__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)
  #9 (permalink)  
Antiguo 26/05/2003, 17:42
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Ya te comenté que lo mio no son las expresiones regulares .. (vistes ya algún manual al respecto? ..)

pero, lo que está haciendo es lo que debe hacer la función ... Ya te comenté que usases:

preg_grep() Según su definición dice que te devolverá un array con dichos elementos que cumplan la expresión regular que apliques ..

Por lo demas tengo algunos comentarios para el resto de código ..

$cadena = ereg_replace("\\\\", "\", $cadena);
creo que lo que aquí haces con stripslashes() lo harías mejor ...

Los bucle for() que usas para recorrer tus arrays .. podrías usar bucles tipo foreach() .. mucho mas cómodos de manejar para recorrer arrays ...


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 27/05/2003, 21:00
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 22 años, 3 meses
Puntos: 2
El asunto era que tenía mal la expresión regular.

Tiene que quedar asi:

(^[0-9a-zA-Z_\.-]{1,}@[0-9a-zA-Z_\-]{1,}\.[0-9a-zA-Z_\-]{2,}$)

Saludos y mil gracias viejo !!!... =)
__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)
  #11 (permalink)  
Antiguo 08/01/2004, 04:17
 
Fecha de Ingreso: marzo-2002
Mensajes: 86
Antigüedad: 22 años, 8 meses
Puntos: 0
Como podemos evitar un spider?

Como podemos evitar un spider?
  #12 (permalink)  
Antiguo 08/01/2004, 06:16
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 22 años, 5 meses
Puntos: 16
Re: Como podemos evitar un spider?

Cita:
Mensaje Original por xavigv
Como podemos evitar un spider?
Depende. Si es un spider legal que obedece el robots.txt (http://www.robotstxt.org/wc/robots.html), simplemente creando ese fichero en el directorio raiz del dominio (o subdominio) vale. Ademas, para las paginas HTML tambien se puede especificar un META especifico (http://www.robotstxt.org/wc/exclusion.html#meta). Estos metodos funcionan para los spiders de los buscadores y otros spiders.

Pero normalmente los spiders "malignos" no suelen hacer caso a esas tecnicas. En ese caso, si el spider se identifica en el HTTP_USER_AGENT, se puede usar ese valor para filtrarlo. En http://www.forobuscadores.com/foros/...showtopic=1889 muestran como hacerlo con mod_rewrite, y no se si en alguno de los enlaces ponen la forma de hacerlo con solo PHP. Pero seria tener en una lista las expresiones regulares (pueden servir las del mod_rewrite) que identifiquen esos spiders y compararlos con el valor de $_SERVER['HTTP_USER_AGENT']. Si da positivo, lo redireccionas o haces lo que quieras.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
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 13:11.