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 26432 veces | 12 usuarios

Descarga del código fuente PHP de Programar un scrapper web en PHP

180 descargas

Para descargar el código crea una cuenta

Crear cuenta

Compartir link del tutorial con tus amigos


MVC PHP y MySql Página Web

USD 10.00

Descarga del código fuente

MVC PHP y MySql Página Web

Más tutoriales de PHP

Codea Applications

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

© Copyright Codea::App Cursos de Programación Online | LATAM | 2020 - 2024