Foros del Web » Programando para Internet » PHP »

Extractor de urls en un documento

Estas en el tema de Extractor de urls en un documento en el foro de PHP en Foros del Web. Hola que tal, estoy de vuelta por los foros, queria hacerles una pequeña consulta, alguien por aqui conoce algun script en php que extraiga todas ...
  #1 (permalink)  
Antiguo 24/07/2008, 10:50
Avatar de xcorpion  
Fecha de Ingreso: octubre-2003
Ubicación: m é x i c o
Mensajes: 676
Antigüedad: 16 años, 1 mes
Puntos: 4
Extractor de urls en un documento

Hola que tal, estoy de vuelta por los foros, queria hacerles una pequeña consulta, alguien por aqui conoce algun script en php que extraiga todas las urls que coincidan con un determinado dominio desde un documento html? además tendrias que tener un metodo eficiente, consumir poca memoria y correr rápido.
Si alguien puede ayudarme se lo agradeseria mucho.
Saludos
  #2 (permalink)  
Antiguo 24/07/2008, 11:05
Avatar de Carlojas  
Fecha de Ingreso: junio-2007
Ubicación: Shikasta
Mensajes: 1.272
Antigüedad: 12 años, 5 meses
Puntos: 49
Respuesta: Extractor de urls en un documento

Que tal xcorpion, dudo que haya un script como tal que realize lo que deseas, pero se podria plantear con algunas funciones tales como fread y fopen , para leer y recorrer el documento, y puedes utlizar expresiones regulares para buscar las posibles coincidencias de las urls y el dominio, puedes mirar esta función preg_match




Saludos.
  #3 (permalink)  
Antiguo 24/07/2008, 11:11
Avatar de xcorpion  
Fecha de Ingreso: octubre-2003
Ubicación: m é x i c o
Mensajes: 676
Antigüedad: 16 años, 1 mes
Puntos: 4
Respuesta: Extractor de urls en un documento

Muchas gracias por tu respuesta. Si me paso por la mente hacerlo así, solo que no soy muy bueno programando y necesito que el script tenga una eficiencia máxima, voy a seguir buscando un script que pueda hacer esto, si no encuentro algo voy a tener que programarlo yo mismo y el servidor va a sufrir las consecuencias :P
  #4 (permalink)  
Antiguo 24/07/2008, 11:29
 
Fecha de Ingreso: julio-2008
Mensajes: 85
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: Extractor de urls en un documento

Código PHP:
$html file_get_contents("http://dominio.com/foo/bar.php");
preg_match_all('#<a  ([^>]* )?href=("|\')([^>]+)("|\')[^>]*>'Uim,$html,$coincidencias);
//En $coincidencias[3] tienes un array con TODOS los links. 
Y luego solo te queda comprobar las que son del mismo dominio(puede hacerse en el propio regex también).
Ten en cuenta que hay tres tipos de enlaces que cumplen lo que buscas:
  • "http://dominio.com/carpeta/archivo.php" (completas?)
  • "carpeta/archivo.php" (relativas)
  • y "/carpeta/archivo.php" (absolutas)
  #5 (permalink)  
Antiguo 24/07/2008, 11:33
Avatar de xcorpion  
Fecha de Ingreso: octubre-2003
Ubicación: m é x i c o
Mensajes: 676
Antigüedad: 16 años, 1 mes
Puntos: 4
Respuesta: Extractor de urls en un documento

Gracias LoveMeNot, encontre un script que hace algo similar:
http://w-shadow.com/blog/2007/07/16/...age-using-php/

Aun que tu lo pusiste más simplificado.
Gracias de nuevo

un saludo
  #6 (permalink)  
Antiguo 24/07/2008, 11:51
 
Fecha de Ingreso: julio-2008
Mensajes: 85
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: Extractor de urls en un documento

Me parece muy completo, aunque su eficiencia es mejorable.

Por otro lado, si quisieras hacer algo parecido a un rastreador de páginas web es mala idea usar PHP. Si es alguna otra cosa que necesitas hacer a pequeña escala pues entonces perfecto.

Saludos :)
  #7 (permalink)  
Antiguo 24/07/2008, 12:00
Avatar de xcorpion  
Fecha de Ingreso: octubre-2003
Ubicación: m é x i c o
Mensajes: 676
Antigüedad: 16 años, 1 mes
Puntos: 4
Respuesta: Extractor de urls en un documento

Le hice algunos ajustes esperando que mejore la eficiencia, si tienes alguna sugerencia para mejorarlo porfavor dimela. No es un crawler pero si hay alguna mejorarlo sería bueno probar.
  #8 (permalink)  
Antiguo 24/07/2008, 12:11
 
Fecha de Ingreso: julio-2008
Mensajes: 85
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: Extractor de urls en un documento

Hay algunas expresiones regulares y partes del algoritmo que se pueden retocar, pero no son muy importantes.
El problema que veo está en el uso de la función in_array que es recomendable solo para arrays pequeños. Para que te hagas una idea, si encuentra 200 links, hace 20100 comparaciones, si hay 300 links 45150, etc.

De todas formas solo te compensa retocarlo si la eficiencia es muy importante.
Y además pensándolo bien se te escapa tiempo de ejecución por otras partes, como en el mismo curl. Nos estariamos preocupando por un par de segundos, cuando al abrir una página con curl puedes perder 30 segundos perfectamente.
  #9 (permalink)  
Antiguo 24/07/2008, 12:21
Avatar de xcorpion  
Fecha de Ingreso: octubre-2003
Ubicación: m é x i c o
Mensajes: 676
Antigüedad: 16 años, 1 mes
Puntos: 4
Respuesta: Extractor de urls en un documento

Si es bastante importante, aun que no creo que afecte mucho, solo pienso extraer un máximo de 50 links por pagina, lo que voy a intentar es descartar las urls que no coincidan con el dominio e intentar que recolete urls que no necesariamente pertenescan a un link, todo esto modificando la expresion regular. El unico problema: que soy malisimo con regexp, pero bueno, de cualquier forma voy a intentarlo.
Saludos y gracias por el apoyo
  #10 (permalink)  
Antiguo 24/07/2008, 12:44
Avatar de xcorpion  
Fecha de Ingreso: octubre-2003
Ubicación: m é x i c o
Mensajes: 676
Antigüedad: 16 años, 1 mes
Puntos: 4
Respuesta: Extractor de urls en un documento

Intente con esto pero no me funciona:
Código PHP:
preg_match_all('/http:\/\/(www\.)?[(dminio\.com)(dominio2\.com)]\/[^\"\'\s<)]*/i'$html$m); 
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 17:46.