Inicio » Blog » PHP

24 octubre, 2018

Programar un scrapper web en 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

Programar un scrapper web en PHP

Suscríbete a nuestro canal en Youtube

Suscríbirse

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. 

¿Qué es Scrapping  o Scrapper?

Es una técnica para extraer información de una página web usando programas o scripts web que escanean la estructura HTML del sitio web. Realizar scrapping requiere de conocimientos avanzados o medianamente avanzados en programación y análisis de estructuras HTML.

¿Cómo hacer Scrapping en PHP de una página web?

En esta ocación utilizaremos la librería CURL soportada por PHP.  CURL es una biblioteca creada por Daniel Stenberg que permite comunicarse y comunicarse con diferentes tipos de servidores y diferentes tipos de protocolos.

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!!

Código completo para scrappear una página web

Código completo en PHP para extraer el contenido de una web

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>SCRAPPING WEB</title>
</head>
<body>
<?php
if(isset($_GET['btn'])):
    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;
    }
    function limpiarString($String){ 
        $String = str_replace(array("|","|","[","^","´","`","¨","~","]","'","#","{","}",".",""),"",$String);
        return $String;
    }
    $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;
else:
?>
<form>
	<input type="url" name="url" placeholder="Ej. http://empresa.com" required>
	<button name="btn" type="submit">SCRAPEAR</button>		
</form>
<?php endif; ?>
</body>
</html>

 


Leido 24968 veces

Descarga el código fuente PHP

Recurso descargado 176 veces

USD

Descargar Código Fuente

Compartir link del tutorial con tus amigos


MVC PHP y MySql Página Web MVC PHP y MySql Página Web

Curso MVC PHP MySQL desarrollo de una página web administrable

Descarga del código fuente

USD 7.00

Aprende más sobre PHP

Cursos de programación

Codea Codea App

México, Colombia, España, Venezuela, Argentina, Bolivia, Perú

© Todos los derechos reservados Codea App | ...de frente al código!!! | 2020 - 2023