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.
3 min read
Web scraping with PHP

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

Esta guía presentará un método de raspado de datos manual en el que se envía un bot a un servidor web y se recopilan datos utilizando PHP como lenguaje de programación base. Esto es en contraposición al uso de una herramienta de recopilación de datos totalmente automatizada que puede simplificar y agilizar el proceso.  

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” y “?>” se utilizan en toda la documentación de PHP al principio y al final de los comandos.
  • La segunda línea establece una variable llamada “$code” que pertenece al contenido de la URL en cuestión, en este ejemplo, nos dirigiremos a: “http://quotes.toscrape.com“. Esto ayuda a almacenar el código de la URL dentro de la variable “$code“.

¿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.”

El resultado es exactamente lo que buscábamos. Sin código, sólo texto legible. Este proceso puede repetirse para casi cualquier sitio web, por ejemplo, para raspar datos en eBay, como precios de productos, reseñas y SKU (Unidad de Referencia de Almacén).

En conclusión

El uso de PHP para buscar datos en la Web puede ser un proceso eficaz, aunque lento y manual. Una alternativa viable que las empresas pueden considerar es simplemente comprar conjuntos de datos listos para usar. Esto ahorra tiempo y recursos, permitiéndole a usted y a su equipo dedicar toda su atención a ampliar su negocio, garantizar la satisfacción del cliente y centrarse en el desarrollo del producto principal. Por supuesto, siempre puede empezar con nuestro IDE avanzado Web Scraper; simplemente haga clic en el botón de abajo.  

More from Bright Data

Datasets Icon
Get immediately structured data
Access reliable public web data for any use case. The datasets can be downloaded or delivered in a variety of formats. Subscribe to get fresh records of your preferred dataset based on a pre-defined schedule.
Web scraper IDE Icon
Build reliable web scrapers. Fast.
Build scrapers in a cloud environment with code templates and functions that speed up the development. This solution is based on Bright Data’s Web Unlocker and proxy infrastructure making it easy to scale and never get blocked.
Web Unlocker Icon
Implement an automated unlocking solution
Boost the unblocking process with fingerprint management, CAPTCHA-solving, and IP rotation. Any scraper, written in any language, can integrate it via a regular proxy interface.

Ready to get started?