elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 13:15  


Tema destacado: Entra al canal IRC oficial de #elhacker.net

+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP
| | | |-+  Detectar Links y meter en un array
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Detectar Links y meter en un array  (Leído 1,664 veces)
Auton

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Detectar Links y meter en un array
« en: 18 Junio 2011, 11:31 »

Hola,
por no subir de nuevo un antiguo tema hago la pregunta en uno nuevo.

El tema es este:

http://foro.elhacker.net/php/buscar_links_y_meter_en_un_array-t293080.0.html

y mi pregunta es cómo puedo extraer el texto del link aparte de la url.

Gracias


En línea
madpitbull_99
Moderador Global
***
Desconectado Desconectado

Mensajes: 1.898



Ver Perfil WWW
Re: Detectar Links y meter en un array
« Respuesta #1 en: 18 Junio 2011, 12:05 »

Escribí un post que te puede ayudar: Parsear HTML con PHP – Simple HTML DOM Parser.

Con esa librería se puede hacer fácilmente lo que tú quieres.


En línea



«Si quieres la paz prepárate para la guerra» Flavius Vegetius

[Taller]Instalación/Configuración y Teoría de Servicios en Red
Auton

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Detectar Links y meter en un array
« Respuesta #2 en: 18 Junio 2011, 13:11 »

Hola,
muchas gracias por tu pronta respuesta.
Esa librería y código están realmente bien.
Quizá lo necesite en algún momento pero busco algo que creo que es más sencillo a partir de algo que ya tengo. Con este mismo código

Código:
<?
$html = file_get_contents('http://www.example.com');

$dom = new DOMDocument();
@$dom->loadHTML($html);

// grab all the on the page
$xpath = new DOMXPath($dom);
$hrefs = $xpath->evaluate("/html/body//a");

for ($i = 0; $i < $hrefs->length; $i++) {
       $href = $hrefs->item($i);
       $url = $href->getAttribute('href');
       echo $url.',';
}
?>


ya consigo extraer todas las urls de un html sin librerías en la variable $url, y me imagino que de la misma manera que tenemos la url me imagino que no debe ser muy dificil extraer lo que hay entre: <a href="http://ellink">
y </a> en otra variable, aunque para mí no es tan sencillo claro.
Si no aparece algo recurriré a lo que me dices.
Gracias de nuevo
« Última modificación: 18 Junio 2011, 13:16 por Auton » En línea
madpitbull_99
Moderador Global
***
Desconectado Desconectado

Mensajes: 1.898



Ver Perfil WWW
Re: Detectar Links y meter en un array
« Respuesta #3 en: 18 Junio 2011, 14:18 »

Mira esta función que sirve para extraer el contenido situado entre dos delimitadores:

Código
<?php
 
   /**
     * Devuelve el contenido situado entre dos delimitadores.
     *
     * @return string
     */
   function getContentFromDelimiters($string, $start, $end) {
       $pos = stripos($string, $start);
       $str = substr($string, $pos);
       $str_two = substr($str, strlen($start));
       $second_pos = stripos($str_two, $end);
       $str_three = substr($str_two, 0, $second_pos);
       $unit = trim($str_three);
       return $unit;
   }
 
   /**
     * Funcionamiento y Uso
     */
 
   $handler = fopen ("http://madhacking.com", r);
   if ($handler)
       echo "[Ok] Access to site.<br />";
   while (!feof($handler)) {
       $webData .= fread($handler, 12000);
   }
   //var_dump($webData);
   fclose($handler);
 
   $webTitle = getContentFromDelimiters($webData, "<title>", "</title>");    echo "<b>The web title is: </b>".$webTitle;
?>


También viene con un ejemplo de uso. Lo importante está en la línea resaltada.

Supongo que es lo que quieres, mira a ver si te sirve.
En línea



«Si quieres la paz prepárate para la guerra» Flavius Vegetius

[Taller]Instalación/Configuración y Teoría de Servicios en Red
Auton

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Detectar Links y meter en un array
« Respuesta #4 en: 19 Junio 2011, 19:51 »

Muchas gracias,
ahora estoy intentando utilizar esto pero para que encuentre los textos de los enlaces de la página de forma dinámica dentro del bucle de mi código.
Te contaré
En línea
Shell Root


Desconectado Desconectado

Mensajes: 2.456


Alex Jurado


Ver Perfil WWW
Re: Detectar Links y meter en un array
« Respuesta #5 en: 19 Junio 2011, 20:36 »

Te puede servir de apoyo ;)
http://shellrootsecurity.blogspot.com/2010/06/simulacion-de-la-tool-list-urlspy-en_1763.html
En línea

---
Auton

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Detectar Links y meter en un array
« Respuesta #6 en: 21 Junio 2011, 09:38 »

