WEB SCRAPING

¿Que es?

“Web scraping es una técnica utilizada mediante programas de software para extraer información de sitios web. Usualmente, estos programas simulan la navegación de un humano en la World Wide Web ya sea utilizando el protocolo HTTP manualmente, o incrustando un navegador en una aplicación.

El web scraping está muy relacionado con la indexación de la web, la cual indexa la información de la web utilizando un robot y es una técnica universal adoptada por la mayoría de los motores de búsqueda. Sin embargo, el web scraping se enfoca más en la transformación de datos sin estructura en la web (como el formato HTML) en datos estructurados que pueden ser almacenados y analizados en una base de datos central, en una hoja de cálculo o en alguna otra fuente de almacenamiento. El término web scraping también está relacionado con la automatización de tareas en la Web, la cual simula la navegación de un humano utilizando un software de computadora. Alguno de los usos del web scraping son la comparación de precios en tiendas, la monitorización de datos relacionados con el clima de cierta región, la detección de cambios en sitios webs y la integración de datos en sitios webs. También es utilizado para obtener información relevante de un sitio a través de los rich snippets.

En los últimos años el web scraping se ha convertido en una técnica muy utilizada dentro del sector del posicionamiento web gracias a su capacidad de generar grandes cantidades de datos para crear contenidos de calidad.”Definición de Wikipedia–> https://es.wikipedia.org/wiki/Web_scraping

Se hace para recoger información rastreando centenares de webs para extraer tan solo la información que necesitamos. Por ejemplo para marketing de contenidos, si tenemos una web que muestra resultados deportivos de todo el mundo para conseguir esa información debemos llevar un mantenimiento de revisión de todas y cada una de las páginas que nos ofrecen esos datos oficiales para crear nuestra propia base de datos para crear por ejemplo datos estadísticos.

Ámbito legal del web scraping

El último e importante factor a tener en cuenta son las implicaciones legales.

Cosas que has de tener en cuenta antes de empezar un proyecto de web scraping son: la legalidad vigente en el país de origen, las condiciones legales del sitio web, si podrías llegar a violar los derechos de autor, de propiedad intelectual o de uso de marca registrada, si el usar los datos podría considerarse como competencia desleal (imitación, publicidad comparativa, denigración de la reputación u otras lesiones de derechos, violación de secretos, …), derecho ‘sui generis‘, etc.

Si no vas a hacer un uso público de los datos scrapeados, es decir, es solo para ‘consumo propio’, scrapear un sitio web será tan legal como pueda serlo acceder a sus datos con un navegador web.

Consulta siempre los “Términos de Uso” y la página de “Aviso legal” para tener toda la información disponible.

Para empezar este tutorial, lo primero que tenemos que hacer es descargarnos la librería de php que vamos a emplear para el ejemplo que se llama “Simple HTML DOM”,  y se puede descargar en–> http://simplehtmldom.sourceforge.net/

Una vez descargado lo descomprimimos, y añadimos esa carpeta a nuestro proyecto.

Para empezar debemos crear nuestra estructura sobre la cual vamos a trabajar guardándola con extensión .php

<!doctype html>

<html lang=”es”>

    <head>

        <meta charset=”utf-8″>

            <title>Parsear datos con HTML DOM</title>

    </head>

    <body>

     </body>

</html>

Realizado esto lo siguiente sería introducir la librería que hemos descargado e introducido en la carpeta del proyecto.

Nosotros guardamos la librería en la carpeta plugins y nuestro código quedaría—>

<!doctype html>

<html lang=”es”>

    <head>

        <meta charset=”utf-8″>

            <title>Parsear datos con HTML DOM</title>

    </head>

    <body>

<?php

            require ‘plugins/simplehtmldom_1_5/simple_html_dom.php’;

                  ?>

     </body>

</html>

Y ahora que ya tenemos la librería ya podemos empezar a escribir el código que nos ayudará a sacar la información que queremos sacar.

