Programar un scraper web en PHP

Cómo hacer un scraping de cualquier página web con PHP

Escanear una web es fácil con la clase curl de PHP, extraeremos los metas title, description y keywords, tags de posicionamiento web de varias páginas web


El scrapeo o scrapping de contenidos en páginas es algo fascinante, talvez por que es la forma que Google escanea y extrae información de la páginas web para guardarlas en sus servidores, no si antes clasificarlas e indexarlas, obviamente para ello utiliza diferentes algoritmos de búsqueda y clasificación. 

Lo que intentaremos hacer es crear un pequeño aplicativo que scrapea cualquier página web, claro está si esta no tiene restricciones y si ésta es accesible por la pequeña araña que programaremos, el código es bastante sencillo, indicarles que hay librerías mucho mas sofisticadas y con mayor número de funcionalidades.

Empezaremos creando un archivo index.php donde colocaremos un formulario get en html con un campo de tipo text y un boton submit, veamos el código:

<form>
		<input type="url" name="url" placeholder="Ej. http://www.empresa.com" required>
		<button name="btn" type="submit">SCRAPEAR</button>		
</form>

Implementaremos dos funciones, la primera file_get_contents_curl($url), esta función se conectará mediante la clase curl y nos retornará el contenido de la web a través de la url:

function file_get_contents_curl($url){
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_HEADER, 0);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
      $data = curl_exec($ch);
      curl_close($ch);
      return $data;
}

La segunda función limpiará una cadena de caracteres que no deseamos:

function limpiarString($String){ 
     $String = str_replace(array("|","|","[","^","´","`","¨","~","]","'","#","{","}",".",""),"",$String);
     return $String;
}

Siguiendo con la funcionalidad de la aplicación: una vez enviada la url con el formulario debemos parsear el contenido para poder extraer los metas

  • Title
  • Description
  • Keywords

Estos metas permiten que su página web sea indexable de forma óptima y asi aparecer en los resultados de búsqueda de Google y cualquier otro buscador como Yahoo, Bing, Ask, Altalaweb, etc.

 $url 	=	$_GET['url'];
	$html 	= 	file_get_contents_curl($url);                    
    $doc 	= 	new DOMDocument();
    @$doc->loadHTML($html);
    $nodes 	= 	$doc->getElementsByTagName('title');
    $title 	= 	limpiarString($nodes->item(0)->nodeValue);
    $metas 	= 	$doc->getElementsByTagName('meta');
    for ($i = 0; $i < $metas->length; $i++):
		$meta = $metas->item($i);
        if($meta->getAttribute('name') == 'description')
        	$description = limpiarString($meta->getAttribute('content'));
        if($meta->getAttribute('name') == 'keywords')
        	$keywords = limpiarString($meta->getAttribute('content'));
    endfor;
	echo "TITLE :<br>".$title."<br>";
    echo "DESCRIPTION :<br>".$description."<br>";
    echo "KEYWORDS :<br>".$keywords;

Y listo, hasta aquí ya podemos hacer scrapping de cualquier página web!!

 


Visitado 73 veces | Publicado hace 9 meses

CURSO ANDROID BÁSICO