24 octubre, 2018
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
Suscríbete a nuestro canal en Youtube
SuscríbirseEl 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.
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.
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
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 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 25555 veces
Curso MVC PHP MySQL desarrollo de una página web administrable
Descarga del código fuente
USD 10.00
© Todos los derechos reservados Codea App | ...de frente al código!!! | 2020 - 2023