1º Creamos una variable para almacenar la página que queremos ver sus datos.

$pagina= ‘http://www.ejemplo.com/’;

donde debemos cambiar por la pagina que nosotros queramos.

Y ahora cogemos una función que nos ofrece la librería que hemos instalado que es file_get_html. Para indicarle cual es la página sobre la que vamos a trabajar, pasándole la variable anterior.

$html = file_get_html($pagina);

Para este ejemplo queremos ver la cantidad de imágenes que tenga la página que le indicamos y que nos muestre en pantalla la ruta de la imagen y nos la muestre en pantalla. Le pediremos que nos enseñe todo lo que contenga la etiqueta <img>

Y también le pediremos que nos muestre las rutas de todos los enlaces que tenga esa página. Y aquí solicitaremos que nos muestre el contenido href de las etiquetas <a>

Creamos un foreach para que nos recorra todas las etiquetas img, y nos muestre sus rutas y nos la imprima en pantalla. A la imagen le decimos que nos muestre el contenido del src que tiene.

 

// Buscar imágenes

                        foreach($html->find(‘img’) as $element) {

                               echo ‘<span class=”flow-text”>’.$element->src . ‘</span><br>’;

                                echo ‘<img src=”‘.$element->src .'”/><br>’;

                                echo ‘<hr/>’;

                                $contador1++;

                        }

Y hacemos lo mismo para los link para saber que dirección tienen, al link le pedimos que nos muestre lo que contiene dentro del Href.

// Buscar todos los links

                        foreach($html->find(‘a’) as $element) {

                                echo ‘<span class=”flow-text”>’.$element->href  . ‘</span><br>’;

                                $contador2++;

                        }

<code>

Para las imágenes si también quisiéramos almacenarlas en nuestro servidor local tan solo bastaría con utilizar el file_get_contents (Transmite un fichero entero a una cadena)y file_put_contents(Escribe una cadena a un fichero).

Empezamos  guardando la imagen en una variable

$imagenGuardar=file_get_contents($element->attr[‘src’]);

Y luego le indicamos con file_put_contents(“aqui la ruta de la imagen”, y la variable creada anteriormente). Tiene que existir la ruta que se le pasa para guardar en nuestro caso sería “imgSaves” quedando así en nuestro código

 

file_put_contents(“./imgSaves/”.$counter.”.jpg”, $imagenGuardar);

 

A continuación os mostramos un video del funcionamiento del ejemplo.

CODIGO COMPLETO DEL EJEMPLO

<html lang=”es”>

    <head>

        <meta charset=”utf-8″>

            <title>Parsear datos con HTML DOM</title>

    </head>

    <body>

<?php

            require ‘plugins/simplehtmldom_1_5/simple_html_dom.php’;

// Crear DOM

                        $pagina= ‘http://www.ejemplo.com/’;

                        $html = file_get_html($pagina);

                echo “<h5>Imagenes</h5><br>”;

                        // Buscar imágenes

                        foreach($html->find(‘img’) as $element) {

                               echo ‘<span class=”flow-text”>’.$element->src . ‘</span><br>’;

                                echo ‘<img src=”‘.$element->src .’”/><br>’;

$imagenGuardar=file_get_contents($element->attr[‘src’]);

file_put_contents(“./imgSaves/”.$counter.”.jpg”, $imagenGuardar);

                                echo ‘<hr/>’;

                                $contador1++;

                        }

                 

                        / // Busca todos los link

                echo “<h5>Links</h5><br>”;

                

                        foreach($html->find(‘a’) as $element) {

                                echo ‘<span class=”flow-text”>’.$element->href  . ‘</span><br>’;

                                $contador2++;

                        }

                echo “<br/>Cantidad de imagenes–> “.$contador1.”<br/>”;

                echo “Cantidad de links–> “.$contador2.”<br/>”;

        ?>

    </body>

</html>

 

Video

Autor/a: Iago Glz.