Descarga de todo el sitio por enlaces en PHP

06. 11. 2019

Obsah článku

Con relativa frecuencia resuelvo la tarea de descargar todas las páginas de un sitio o dominio, porque luego realizo diversas mediciones con los resultados, o utilizo las páginas para la búsqueda de texto completo.

Una posible solución es utilizar la herramienta ya preparada Xenu, que es muy difícil de instalar en un servidor web (es un programa de Windows), o Wget, que no es compatible en todas partes y crea otra dependencia innecesaria.

Si la tarea es sólo hacer una copia de la página para su posterior visualización, es muy útil el programa HTTrack, que es el que más me gusta, sólo que cuando estamos indagando URLs parametrizadas podemos perder precisión en algunos casos.

Así que empecé a buscar una herramienta que pueda indexar todas las páginas de forma automática directamente en PHP con una configuración avanzada. Finalmente, se convirtió en un proyecto de código abierto.

Baraja WebCrawler

Precisamente para estas necesidades he implementado mi propio paquete Composer WebCrawler, que puede manejar el proceso de indexación de páginas elegantemente por sí mismo, y si me encuentro con un nuevo caso, lo mejoro aún más.

Se instala con el comando Composer:

composer require baraja-core/webcrawler

Y es fácil de usar. Basta con crear una instancia y llamar al método crawl():

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

En la variable $resultado, el resultado completo estará disponible como una instancia de la entidad CrawledResult, que recomiendo estudiar porque contiene mucha información interesante sobre todo el sitio.

Configuración de la oruga

A menudo tenemos que limitar la descarga de páginas de alguna manera, porque de lo contrario probablemente descargaríamos todo Internet.

Para ello se utiliza la entidad Config, a la que se le pasa la configuración como un array (clave-valor) y luego se le pasa al Crawler mediante el constructor.

Por ejemplo:

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

Opciones de configuración:

Clave - Valor por defecto - Valores posibles
followExternalLinks
sleepBetweenRequests
maxHttpRequests
maxCrawlTimeInSeconds
allowedUrls
forbiddenUrls

La expresión regular debe coincidir con toda la URL exactamente como una cadena.

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.