Raspado de datos con PHP: una guía paso a paso

Aprenda a crear y programar con facilidad su propio raspador web en PHP, desde cero.
Web scraping with PHP
Daniel Shashko - SEO
Daniel Shashko | SEO Specialist
04-Sep-2022

PHP (Preprocesador de Hipertexto) es un lenguaje de programación para desarrollo web que puede usarse para recopilar datos web. En esta publicación, cubriremos:

¿Por qué usar PHP?

En la actualidad, PHP impulsa ~40% de la web, incluyendo sitios como WordPress, Slack. Es uno de los lenguajes de programación más populares del lado del servidor en cuanto se refiere a desarrollo web. Para quienes trabajan con MySQL, sus bases de datos tienen bastante relación. Es un lenguaje relativamente fácil de aprender, con buena documentación y bibliotecas que pueden reducir el tiempo de desarrollo.

Primeros pasos con PHP

This guide will introduce a method of manual web scraping in which you send a bot to a web server and collect data using PHP as the foundational programming language. This is as opposed to using a fully automated data collection tool that can simplify and streamline the process. 

El raspador web funcionará mediante el envío de una solicitud HTTP al servidor y después recopilando el código del sitio web. Después, le mostraremos cómo analizar la información recuperada.

Aquí se muestra un ejemplo de fragmento de código que podría aparecer en el encabezado de un sitio web donde desea raspar datos:

<html><body><h1>This is a heading!</h1></body></html>

Tras haber recolectado este código, se deberá analizar para que un analista humano pueda leer y comprender el texto. En este ejemplo, tras el análisis, se le mostrará el siguiente mensaje en texto simple:

‘This is a heading!’

Antes de comenzar, asegúrese de tener PHP instalado en su computadora.

Raspado de datos con PHP en 3 pasos simples

Paso uno: Recopilar el código de su sitio web.

Comience ingresando el siguiente código:

