# PHP Scraper: Devolviendo la simplicidad al scraping y al crawling

PHP Scraper: Devolviendo la simplicidad al scraping y al crawling

de Peter Thaleikis (opens new window)

El raspado de la web usando PHP puede hacerse más fácilmente. Esta es una envoltura de opinión alrededor de algunas grandes bibliotecas de PHP para hacer el acceso a la web más fácil.

Los ejemplos cuentan la historia mucho mejor. Echa un vistazo.

Nota

Este sitio web de documentación en español es WIP. Por favor, eleve un PR en GitHub si encuentra algún error. Gracias!

# La idea 💡️

Acceder a sitios web y recoger información básica de la web es demasiado complejo. Esta envoltura alrededor de Goutte (opens new window) lo hace más fácil. Te ahorra el uso de XPath y demás, dándote acceso directo a todo lo que necesitas. Web scraping con PHP reimaginado.

# Apoyos 💪️

Este proyecto está patrocinado por:

¿Quieres patrocinar este proyecto? Escríbeme (opens new window).

# Ejemplos

Aquí hay algunos ejemplos de lo que la biblioteca de raspado web puede hacer en este momento:

# Scrape Meta Information:

$web = new \spekulatius\phpscraper;

/**
 * Navegue hasta la página de pruebas. Contiene:
 *
 * <meta name="author" content="Lorem ipsum" />
 * <meta name="keywords" content="Lorem,ipsum,dolor" />
 * <meta name="description" content="Lorem ipsum dolor etc." />
 * <meta name="image" content="https://test-pages.phpscraper.de/assets/cat.jpg" />
 */
$web->go('https://test-pages.phpscraper.de/meta/lorem-ipsum.html');

// Obtener la información:
echo $web->author;          // "Lorem ipsum"
echo $web->description;     // "Lorem ipsum dolor etc."
echo $web->image;           // "https://test-pages.phpscraper.de/assets/cat.jpg"

La mayor parte de la información se puede acceder directamente, ya sea como cadena o como matriz.

# Raspado de contenidos, como imágenes:

$web = new \spekulatius\phpscraper;

/**
 * Navegue hasta la página de prueba. Esta página contiene dos imágenes:
 *
 * <img src="https://test-pages.phpscraper.de/assets/cat.jpg" alt="absolute path">
 * <img src="/assets/cat.jpg" alt="relative path">
 */
$web->go('https://test-pages.phpscraper.de/meta/lorem-ipsum.html');

var_dump($web->imagesWithDetails);
/**
 * [
 *     'url' => 'https://test-pages.phpscraper.de/assets/cat.jpg',
 *     'alt' => 'absolute path',
 *     'width' => null,
 *     'height' => null,
 * ],
 * [
 *     'url' => 'https://test-pages.phpscraper.de/assets/cat.jpg',
 *     'alt' => 'relative path',
 *     'width' => null,
 *     'height' => null,
 * ]
 */

Alguna información opcionalmente se devuelve como un array con detalles. Para este ejemplo, una simple lista de imágenes está disponible usando $web->images también. Esto debería facilitar el raspado de la web.

Se puede encontrar más código de ejemplo en los ejemplos y pruebas.

# Instalación

La instalación suele realizarse mediante Composer (opens new window).

# Instalación con Composer

composer require spekulatius/phpscraper

Una vez completada la instalación, el paquete será recogido por el autocargador de Composer. En las aplicaciones y frameworks típicos de PHP como Laravel o Symfony ya puedes empezar a hacer scraping. Ahora puedes usar cualquiera de los ejemplos anotados o los ejemplos en la carpeta tests/.

# Uso en proyectos VanillaPHP

Si estás construyendo un proyecto VanillaPHP, necesitarás incluir el autoloader en tu script en la parte superior de tu script PHP:

require 'vendor/autoload.php';

Si estás usando un framework como Laravel, Symfony, Laminas, Phalcon o CakePHP, no necesitarás este paso. El autoloader se incluye automáticamente.

# ¿Has encontrado un error y lo has arreglado? ¡Impresionante!

Antes de empezar, familiarícese con las directrices de contribución. Si tiene alguna pregunta, no dude en ponerse en contacto con nosotros.

# Pruebas: Asegurarse de que funciona.

El código está cubierto a grandes rasgos con pruebas de extremo a extremo. Para ello, se alojan páginas web sencillas en https://test-pages.phpscraper.de/, cargado y analizado usando PHPUnit (opens new window). Estas pruebas también son adecuadas como ejemplos - véasetests/!

Dicho esto, es probable que haya casos límite que no funcionen y puedan causar problemas. Si encuentras uno, por favor, levanta un bug en GitHub.