? Estas son sus opciones:","Crunchbase","Quiénes somos","Gracias a todos por el increíble apoyo.","Enlaces rápidos","Programa de afiliados","Premium","ProxyScrape prueba premium","Tipos de proxy","Países sustitutos","Casos de uso de proxy","Importante","Política de cookies","Descargo de responsabilidad","Política de privacidad","Condiciones generales","Redes sociales","Facebook","LinkedIn","Twitter","Quora","Telegrama","Discordia","\n Copyright 2025 - Thib BV | Brugstraat 18 | 2812 Mechelen | Bélgica | IVA BE 0749 716 760\n"]}
El web scraping se ha convertido en una herramienta esencial para desarrolladores y analistas de datos que necesitan extraer y analizar información de la web. Ya sea para hacer un seguimiento de los precios de un producto, recopilar datos para una investigación o crear un panel de control personalizado, el web scraping ofrece infinitas posibilidades.
Si eres un entusiasta de PHP, Goutte es una fantástica librería a tener en cuenta para tus necesidades de web scraping. Goutte es ligera, fácil de usar y potente, combinando las capacidades del cliente HTTP de Guzzle con DomCrawler de Symfony para un raspado web fluido y eficiente.
Esta guía le llevará a través de los fundamentos del web scraping con PHP usando Goutte-desdela instalación y su primer script hasta técnicas avanzadas como el manejo de formularios y la paginación.
Goutte ha ganado popularidad entre los desarrolladores por varias razones, convirtiéndose en una de las bibliotecas de scraping para PHP más utilizadas:
Tanto si eres nuevo en PHP como si eres un desarrollador experimentado, Goutte consigue un equilibrio ideal entre sencillez y potencia.
Antes de lanzarse a la codificación, asegúrese de que se cumplen los requisitos previos necesarios:
Para instalar Goutte, simplemente ejecute el siguiente comando en su terminal:
composer require fabpot/goutte
Una vez instalada, verifica que la librería es accesible requiriendo el autoloader de Composer en tu proyecto:
require 'vendor/autoload.php';
Ya está listo para empezar a raspar.
Empecemos con un ejemplo sencillo. Vamos a scrapear el título de una página web usando Goutte. Abajo está el script básico:
<?php
require 'vendor/autoload.php';
use Goutte\Client;
// Initialize Goutte Client
$client = new Client();
// Send a GET request to the target URL
$crawler = $client->request('GET', 'https://books.toscrape.com/');
// Extract the title of the page
$title = $crawler->filter('title')->text();
echo "Page Title: $title\n";
// Extract the titles of the first 5 books
echo "First 5 Book Titles:\n";
$crawler->filter('.product_pod h3 a')->slice(0, 5)->each(function ($node) {
echo "- " . $node->attr('title') . "\n";
});
?>
Salida:
Título de la página: Todos los productos | Libros para raspar - Sandbox
Primeros 5 títulos de libros:
- Una luz en el ático
- Tipping the Velvet
- Soumission
- Sharp Objects
- Sapiens: Breve historia de la humanidad
Así de fácil. Con sólo unas pocas líneas de código, puede obtener y mostrar el archivo título
de cualquier página web.
Una vez que haya aprendido a obtener una página web, el siguiente paso es extraer datos específicos, como enlaces o contenido de elementos HTML concretos.
El siguiente script extrae el href
atributos de todos <a>
en una página web:
<?php
require 'vendor/autoload.php';
use Goutte\Client;
$client = new Client();
$crawler = $client->request('GET', 'https://books.toscrape.com/');
// Extract all <a> tags
$links = $crawler->filter('a')->each(function ($node) {
return $node->attr('href');
});
// Print all extracted links
foreach ($links as $link) {
echo $link . "\n";
}
Esto devolverá todos los hipervínculos presentes en la página.
Goutte facilita la extracción o el análisis sintáctico de datos de HTML utilizando clase
o ID
selectores. Para este ejemplo, utilizaremos el selector Sitio web de Books to Scrape. En concreto, rascaremos información sobre cada libro, ya que todos comparten la misma clase, producto_pod
. Así es como aparece en el sitio web:
He aquí un ejemplo de cómo conseguirlo con Goutte:
<?php
require 'vendor/autoload.php';
use Goutte\Client;
$client = new Client();
$crawler = $client->request('GET', 'https://books.toscrape.com/');
// Extract all <a> tags
$links = $crawler->filter('a')->each(function ($node) {
return $node->attr('href');
});
// Print all extracted links
foreach ($links as $link) {
echo $link . "\n";
}
// Extract elements with class 'product_pod'
$products = $crawler->filter('.product_pod')->each(function ($node) {
return $node->text();
});
// Print all extracted product details
foreach ($products as $product) {
echo $product . "\n";
}
Ahora, vamos a explorar cómo navegar o paginar entre páginas. En la página de ejemplo que estamos utilizando, hay un botón "Siguiente" que permite la paginación a la página siguiente. Aprovecharemos este botón para implementar la paginación.
En primer lugar, localizaremos el botón utilizando su etiqueta clase
que tiene como valor siguiente
. Dentro de este elemento, hay un <a>
que contiene la URL de la página siguiente. Extrayendo esta URL, podemos utilizarla para enviar una nueva petición y pasar sin problemas a la página siguiente.He aquí el aspecto y la estructura HTML de la etiqueta siguiente
de la página.
Este es el aspecto del código que lo consigue:
<?php
require 'vendor/autoload.php';
use Goutte\Client;
$client = new Client();
$crawler = $client->request('GET', 'https://books.toscrape.com/');
// Handle pagination using the 'next' button
while ($crawler->filter('li.next a')->count() > 0) {
$nextLink = $crawler->filter('li.next a')->attr('href');
$crawler = $client->request('GET', 'https://books.toscrape.com/catalogue/' . $nextLink);
// Extract and print the current page URL
echo "Currently on: " . $crawler->getUri() . "\n";
}
Con este enfoque, se puede automatizar la navegación entre páginas y seguir raspando datos.
Goutte también es capaz de manejar formularios. Para demostrar esta funcionalidad, utilizaremos este sitio web, que tiene un único campo de entrada, como se muestra en la imagen siguiente:
Este es el aspecto del código para enviar este formulario:
<?php
require 'vendor/autoload.php';
use Goutte\Client;
$client = new Client();
$crawler = $client->request('GET', 'https://www.scrapethissite.com/pages/forms/');
// Submit the search form with a query
$form = $crawler->selectButton('Search')->form();
$form['q'] = 'Canada';
$crawler = $client->submit($form);
// Extract and print the results
$results = $crawler->filter('.team')->each(function ($node) {
return $node->text();
});
foreach ($results as $result) {
echo $result . "\n";
}
Este script rellena un campo de formulario llamado q
con el valor raspado web
y lo envía. A partir de aquí, puede extraer el contenido de la página de resultados de búsqueda como en los ejemplos anteriores.
Añada siempre un tratamiento de errores para gestionar situaciones inesperadas, como una conexión de red fallida o URL inexistentes.
<?php
require 'vendor/autoload.php';
use Goutte\Client;
$client = new Client();
try {
$crawler = $client->request('GET', 'https://invalid-url-example.com');
echo "Page title: " . $crawler->filter('title')->text();
} catch (Exception $e) {
echo "An error occurred: " . $e->getMessage();
}
}
El web scraping debe realizarse siempre de forma ética y responsable. El archivo `robots.txt` es un sencillo archivo de texto que utilizan los sitios web para comunicarse con los rastreadores web, indicando a qué partes del sitio se puede o no acceder. Antes de hacer scraping, es importante comprobar el archivo `robots.txt` para asegurarse de que se siguen las normas del sitio y se respetan sus términos. Ignorar estas directrices puede dar lugar a problemas legales y éticos, por lo que siempre hay que dar prioridad a este paso en el proceso de scraping.
Más información robots.txt
aquí.
Sé cortés y evita enviar demasiadas peticiones en un corto periodo de tiempo, ya que esto puede saturar el servidor y perturbar su rendimiento para otros usuarios. Es una buena práctica incluir un pequeño retraso entre cada petición para minimizar la carga del servidor y asegurar que puede manejar el tráfico eficientemente. Tomar estas medidas no sólo ayuda a mantener la estabilidad del servidor, sino que también demuestra un uso responsable y considerado de los recursos compartidos.
sleep(1); // Esperar 1 segundo entre peticiones
El scraping web es una potente herramienta para recopilar datos de forma eficaz, pero requiere un enfoque responsable y reflexivo para evitar los errores más comunes y garantizar un uso ético. Si se adhiere a las mejores prácticas, como respetar los términos de servicio de los sitios web, implementar retrasos apropiados entre las solicitudes y utilizar herramientas capaces de manejar contenido dinámico, puede crear un scraper que funcione eficazmente y minimice el impacto en los servidores. Además, verificar los certificados HTTPS y tener en cuenta las consideraciones de seguridad protegerá su scraper y los datos que recopile. Con una planificación y ejecución adecuadas, el raspado web puede convertirse en un recurso inestimable para la investigación, el análisis y la innovación.