<?php
$code = file_get_contents (“http://quotes.toscrape.com”); 
?>

En términos de convenciones de escritura de código:

  • “<?php” and “?>” are used in all PHP documentation at the beginning and the end of commands. 
  • The second line sets a variable called “$code” that pertains to the contents of the URL in question, in this example, we will be targeting: “http://quotes.toscrape.com”. This helps store the URL code inside of the “$code” variable.

¿Prefiere una solución de raspado de datos automatizada por completo?

Paso dos: Análisis de la página web

Esta tarea tiene el propósito de recopilar todas las citas de este sitio web:

Texto citado en una página de citas

Hacer clic con el botón derecho sobre su página objetivo y seleccionar ‘view page source’, abrirá una ventana nueva con el código fuente. En nuestro ejemplo, notará que todas las citas están contenidas dentro de etiquetas , con la clase “text” y el atributo itemprop también marcado como ‘text’, como se muestra a continuación:

Ejemplo de código de cita

Comencemos usando PHP para eliminar todo el texto no deseado del código, excepto las citas presentes en las etiquetas , y después lo mostraremos en la pantalla usando la función ‘echo’:

<?php
$code = file_get_contents("http://quotes.toscrape.com");
$code = str_replace(">", "<>", $code);

$splitCode = explode("<", $code);

// Find the first occurance of the opening tag of the quotes: 
$openingTag = array_search('span class="text" itemprop="text"', $splitCode, true);

// Find the first occurance of the closing tag of the quotes 
$closingTag = array_search('/span', $splitCode, true);

// Now, find the text in between the tags 
$i = $openingTag;
$total = "";
while ($i < $closingTag) {
	$total = $total . $splitCode[$i];
	$i = $i + 1;
}
$final = substr($total, 37);
echo $final;
?>

En la línea 2, remplaza todas las ocurrencias de “>” en el código con “”. Esto es para que se pueda dividir junto con “ de inicio y en la línea 11, encuentra la ubicación de la etiqueta de cierre.

Ahora, todo lo que necesita hacer es recolectar el texto entre estas dos ocurrencias. Esto es posible creando una variable llamada “i” con el valor de la ubicación de la variable de la etiqueta inicial. Crea una variable donde ingresar el resultado más adelante. En la línea 16, comienza a ejecutar un loop en cada letra después de la etiqueta inicial, agregando la letra al valor total, después incrementa la variable ‘i’. Después de haber pasado la etiqueta final, el loop se detendrá.

A continuación, elimina los primeros 37 dígitos del string final ya que esos primeros 37 dígitos son los que analizamos en la etiqueta – la etiqueta . Por último, recolecta los resultados finales usando la función ‘echo function’.

Al ejecutar el programa, se verá parecido a:

“The world we have created it is a process of our thinking. It cannot be changed without changing our thinking.” 

Esa es la primer cita mostrada en el sitio web donde raspamos datos sin el código no amigable con el usuario (‘non-human-friendly’).

Paso tres: ejecución de loop.

Puede haber notado que solo recopila la primer ocurrencia y ninguna después de esa. Para arreglarlo, podemos simplemente borrar las ocurrencias que acabamos de devolver y repetir el proceso después, hasta que las hayamos recuperado todas. Además, podemos simplificar nuestro código poniendo el proceso de raspado de datos en una función para que se pueda ejecutar cuando sea que lo necesitemos. Intentemos usar este código:

<?php 
$code = file_get_contents("http://quotes.toscrape.com");
$code = str_replace(">", "<>", $code); 

$splitCode = explode("<", $code);

function parseCode($splitCode) {
	// Find the first occurance of the opening tag of the quotes:
	$openingTag = array_search('span class="text" itemprop="text"', $splitCode, true);
	
	// Find the first occurance of the closing tag of the quotes: 
	$GLOBALS[closingTag] = array_search('/span', $splitCode, true);
	
	// Now, find the text in between the tags 
$i = $openingTag;
$total = "";
while ($i < $GLOBALS["closingTag"]) {
	$total = $total . $splitCode[$i];
	$i = $i + 1;
}
// Run the function, then update splitCode to delete the previous occurance 
// that it can be repeated for the next quote, then loop through 3 times 
// (You can change how many times):
parseCode($splitCode);
$splitCode = array_slice($splitCode, $GLOBALS["closingTag"]-1, NULL, TRUE);
parseCode($splitCode);
$splitCode = array_slice($splitCode, $GLOBALS["closingTag"]-1, NULL, TRUE);
parseCode($splitCode);
$splitCode = array_slice($splitCode, $GLOBALS["closingTag"]-1, NULL, TRUE);
parseCode($splitCode);

?>

Puede haber notado que nuestro código previo se ha ingresado en una función llamada ‘parseCode’, que contiene un parámetro llamado ‘$splitCode’, de modo que puede tener acceso al código y después repiten (‘echo’) el resultado. La función ’parseCode’ se ejecuta en la línea 27 y después en la 28, nuestro programa elimina la ocurrencia anterior de la etiqueta final para que se pueda replicar. Las líneas 27 y 28 simplemente se repiten ~ 3 veces para que el programa identifique un patrón y descubra la próxima ocurrencia.

Por último, ingresamos la etiqueta final como una variable global (‘global variable’) con el alcance superglobal ‘$GLOBALS’ y en la línea 21, ingresamos etiquetas <p> alrededor de cada línea que devuelve, para que cree una nueva línea para cada cita que analiza. A continuación, se muestra el resultado:

“The world we have created it is a process of our thinking. It cannot be changed without changing our thinking.”

“There are only two ways to live your life. One is as though nothing is a miracle. The Other is as though everything is a miracle.” 

“Try not to become a man of success. Rather become a man of value.”

The result is exactly what we were looking for. No code, just readable text. This process can be replicated for nearly any target site, such as scraping eBay for target data points such as product pricing, reviews, and SKUs (Stock Keeping Units). 

En conclusión

Puede ser efectivo usar PHP para raspar datos web buscando datos objetivo, aunque podría ser un proceso manual lento. Una alternativa viable que las compañías podrían querer considerar es simplemente adquirir conjuntos de datos listos para usarse. Esto ahorra tiempo y recursos, permitiéndole a usted y a su equipo dirigir toda su atención a expandir su negocio, garantizando la satisfacción de los clientes y enfocándose en el desarrollo de los productos centrales.

Daniel Shashko - SEO
Daniel Shashko | SEO Specialist

Daniel is an SEO specialist here at Bright Data with a B2C background. He is in charge of ensuring that businesses get exposed to articles that help them become more data-driven. He is fascinated by the intricate inner workings that the digital world is comprised of and how these can be navigated for hypergrowth.

Usted también puede estar interesado en

What is a data parser featured image

¿Qué es el análisis sintáctico de datos? Definición, ventajas y retos

En este artículo aprenderá todo lo que necesita saber sobre el análisis sintáctico de datos. Aprenderá a detalle lo que es el análisis sintáctico de datos, por qué es tan importante y cuál es la mejor manera de abordarlo.
What is a web crawler featured image

¿Qué es un recopilador web?

Los recopiladores web (crawlers) son una parte fundamental de la infraestructura de Internet. En este artículo hablaremos de ello: Definición de recopilador web Un recopilador web (crawler) es un robot informático que explora Internet y descarga los datos que encuentra. La mayoría de los recopiladores web se operan mediante motores de búsqueda como Google, […]
Python web scraping guide

Raspado web con Python – Guía paso a paso

Aprenda a realizar raspado de datos con Python para recolectar datos de múltiples sitios web rápidamente, ahorrando tiempo y esfuerzo.
How to use web data for a successful eCommerce holiday season

Conjuntos de datos de eCommerce para la temporada festiva

Use conjuntos de datos de eCommerce y manténgase alerta sobre los precios de sus competidores, inventario de productos y reseñas de clientes.

Los 9 mitos más grandes acerca del raspado de datos (scraping)

El raspado de datos (scraping) tiene una mala reputación porque puede usarse con malicia. Sin embargo, ¡el raspado de datos también puede usarse con propósitos positivos! En esta publicación, disiparemos algunos de los mitos más comunes acerca del raspado de datos, mostraremos cómo se puede usar esta técnica con propósitos positivos.

Guía para el raspado web con Java

¿No tiene certeza de cuáles herramientas de soporte debe descargar para crear un entorno de Java ideal para recopilación de datos? ¿No es claro cómo se extraen o analizan puntos de datos desde HTML para luego convertirse en formato CSV? Esta publicación ayudará a dejar claros estos aspectos.

La guía #1 sobre cómo evitar un bloqueo de IP en 2023

Aprenda cómo cambiar su MAC, utilizar una VPN para cambiar su dirección IP, borrar el caché de su computadora y descubrir herramientas y consejos sobre cómo utilizar soluciones proxy.
What is alternative data

¿Qué son los datos alternativos y cómo se usan?

Las casas de inversión monitorean redes sociales, motores de búsqueda y datos sobre demanda de consumidores, y reciben alertas en tiempo real cuando se menciona compañías en su portafolio. Sucede de la siguiente manera.