Tema destacado: Entra al canal IRC oficial de #elhacker.net
Autor
|
Tema: Detectar Links y meter en un array (Leído 1,664 veces)
|
|
|
|
|
Auton
Desconectado
Mensajes: 5
|
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 <? $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
|
Mira esta función que sirve para extraer el contenido situado entre dos delimitadores: <?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
|
|
|
|
Auton
Desconectado
Mensajes: 5
|
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
|
|
|
|
|
|
Auton
Desconectado
Mensajes: 5
|
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
Mensajes: 2.456
Alex Jurado
|
Lo que pasa es que esto se realiza por medio de la consola y por el paso de argumentos tal como, $ php list-urls.php [URL]
|
|
|
|
|
En línea
|
 ---
|
|
|
Auton
Desconectado
Mensajes: 5
|
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. <? $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. 
|
|
|
|
« Última modificación: 24 Junio 2011, 12:12 por Auton »
|
En línea
|
|
|
|
WHK
吴阿卡
Ex-Staff
Desconectado
Mensajes: 4.113
The Hacktivism is not a crime
|
Sin librerías: <?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
|
|
|
|
Nakp
casi es
Ex-Staff
Desconectado
Mensajes: 6.334
he vuelto :)
|
yo pienso que esto hace el trabajo  $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
Mensajes: 954
|
Si, vivan las expresiones regulares xD. Muy buena la pagina Nakp, usaba otra pero era en Flash. <?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: [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
|
|
|
|
|
|