Hola,
muchas gracias por tu aportación.
Había visto preg_match_all pero no entiendo muy bien que debo hacer con este código.
'argv' ?
No se dónde tendría que poner la url del contenido de donde tengo que extraer los links (con su texto de link).

Muchas gracias
En línea
Shell Root


Desconectado Desconectado

Mensajes: 2.456


Alex Jurado


Ver Perfil WWW
Re: Detectar Links y meter en un array
« Respuesta #7 en: 21 Junio 2011, 15:49 »

Lo que pasa es que esto se realiza por medio de la consola y por el paso de argumentos tal como,
Código
$ php list-urls.php [URL]
En línea

---
Auton

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Detectar Links y meter en un array
« Respuesta #8 en: 24 Junio 2011, 12:01 »

Hola!
Ya tengo la solución !
Ante todo gracias por vuestras respuestas.
Aunque la solución era más sencilla.
Partiendo del mismo código que había puesto sólo he tenido que añadir $text = $href->nodeValue; donde la variable $text será el texto del link.

Código:
<?
$html = file_get_contents('http://www.example.com');

$dom = new DOMDocument();
@$dom->loadHTML($html);

// grab all the on the page
$xpath = new DOMXPath($dom);
$hrefs = $xpath->evaluate("/html/body//a");

for ($i = 0; $i < $hrefs->length; $i++) {
       $href = $hrefs->item($i);
       $url = $href->getAttribute('href');
       $text = $href->nodeValue;
       echo "<a href='$url'>$text</a>";
}
?>
De hecho ahora lo que me faltaría es detectar una imagen en caso de que en lugar de texto fuese una el cuerpo del enlace.
 ;D
« Última modificación: 24 Junio 2011, 12:12 por Auton » En línea
WHK
吴阿卡
Ex-Staff
*
Desconectado Desconectado

Mensajes: 4.113


The Hacktivism is not a crime


Ver Perfil WWW
Re: Detectar Links y meter en un array
« Respuesta #9 en: 25 Junio 2011, 08:19 »

Sin librerías:

Código
<?php
 
$buffer = file_get_contents('http://foro.elhacker.net/');
$links = explode('<a', $buffer);
array_shift($links);
foreach($links as $id => $link){
$lnk = explode('href="', $link);
$lnk = explode('"', $lnk[1]);
$lnk = $lnk[0];
$text = explode('>', $link);
$text = explode('<', $text[1]);
$text = $text[0];
if(substr(trim($text), 0, 1) == '<')
$type = 'object';
elseif(!trim($text))
$type = 'bad link';
else
$type = 'text';
 
$ob_links[] = array(
'id' => ($id + 1),
'link' => $lnk,
'text' => $text,
'type' => $type
);
}
 
print_r($ob_links);
 
?>
En línea

Mi foro Ultra Off-Topics: http://whk.drawcoders.com/foro/

Gracias a todos! Good bye!
Nakp
casi es
Ex-Staff
*
Desconectado Desconectado

Mensajes: 6.334

he vuelto :)


Ver Perfil WWW
Re: Detectar Links y meter en un array
« Respuesta #10 en: 25 Junio 2011, 10:52 »

yo pienso que esto hace el trabajo :¬¬

Código
$pat = '/<a.+href=[\"\']([a-z\/:\.\%\-\_0-9\s]+)[\"\']/i';
preg_match_all($pat, $data, $urls);
var_dump($urls[1]);



pa quien quiera probar
http://regex.larsolavtorvik.com/

le agregue el espacio porque hay gente que le da la gana escribirlos en vez de %20 xD
« Última modificación: 25 Junio 2011, 11:04 por Nakp » En línea

Ojo por ojo, y el mundo acabará ciego.
~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 954



Ver Perfil
Re: Detectar Links y meter en un array
« Respuesta #11 en: 25 Junio 2011, 17:16 »

Si, vivan las expresiones regulares xD. Muy buena la pagina Nakp, usaba otra pero era en Flash.

Código
<?php
$contenido = file_get_contents('http://foro.elhacker.net/');
 
preg_match_all('/<a[^=]+=(?:\"|\')((?i).+(?-i))(?:\"|\')>(.+)<\/a>/',$contenido, $result, PREG_SET_ORDER);
 
print_r($result);
?>

Salida:
Código:
[87] => Array
        (
            [0] => <a href="http://foro.elhacker.net/profiles/azielito-u5350.html">Azielito</a>
            [1] => http://foro.elhacker.net/profiles/azielito-u5350.html
            [2] => Azielito
        )

    [88] => Array
        (
            [0] => <a href="http://foro.elhacker.net/multimedia-b3.0/">Multimedia</a>
            [1] => http://foro.elhacker.net/multimedia-b3.0/
            [2] => Multimedia
        )


Saludos.
« Última modificación: 25 Junio 2011, 17:20 por ~ Yoya ~ » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines