Si estás buscando como poder hacer web scraping con PHP y poder extraer fragmentos de código de una página web remota has llegado al lugar adecuado, te voy a explicar en muy pocos pasos como puedes hacer web scraping en PHP.

¿Qué es el web scraping?

En resumen y problablemente el motivo por el que estés aquí, el web scraping es la técnica utilizada para extraer determinadas partes del contenido de una página web de forma masiva.

Con el web scraping podremos, por ejemplo, extraer todos los titulares y cuerpo de las noticias de un periódico, los resultados deportivos de la jornada, listados de usuarios de una red social,… y todo lo que vuestra imaginación permita.

¿Cuál es el objetivo del web scraping?

Pongamos que tienes en mente crear, no sé, por ejemplo un portal similar a Yahoo!, pero claro, no tienes editores que creen contenidos ni tienes presupuesto evidentemente, pero sabes que el desarrollo aportará a tus lectores un orden personalizado (por ejemplo vas a ordenar noticias según un algoritmo de lo que le gusta y lo que no).

Con el web scraping podrías obtener todo este contenido de forma dinámica de diferentes fuentes, por ejemplo las noticias del periódico 20minutos, los resultados de fútbol de Marca, el tiempo de Wheater.com,etc

En resumen, es como utilizar diferentes API en los casos en los que el portal no permita esa posibilidad.

Eso si, ten en cuenta que el contenido no es tuyo.

Diferencias entre web scraping y un crawler PHP

El web scraping y un crawler pueden ser una diferencia o un complemento el uno del otro.

Por un lado, un crawler se dedica a rastrear todos los enlaces y páginas que están enlazadas desde una de origen, para ello podemos marcar la profundidad, el número máximo de páginas, el tipo de archivos,…

El web scraping extrae fragmentos del contenido de unas páginas determinadas (que podemos haber obtenido mediante un crawler).

Como bien menciono, estas pueden ir por separado o conjuntas según lo necesitemos y la imaginación que puedas tener.

¿Cómo hacer web scraping en PHP?

Para hacer web scraping en PHP necesitaremos tan solo unas líneas de código si el contenido a extraer es muy concreto, debemos tener en cuenta que salvo casos muy concretos, necesitaremos crear un código nuevo para cada portal o al menos varios según CMS, plantillas, etc, ya que se utilizan filtros que no son aptos para el 100% de las páginas.

Lo primero que debemos hacer es elegir si vamos a hacer web scraping con PHP a pelo o en un framework, en mi caso he elegido Laravel 5.8, en este artículo podéis ver como instalar Laravel y voy a realizar un crawler sobre las noticias del periódico 20 minutos, para ello, voy a necesitar Goutte.

Añadimos goutte con composer conectándonos desde SSH a nuestro proyecto

composer require weidner/goutte

Después creamos dentro de un controlador la función noticias con el siguiente código:

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Goutte\Client;


class NoticiasController extends Controller
{

public function noticias(){
        
           
            $page = "https://www.20minutos.es"; // Indicamos la url de donde cogeremos el contenido
           
            $client = new Client();
               
            $crawler = $client->request('GET', "$page");
            
            
            echo "<h1>Noticias de última hora</h1>"; // Mostramos un título de página
               
            $crawler->filter('a.title')->each(function ($title) { // Clase title y etiqueta a
                    
                $showLink = $title->attr('href'); // Recogemos el link
                $showTitle = $title->text(); // Recogemos el título
                
                echo "<h2><a href='$showLink'>$showTitle</a></h2>"; //Mostramos el título con link

                        
            });
    
    }

}

Una vez tenemos esto vamos a la carpeta de rutas de Laravel y añadimos la siguiente línea:

Route::get('/noticias','NoticiasController@noticias');

 

Resultado del web scraping a 20 minutos

El resultado en estos simples pasos será el siguiente, evidentemente lo suyo sería crear en views una página html con su estilo, extraer además la fecha de publicación, la categoría de la noticia, la imagen destacada, su contenido y almacenar todo esto en un base de datos, pero eso lo dejaré más a vuestra imaginación o si me lo pedís a una nueva publicación:

¿Os ha gustado? ¿Os ha parecido simple? Espero vuestros comentarios.

Web scrapping a 20 minutos

Web scraping a 20 minutos