Scaricare l'intero sito tramite link in PHP

06. 11. 2019

Obsah článku

Relativamente spesso risolvo il compito di scaricare tutte le pagine di un sito o di un dominio, perché poi eseguo varie misurazioni con i risultati, o uso le pagine per la ricerca full-text.

Una possibile soluzione è usare lo strumento già pronto Xenu, che è molto difficile da installare su un server web (è un programma Windows), o Wget, che non è supportato ovunque e crea un'altra dipendenza non necessaria.

Se il compito è solo quello di fare una copia della pagina per la visualizzazione successiva, è molto utile il programma HTTrack, che mi piace di più, solo quando si tratta di URL parametrizzati si può perdere precisione in alcuni casi.

Così ho iniziato a cercare uno strumento che possa indicizzare tutte le pagine automaticamente direttamente in PHP con una configurazione avanzata. Alla fine, questo è diventato un progetto opensource.

Baraja WebCrawler

Proprio per queste esigenze ho implementato il mio pacchetto Composer WebCrawler, che può gestire il processo di indicizzazione delle pagine in modo elegante da solo, e se mi imbatto in un nuovo caso, lo miglioro ulteriormente.

Si installa con il comando Composer:

composer require baraja-core/webcrawler

Ed è facile da usare. Basta creare un'istanza e chiamare il metodo crawl():

$crawler = new \Baraja\WebCrawler\Crawler;
$result = $crawler->crawl('https://example.com');

Nella variabile $result, il risultato completo sarà disponibile come istanza dell'entità CrawledResult, che consiglio di studiare perché contiene molte informazioni interessanti su tutto il sito.

Impostazioni del crawler

Spesso abbiamo bisogno di limitare il download delle pagine in qualche modo, perché altrimenti probabilmente scaricheremmo tutto internet.

Questo viene fatto usando l'entità Config, a cui viene passata la configurazione come array (chiave-valore) e poi passata al Crawler dal costruttore.

Per esempio:

$crawler = new \Baraja\WebCrawler\Crawler(
new \Baraja\WebCrawler\Config([
// chiave => valore
])
);

Opzioni di impostazione:

Chiave Valore predefinito Valori possibili
followExternalLinks false Bool: Resta solo all'interno dello stesso dominio? Può indicizzare anche i link esterni?
sleepBetweenRequests 1000 Int: tempo di attesa tra il download di ogni pagina in millisecondi.
maxHttpRequests 1000000 Int: Quanti URL massimi scaricati?
maxCrawlTimeInSeconds 30 Int: Quanto dura il download massimo in secondi?
allowedUrls ['.+'] String[]: array di formati URL consentiti come espressioni regolari.
forbiddenUrls [''] String[]: array di formati URL proibiti come espressioni regolari.

L'espressione regolare deve corrispondere all'intero URL esattamente come una stringa.

Jan Barášek   Více o autorovi

Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.

Rád vám pomůžu:

Související články

1.