Deprecated: Function create_function() is deprecated in /home/nekdyruf/public_html/codi/wp-content/plugins/wp-syntax/geshi/geshi.php on line 4751
En esta entrada vamos a mostrar como escrapear dominios con simple_html_dom, la verdad que esta librería funciona muy bien y es muy sencillo recuperar datos de las webs utilizándola.
En este ejemplo vamos a enviar un array o colección de webs o urls de las que vamos a obtener el título de la página.
Esto es bastante simple valdría con hacer algo así:
llamar a la libreria:
require_once('simple_html_dom.php'); |
Crear el array o colección de páginas web o urls
$ureles = array( "https://www.codifica.me" ,"http://otraweb.com" ,"http://otraweb.es" ,"http://vimeo.com" ,"http://youtube.com" ); |
Por cada url ejecutar file_get_html
foreach ($ureles as $element){ $html = file_get_html($element); |
Por cada $html que ha devuelto le ejecución de la función encontrar el título de la página y si no está vacio mostrarlo por pantalla
foreach( $html->find('title') as $element1){ if (!empty($element1)) { echo $element1->plaintext . '<br>'; } } } |
Sencillito ¿no? , bueno pues hasta aquí bien, aunque si quieres hacer lo mismo con 200 urls es posible que el servidor te muestre un error de time out, así que tendrás que lo más sencillo es crear una petición ajax para que vaya ejecutando o enviando al servidor las urls de 10 en 10, aunque esto ya depende de tu servidor y de la capacidad que tenga.
Otro error que también os podéis encontrar cuando intentamos llegar a muchas urls es que alguna esté caida, para eso yo llamo a una funcion para chequear las urls que utiliza la famosa librería curl que practicamente pregunta por la url y en el caso de que esta funcione bien y no devuelva ningún error nos devolverá ‘true’ y podremos continuar con la ejecución del código.
Este es el código básicamente, adáptalo a tu gusto 😉
require_once('simple_html_dom.php'); $ureles = array( "http://dailymotion.com" ,"http://youtube.com" ,"https://www.codifica.me" ); $numero=1; foreach ($ureles as $element){ $file1 = $element; $html = file_get_html($element)or die('this is not a valid url'); //limpiar urls $eliminarUrls= array("http://", "https://", "www."); $urlsLimpias= str_replace($eliminarUrls, "", $element); //urls limpias echo '<div class="byellow">Sitio ' . $numero . ': <b>' . $urlsLimpias . '</b></div><br>'; foreach( $html->find('title') as $element1){ if (!empty($element1)) { echo $element1->plaintext . '<br>'; } } echo '<br>'; $numero=$numero+1; } |
Si quieres todo el código con el que realice estas pruebas lo tienes aquí:
[sociallocker]
<html> <head> </head> <body> <?php require_once('simple_html_dom.php'); //htmlspecialchars_decode() $ureles = array( "http://dailymotion.com" ,"http://youtube.com" ,"https://www.codifica.me" ); $numero=1; foreach ($ureles as $element){ $file1 = $element; if(url_validate($file1)) { $exists = true; } else { $exists = false; } if ($exists){ $html = file_get_html($element)or die('this is not a valid url'); //limpiar urls $eliminarUrls= array("http://", "https://", "www."); $urlsLimpias= str_replace($eliminarUrls, "", $element); //urls limpias echo '<div class="byellow">Sitio ' . $numero . ': <b>' . $urlsLimpias . '</b></div><br>'; foreach( $html->find('title') as $element1){ if (!empty($element1)) { echo $element1->plaintext . '<br>'; } } echo '<br>'; $numero=$numero+1; } } function url_validate($link) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $link); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); //aumentar el tiempo puede sobrecargar el uso del servidor curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_NOBODY, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_MAXREDIRS, 3); //numero de redirecciones que va a seguir $data = curl_exec($ch); curl_close($ch); preg_match_all("/HTTP\/1\.[1|0]\s(\d{3})/",$data,$matches); $code = end($matches[1]); if(!$data) { return(false); } else { if($code==200) { return(true); } elseif($code==404) { return(false); } } } ?> </br> </body> </html> |
[/sociallocker]