Hoy estare hablando de algo muy común, Web Scraping. Dependiendo de sus necesidades o de las necesidades de un cliente, pueden surgir situaciones en las que necesite extraer datos de una página web.
¿Qué es el Web Scraping?
Según WebHarvy — Web Scraping (también llamado Screen Scraping, Web Data Extraction, Web Harvesting, etc.) es una técnica empleada para extraer grandes cantidades de datos de sitios web. En su forma más simple, el web scraping es obtener el contenido de una página web a través de un script. Tuve la curiosidad de obtener datos de un sitio utilizando PHP, así que busqué artículos sobre el scraping web en PHP y me enteré de que había pocos y la mayoría de ellos estaban bastante desactualizados.
Sin embargo, en mi investigación, me encontré con Goutte; una (maravillosa) librería de screen scraping y web crawling para PHP. En su esencia, Goutte es una envoltura alrededor de tres de los componentes de Symfony; BrowserKit, CssSelector y DomCrawler. Es importante para nosotros entender qué hace cada uno de estos componentes, ya que nos ayuda a comprender cuán poderoso es Goutte.
BrowserKit
En pocas palabras, el componente BrowserKit simula el comportamiento de un navegador real. Es el elemento fundamental de Goutte.
DomCrawler
El componente DomCrawler facilita la navegación del DOM (Document Object Model).
$crawler = $crawler->filter('body > p');
También podemos atravesar nodos en el DOM usando algunos de los métodos que proporciona. Por ejemplo, si queremos obtener el primer párrafo en el cuerpo de la página, podemos hacerlo:
$crawler->filter('body > p')->eq(0);
El método eq()
está indexado a cero y toma un número que especifica la posición del elemento al que queremos acceder.
Hay otros métodos como siblings()
, first()
, last()
, etc.
CssSelector
El CssSelector es un maravilloso componente que nos permite seleccionar elementos a través de sus selectores CSS. Esto lo hace convirtiendo los selectores CSS a sus equivalentes XPath. Por ejemplo, si queremos seleccionar un elemento con una clase llamada .fire
, podemos hacerlo:
$crawler->filter('.fire');
El componente CssSelector es tan sorprendente que incluso soporta CSS. El ejemplo esta buscando un elemento div con un atributo de estilo:
$crawler->filter('div[style*="max-height:175px; overflow: hidden;"]');
Para más información, por favor lea la documentación de DomCrawler, CssSelector y Goutte
Muy bien, ahora que tenemos una pequeña idea sobre los tres componentes principales, es hora de que unamos todas las cosas y hagamos algo. Como ya se habrá dado cuenta, cuando se trata de scraping, no hay una forma establecida de hacerlo. Usted es libre de explorar y probar tantas formas de obtener sus datos. El único límite que tienes es tu creatividad.
En un próximo articulo pondré en juego todo lo que se ha mencionado hasta ahora realizando un Scraping a una pagina web.
— Source: Sayo Paul