volete aiutarci? Ecco le opzioni disponibili:","Crunchbase","Chi siamo","Grazie a tutti per l'incredibile supporto!","Collegamenti rapidi","Programma di affiliazione","Premio","ProxyScrape prova premium","Controllore di proxy online","Tipi di proxy","Paesi proxy","Casi d'uso del proxy","Importante","Informativa sui cookie","Dichiarazione di non responsabilità","Informativa sulla privacy","Termini e condizioni","Media sociali","Facebook","LinkedIn","Twitter","Quora","Telegramma","Discordia","\n © Copyright 2025 - Thib BV | Brugstraat 18 | 2812 Mechelen | Belgio | IVA BE 0749 716 760\n"]}
Il web scraping è diventato uno strumento essenziale per gli sviluppatori e gli analisti di dati che devono estrarre e analizzare informazioni dal web. Che si tratti di monitorare i prezzi dei prodotti, di raccogliere dati per la ricerca o di costruire una dashboard personalizzata, il web scraping offre infinite possibilità.
Se siete appassionati di PHP, Goutte è una libreria fantastica da considerare per le vostre esigenze di scraping del web. Goutte è leggera, facile da usare e potente, combinando le capacità del client HTTP di Guzzle con DomCrawler di Symfony per uno scraping del web fluido ed efficiente.
Questa guida vi accompagnerà attraverso le basi del web scraping con PHP utilizzando Goutte, dall'installazione e il primo script alle tecniche avanzate come la gestione dei moduli e la paginazione.
Goutte ha guadagnato popolarità tra gli sviluppatori per una serie di motivi, rendendola una delle librerie di scraping più utilizzate per PHP:
Sia che siate alle prime armi con il PHP sia che siate sviluppatori esperti, Goutte rappresenta un equilibrio ideale tra semplicità e potenza.
Prima di lanciarsi nella codifica, assicuratevi che siano presenti i prerequisiti necessari:
Per installare Goutte, basta eseguire il seguente comando nel terminale:
compositore richiede fabpot/goutte
Una volta installata, verificare che la libreria sia accessibile richiedendo l'autoloader di Composer nel progetto:
richiedere 'vendor/autoload.php';
Ora siete pronti per iniziare a raschiare!
Cominciamo con un semplice esempio. Scaveremo il titolo di una pagina web utilizzando Goutte. Di seguito è riportato lo script di base:
<?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";
});
?>
Uscita:
Titolo della pagina: Tutti i prodotti | Libri da scartare - Sandbox
Primi 5 titoli di libri:
- Una luce in soffitta
- Il velluto che cola
- Soumission
- Oggetti taglienti
- Sapiens: Breve storia dell'umanità
È semplicissimo! Con poche righe di codice, è possibile richiamare e visualizzare i dati di titolo
di qualsiasi pagina web.
Una volta appreso come recuperare una pagina web, il passo successivo è l'estrazione di dati specifici, come link o contenuti, da elementi HTML specifici.
Il seguente script estrae il file href
di tutti gli attributi <a>
su una pagina 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";
}
Questo restituirà tutti i collegamenti ipertestuali presenti nella pagina.
Goutte semplifica l'estrazione o il parsing dei dati da HTML utilizzando classe
o ID
selettori. Per questo esempio, utilizzeremo il selettore Libri da raschiare. In particolare, si cercheranno informazioni su ogni libro, poiché tutti condividono la stessa classe, prodotto_pod
. Ecco come appare sul sito web:
Ecco un esempio di come si può ottenere questo risultato utilizzando 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";
}
Esaminiamo ora come navigare o impaginare tra le pagine. Nella pagina di esempio che stiamo utilizzando, c'è un pulsante "Next" che consente la paginazione alla pagina successiva. Sfrutteremo questo pulsante per implementare la paginazione.
Per prima cosa, localizzeremo il pulsante utilizzando il suo classe
che ha come valore prossimo
. All'interno di questo elemento, c'è un <a>
contenente l'URL della pagina successiva. Estraendo questo URL, possiamo usarlo per inviare una nuova richiesta e passare senza problemi alla pagina successiva.Ecco l'aspetto e la struttura HTML del tag prossimo
sulla pagina.
Ecco come si presenta il codice per ottenere questo risultato:
<?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 questo approccio, è possibile automatizzare la navigazione tra le pagine e continuare lo scraping dei dati.
Goutte è anche in grado di gestire i moduli. Per dimostrare questa funzionalità, utilizzeremo questo sito web, che presenta un singolo campo di input, come mostrato nell'immagine seguente:
Ecco come si presenta il codice per l'invio di questo modulo:
<?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";
}
Questo script compila un campo del modulo chiamato q
con il valore scraping del web
e inviarlo. Da qui è possibile estrarre il contenuto dalla pagina dei risultati della ricerca, proprio come negli esempi precedenti.
Aggiungete sempre una gestione degli errori per gestire situazioni impreviste, come una connessione di rete fallita o URL inesistenti.
<?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();
}
}
Il web scraping deve sempre essere eseguito in modo etico e responsabile. Il file `robots.txt` è un semplice file di testo utilizzato dai siti web per comunicare con i web crawler, indicando quali parti del sito possono o non possono essere accessibili. Prima di effettuare lo scraping, è importante controllare il file `robots.txt` per assicurarsi di seguire le regole del sito e rispettarne i termini. Ignorare queste linee guida può portare a problemi legali ed etici, quindi fate sempre di questa fase una priorità nel vostro processo di scraping.
Per saperne di più robots.txt
qui.
Siate cortesi ed evitate di inviare un numero eccessivo di richieste in un breve periodo di tempo, in quanto ciò potrebbe sovraccaricare il server e compromettere le prestazioni per gli altri utenti. È buona norma prevedere un breve intervallo di tempo tra una richiesta e l'altra per ridurre al minimo il carico sul server e garantire che possa gestire il traffico in modo efficiente. L'adozione di queste misure non solo contribuisce a mantenere la stabilità del server, ma dimostra anche un uso responsabile e attento delle risorse condivise.
sleep(1); // Attendere 1 secondo tra una richiesta e l'altra
Il web scraping è uno strumento potente per raccogliere dati in modo efficiente, ma richiede un approccio responsabile e ponderato per evitare le insidie più comuni e garantire un uso etico. Aderire alle migliori pratiche, come il rispetto dei termini di servizio dei siti web, l'implementazione di ritardi appropriati tra le richieste e l'utilizzo di strumenti in grado di gestire contenuti dinamici, consente di creare uno scraper che funzioni in modo efficace riducendo al minimo l'impatto sui server. Inoltre, la verifica dei certificati HTTPS e le considerazioni sulla sicurezza proteggeranno il vostro scraper e i dati che raccoglie. Con una pianificazione e un'esecuzione adeguate, lo scraping del web può diventare una risorsa inestimabile per la ricerca, l'analisi e l'innovazione.