PHP para la recolección de datos en colaboración con un sitio web proxy de confianza

image

Contenido del artículo:

La pieza que estás leyendo finaliza nuestro largo viaje a través del desafiante dominio del scraping web. El sitio web proxy de confianza Dexodata con configuraciones avanzadas y flexibles ya ha explorado el potencial de Python, JavaScript y Java. Ahora estamos invitando a los lectores a centrarse en otra dirección bien conocida para recolectar información. Nos referimos al buen viejo asistente PHP.

¿Por qué deberían los usuarios intentarlo si tienen la intención de obtener contenido de una presencia web y van a recurrir a nuestros proxies geográficamente dirigidos para este propósito? Aquí está la respuesta. Básicamente, PHP puede describirse como un lenguaje de scripting del lado del servidor de propósito general nacido tan temprano como en 1995. Como tal, está, por naturaleza, destinado al desarrollo web (la última versión de PHP es 8.4). La cuota que PHP ha ganado y mantenido sigue siendo enorme.  

  1. Cualquier persona que sepa al menos algo sobre los aspectos técnicos de internet sabe qué es WordPress. Basado en PHP, ese CMS alimenta y mantiene alrededor del 40% de todos los sitios web existentes. No todos son tan populares, el 40% de los sitios no necesariamente equivale al 40% del tráfico o al 40% de los datos. Pero este hecho habla por sí mismo.
  2. Además de todo lo relacionado con la gestión de contenido, aproximadamente el 80% de los sitios web dependen de PHP (cuando su propiedad del lado del servidor puede ser identificada).
  3. Finalmente, productos verdaderamente avanzados y en gran demanda pueden ser diseñados con PHP. Por ejemplo, aquellos que solicitan nuestra prueba gratuita de proxy de pago como nuevos usuarios para aplicar direcciones como proxies para redes sociales deberían saber que Slack se basa en código PHP. Sí, no es una red social en su forma más pura, pero aún así.

Como un lenguaje "predispuesto" para la Web, PHP es una opción decente para escenarios de baja a media complejidad. A través de él, los programadores pueden:

  • Iniciar solicitudes que se transfieran a una página dada;  
  • Obtener información;
  • Guardar información en una forma organizada, por ejemplo, en formatos como CSV, JSON o XML.

En resumen: PHP es sin duda un recurso para aplicar a tareas de scraping, ya que es capaz de interactuar con sitios y entender y manejar HTML, así como obtener información de presencias a través de una variedad de funciones y bibliotecas adecuadas. En esta capacidad, PHP no es tan avanzado y flexible y no debería ser elegido para contenido dinámico, aun así, es una opción viable y funcional (hasta cierto punto). Lo decimos como un sitio web proxy de confianza con direcciones para scraping web que conoce muy bien este oficio de recolección de datos.

Scraping web con PHP: conceptos básicos y requisitos previos

Antes de avanzar, valida si estás bien informado sobre lo que se presenta a continuación.

  1. Solicitudes HTTP. Aquí nos referimos al protocolo aplicado por los servidores para enviar y obtener información. Para obtener algunos datos de una presencia, un usuario debe dirigir una consulta HTTP al servidor encargado de alojar la página. PHP cuenta con funciones integradas como cURL, file_get_contents(), así como fopen() que permiten dirigir consultas HTTP y obtener información de las páginas.
  2. Análisis de HTML. Como un lenguaje concebido para "construir" páginas web, PHP ofrece elementos integrados como DOMDocument junto con SimpleXMLElement que permiten a los usuarios analizar HTML para obtener información.
  3. Expresiones Regulares sirven como una herramienta útil y potente para hacer coincidir patrones y manipular textos. Nuevamente, PHP ofrece funciones integradas, por ejemplo, preg_match() junto con preg_replace() que permiten aplicar expresiones regulares para obtener información proveniente de sitios.

Aún estas nociones básicas serían suficientes en caso de que los usuarios deseen crear un programa PHP simple capaz de transferir consultas HTTP a una presencia, "salvaguardar" el HTML, y finalmente analizar el código así como obtener la información buscada con el ecosistema de proxies éticos dirigidos geográficamente de Dexodata (con prueba gratuita de proxy de pago, incluidos proxies para redes sociales).

 

Recolección de datos web con PHP: escenario de ejemplo

 

Supongamos que es necesario raspar información contenida en una presencia como una lista de artículos en venta (lo que mostraremos es un caso muy básico, habrá escenarios más avanzados en secciones posteriores). Es imprescindible obtener el nombre, costo e imagen de cada artículo y guardar esa información como un archivo CSV. Aquí está la forma más simple de hacerlo, es decir, cuando no hay escenarios complejos e impedimentos. Simplemente sigue los pasos del ecosistema de proxies dirigidos geográficamente en lista blanca de Dexodata.

<?php

$url = 'https://sample.com/items';

$html = file_get_contents($url);

$dom = new DOMDocument();

$dom->loadHTML($html);

$products = $dom->getElementsByTagName('article');

$data = [];

foreach ($items as $items) {

    $name = $item->getElementsByTagName('h2')[0]->textContent;

    $price = $item->getElementsByTagName('span')[0]->textContent;

    $image = $item->getElementsByTagName('img')[0]->getAttribute('src');

    $data[] = [$name, $price, $image];

}

$fp = fopen('items.csv', 'w');

foreach ($data as $fields) {

    fputcsv($fp, $fields);

}

fclose($fp);

?>

¡Nada ha sido más fácil!

Lo que los lectores ven aquí es que primero transferimos una consulta HTTP a la presencia mediante file_get_contents(). Posteriormente, pasamos al análisis del HTML a través de la clase DOMDocument y obtenemos información relevante mediante la técnica getElementsByTagName(). Luego somos libres de guardar la información obtenida en un array multidimensional, que posteriormente se escribe en un archivo CSV mediante fputcsv().

Si sientes que todo está claro, avancemos. El sitio web proxy de confianza Dexodata con opciones de prueba gratuita de proxy de pago te mostrará el camino hacia los datos.

 

Evolución. Bibliotecas y herramientas

 

Desde su inicio, PHP ha evolucionado significativamente. Probablemente, sus bibliotecas no se ven tan "de moda" y "elegantes" (no es Python), sin embargo, este lenguaje cuenta con una gran comunidad de participantes que apoyan bibliotecas funcionales. Examinemos estas en el contexto del scraping web. Nosotros, como un sitio web proxy de confianza que ejecuta un ecosistema de proxies dirigidos geográficamente (incluyendo proxies para redes sociales, como Instagram) proponemos la siguiente escalera, en nuestra opinión, desde opciones más simples hasta más avanzadas.

 

1. Goutte

 

Goutte sirve como una biblioteca completamente funcional que se puede aplicar con el marco PHP. Puede ser dominada incluso por principiantes para obtener datos provenientes de HTML. La curva de aprendizaje en este caso tampoco es desafiante, gracias a su comprensible diseño orientado a objetos. En cuanto a otras ventajas, incluyen una comunidad visible, un impresionante volumen de documentación útil y, finalmente, velocidad. Debido a que se basa en conexiones persistentes HTTP 1.1, implica que un navegador necesita solo una conexión al servidor. Después de eso, la misma conexión se utilizará para todas las solicitudes posteriores a la primera.

También hay algunas desventajas. En ciertos proyectos, se pueden enfrentar limitaciones insuperables relacionadas con contenido dinámico. Probemos Goutte y PHP en acción y hagamos clic en la página de interés (como siempre, al raspar cualquier cosa en la web, no olvides sobre los proxies residenciales, de centro de datos y de red móvil de Dexodata dirigidos geográficamente disponibles a tarifas favorables).

Para comenzar, uno debe instalar Composer. Este último se utiliza para gestionar dependencias cuando se trata de PHP. Permite declarar las bibliotecas de importancia para un proyecto.

Todo lo que se necesita es ejecutar este tipo de comando en la terminal:

composer require fabpot/goutte

Luego genera un script PHP para la iniciativa. Dale cualquier nombre que desees. Luego abre tu nuevo script y complementa estas líneas de código para hacer que Goutte funcione:

require 'vendor/autoload.php';

use Goutte\Client;

$client = new Client();

¡Genial, Goutte está en pleno funcionamiento e inicializado! Después de eso, proporciona estas líneas de código al final del archivo para obtener una URL mediante la función client->request().

$url = "http://instance.com/";

$crawler = $client->request('GET', $url);

// Haz clic en el enlace "Más información..."

$link = $crawler->selectLink('Más información…')->link();

$crawler = $client->click($link);

Nos ha llevado solo un par de líneas de código para llegar a la posición correcta para navegar a una presencia y hacer clic en las cosas. Ahora es el momento de la segunda ronda con el sitio web proxy de confianza Dexodata.

 

2. Simple HTML DOM

 

Siendo un analizador, este programa está diseñado para trabajar con cualquier documento HTML, incluidos aquellos que son definidos como inválidos por las especificaciones HTML correspondientes. Su gran ventaja es que es fácil de dominar, y no contiene ningún elemento relacionado con JS externo que deba cargarse por separado antes de comenzar a trabajar. Otras ventajas incluyen velocidad (los usuarios no necesitan cargar toda la página en memoria, por lo que pueden procesar un montón de páginas HTML concurrentemente sin que su rendimiento se vea afectado) y el hecho de que es ligero (es decir, no es necesario instalar ningún software o biblioteca adicional, solo PHP será suficiente).

Sin duda, hay limitaciones. Tu acceso a los componentes de la página estará limitado: se pueden realizar manipulaciones con la estructura de una página, pero su contenido estará fuera de alcance. Es notable que Simple HTML DOM es bastante rígido, así que a menos que seas un dios del HTML, el potencial estará restringido.

Eso ha sido suficiente teoría, pasemos a la práctica.

Para comenzar, obtén la última versión visitando este espacio de documentación de Simple HTML DOM. Eso te dará todo lo que necesitas.

Primero, copia el archivo simple_html_dom.php. Después, simplemente pega este último en tu proyecto activo.

Genera tu archivo PHP (los nombres no importan). Por ejemplo, webscrapingstuff.php.

Ahora, abre el archivo y "arma" tu proyecto con la biblioteca Simple HTML DOM añadiéndola. Usa el código propuesto por el sitio web proxy de confianza Dexodata a continuación:

include('simple_html_dom_php');

Ingresa esta línea de código. Es importante, ya que te llevará a la página misma:

$html = file_get_html('http://instance.com/')

El elemento file_get_html, siendo parte de Simple HTML DOM, es capaz de recuperar HTML asociado con la URL que se especifica. Luego entrega un objeto DOM que almacena nuestra variable $html.

Digamos que necesitas el encabezado principal. Para obtener ese primer encabezado H1, aplica este código:

echo $html->find('h1', 0)->plaintext;

Si abres este archivo resultante en tu servidor web, encontrarás lo que necesitas allí.

 

3. PHP Scraper

 

Como un ecosistema de direcciones IP en lista blanca y éticamente obtenidas centradas en la recolección de datos, no podemos ignorar PHP Scraper. Este último sirve como una herramienta que permite a los recolectores raspar información a través de scripts PHP. Este enfoque implica que no es necesario codificar mucho por tu cuenta. Todo lo que se necesita es aplicar comandos tan simples como find_element_by_class o find_element_by_id. Serán suficientes para componentes específicos en cualquier presencia particular al escribir su número de clase o id.

¿Algún problema? Por supuesto, existen algunos. PHP Scraper puede no coincidir con cada caso de uso posible, ya que, naturalmente, se basa en PHP. Por lo tanto, es compatible con servidores asociados con Apache o Nginx y configurados a través de mod_rewrite activado por defecto. PHP Scraper no es tu dirección si pretendes obtener información de una API o analizar presencias HTML sofisticadas.

De todos modos, ejecutemos un escenario básico.

Nuestros lectores deben instalar Composer, como hicimos en la sección de Goutte. Después de eso, complementa tu proyecto con la biblioteca que se está discutiendo, con este código a través de Composer:

composer require spekulatius/phpscraper

Una vez que la etapa de instalación haya quedado atrás, el autoloader de Composer se encargará del paquete. En caso de que uno trabaje con una biblioteca VanillaPHP, debe incorporar el autoloader en su script, como se muestra a continuación:

require 'vendor/autoload.php'

Como ejercicio, genera un script que acceda a una presencia y enumere la cantidad de enlaces publicados allí. Inicia el programa y dale una variable, como se muestra aquí:

$web = new \spekulatius\phpscraper();

Da la orden al programa para visitar la URL:  

$web->go(' [http://instance.com/](http://instance.com/) ');

Complementa esta sección de código encargada de tomar cada enlace contenido en la presencia e imprimir la cantidad de ellos.

// Imprimir el número de enlaces.

echo "Esta página contiene " . count($web->links) . " enlaces. ";

// Recorrer los enlaces

foreach ($web->links as $link) {

echo " - " . $link . " ";

}

/**

* Este código imprimirá:

*

* Esta página contiene 1 enlace.

*

* - https://www.iana.org/domains/instance

*/

Recuerda: usamos una dirección irreal.

 

4. PHP cURL para operaciones de scraping

 

Habiendo revisado una variedad de opciones disponibles para actividades de recolección por PHP, nuestro sitio web proxy de confianza Dexodata te ofrece una opción adicional conveniente y ampliamente utilizada. Por supuesto, nos referimos a cURL, una biblioteca y herramienta de línea de comandos (normalmente disponible con el lenguaje por defecto) que permite a los usuarios enviar y recibir archivos a través de HTTP y FTP. Al trabajar con él, se pueden aplicar proxies geográficamente dirigidos (incluidos aquellos proporcionados con nuestra prueba gratuita de proxy de pago), transmitir datos a través de conexiones SSL, definir cookies, y más. Probemos en la práctica.

Genera un nuevo script PHP y complementa este código:

// Inicializar curl

$ch = curl_init();

// URL para Scraping

curl_setopt($ch, CURLOPT_URL,

'https://dexodata.com/en/blog');

// Devolver Transferencia Verdadera

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$output = curl_exec($ch);

// Cerrar cURL

curl_close($ch);

Definir CURLOPT_RETURNTRANSFER como TRUE envía la página en la capacidad de una cadena en lugar de mostrarla directamente. Por lo tanto, nuestro código toma la información que necesitamos recolectar del sitio.

Se puede echar un vistazo a estos datos mediante un echo con la variable para el almacenamiento de datos:

echo $output

Nuestro siguiente paso es colocar esta información en un documento DOM, lo que nos permitirá acceder a ella con fines de scraping.

$dom = new DOMDocument;

$dom->loadHTML($output);

Actualmente, tenemos nuestra información como una estructura HTML dentro de una variable. Genera algún código adicional para imprimir cada enlace disponible en la página HTML:

$tags = $dom->getElementsByTagName('a');

for($I=0; $I < $tags->length; $I++){

$link = $tags->item($i);

echo " - " . $link . " ";

}

Por cierto, como fuente de proxies geográficamente dirigidos con oportunidades de prueba gratuita de proxy de pago, instamos a los usuarios a no olvidar proteger sus iniciativas de scraping con las direcciones que proporcionamos (por ejemplo, nuestros IPs residenciales de primera calidad de ISP o, alternativamente, nuestros proxies móviles de alta calidad). El ecosistema de Dexodata mostrará a los lectores el camino para hacerlo a través de cURL. Todo lo que necesitan hacer es seguir la sintaxis.

curl --proxy <proxy-ip>:<proxy-port> <url>

Primero, la sección <proxy-ip> es para insertar la IP, mientras que la segunda sección <proxy-port> está destinada, predeciblemente, al número de puerto. Finalmente, se verá así:

curl --proxy 193.191.56.12:7070 -k https://dexodata.com/en/blog

Siempre que la dirección sea funcional y la consulta sea exitosa, nuestro script mostrará el contenido de la presencia para salir después. 

 

Creando un scraper: un escenario de ejemplo

 

Imaginemos una presencia de comercio electrónico con una lista de artículos en venta que queremos recolectar a través de PHP. ¿Qué deberíamos hacer? ¿Qué alternativas deberíamos usar? Sigue nuestro sitio web proxy de confianza y examina este escenario de ejemplo.

Comienza descargando todo el HTML de la presencia de comercio electrónico a través del potencial de PHP y el buen viejo cURL, así:

// inicializar la solicitud cURL 

$curl = curl_init(); 

// establecer la URL a alcanzar con una solicitud HTTP GET 

curl_setopt($curl, CURLOPT_URL, "https://scrapeme.live/shop/"); 

// obtener los datos devueltos por la solicitud cURL como una cadena 

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 

// hacer que la solicitud cURL siga eventuales redirecciones, 

// y alcanzar la página final de interés 

curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); 

// ejecutar la solicitud cURL y 

// obtener el HTML de la página como una cadena 

$html = curl_exec($curl); 

// liberar los recursos de cURL 

curl_close($curl);

Las cosas relacionadas con HTML están a nuestra plena disposición, en la capacidad de la variable $html, como destaca Dexodata. Tu siguiente medida es cargar $html en una instancia de HtmlDomParser que cuenta con la función str_get_html(). Veamos cómo se puede hacer a continuación:

require_once __DIR__ . "../../vendor/autoload.php";

use voku\helper\HtmlDomParser; 

$curl = curl_init(); 

curl_setopt($curl, CURLOPT_URL, "https://scrapeme.live/shop/"); 

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 

curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); 

$html = curl_exec($curl); 

curl_close($curl); 

// inicializar HtmlDomParser 

$htmlDomParser = HtmlDomParser::str_get_html($html);

Tú y nuestro sitio web proxy de confianza ahora están en la posición correcta para aplicar HtmlDomParser con el propósito final de navegar por el DOM de la presencia HTML e iniciar efectivamente el proceso de recolección de datos.

Eso es lo que Dexodata está a punto de lograr. Para hacerlo, "salvaguarda" la lista completa de todos los enlaces relacionados con la paginación en nuestro escenario. En nuestro caso, esto nos dará la oportunidad de rastrear toda la sección de la presencia web. Haz clic derecho en el componente HTML relacionado con la figura de paginación y elige "Inspeccionar". Después de eso, nuestras DevTools nos mostrarán el elemento DOM.

Cómo recolectar datos en PHP con un sitio web proxy de confianza

Avancemos con el ecosistema de proxies dirigidos geográficamente de Dexodata. Se puede esperar que el .page-numbers, en la capacidad de una clase CSS, identifique los componentes HTML relacionados con la paginación. Sin embargo, el equipo de nuestro sitio web proxy de confianza nos recordaría a todos que una clase CSS puede no identificar necesariamente un componente HTML de manera única. Múltiples nodos pueden estar relacionados con la misma clase única.

Por lo tanto, si tu intención es aplicar un selector CSS para obtener los componentes en el DOM, inevitablemente debes aplicar la clase CSS junto con otros selectores. Específicamente, los usuarios podrían aplicar el asistente HtmlDomParser, con el selector CSS .page-numbers, para seleccionar todos los componentes HTML relacionados con la paginación. Luego, nuestro ecosistema de proxies dirigidos geográficamente te sugeriría iterar a través de ellos para obtener todas las URLs necesarias directamente del atributo href.

Revisa esto:

// recuperar los elementos HTML de paginación con 

// el selector CSS ".page-numbers a" 

$paginationElements = $htmlDomParser->find(".page-numbers a"); 

$paginationLinks = []; 

foreach ($paginationElements as $paginationElement) { 

// poblar el conjunto paginationLinks con la URL 

// extraída del atributo href del elemento HTML de paginación 

$paginationLink = $paginationElement->getAttribute("href"); 

// evitar duplicados en la lista de URLs 

if (!in_array($paginationLink, $paginationLinks)) { 

$paginationLinks[] = $paginationLink; 

}  

}

// imprimir el array paginationLinks 

print_r($paginationLinks);

Presta atención al hecho de que find() permite a los usuarios obtener componentes DOM en función de un selector CSS. Además, en el escenario hipotético de Dexodata, los componentes relacionados con la paginación aparecen dos veces en cada página de la presencia de comercio electrónico. Se necesita proporcionar un truco único y ajustado para manejar el problema de los componentes duplicados cuando se trata del array $paginationLinks.

Aquí está lo que veremos si intentamos ejecutar nuestro script para el escenario:

Array ( 

[0] => https://scrapeme.live/shop/page/2/ 

[1] => https://scrapeme.live/shop/page/3/ 

[2] => https://scrapeme.live/shop/page/4/ 

[3] => https://scrapeme.live/shop/page/46/ 

[4] => https://scrapeme.live/shop/page/47/ 

[5] => https://scrapeme.live/shop/page/50/ 

)

Ten en cuenta que todas las direcciones poseen una estructura idéntica. Es decir, todas están marcadas por la figura final responsable de la paginación. Si los lectores tienen la intención de iterar sobre cada una de ellas, lo único que necesitan es la figura identificativa asociada con la última página.

Está sujeta a ser recuperada como se muestra a continuación:

// eliminar todos los caracteres no numéricos en el último elemento del 

// array $paginationLinks para recuperar el número más alto de paginación 

$highestPaginationNumber = preg_replace("/\D/", "", end($paginationLinks));

Digamos que nuestro $highestPaginationNumber será "50".

Entonces, ha llegado el momento de obtener la información que describe un producto individual con el equipo de Dexodata. Necesitamos hacer clic derecho en un artículo y activar la ventana de DevTools, seguida de "Inspeccionar". Se puede esperar que un artículo esté "compuesto de" un elemento HTML li.product que abarca una URL, una imagen, un título y una etiqueta de precio. Tal información proviene de los componentes HTML a, luego mg, luego h2, y luego span, respectivamente.

El sitio web proxy de confianza Dexodata propone esta forma de obtener esta información a través de HtmlDomParser:

$productDataLit = array(); 

// recuperar la lista de productos en la página 

$productElements = $htmlDomParser->find("li.product"); 

foreach ($productElements as $productElement) { 

// extraer los datos del producto 

$url = $productElement->findOne("a")->getAttribute("href"); 

$image = $productElement->findOne("img")->getAttribute("src"); 

$name = $productElement->findOne("h2")->text; 

$price = $productElement->findOne(".price span")->text; 

// transformar los datos del producto en un array asociativo 

$productData = array( 

"url" => $url, 

"image" => $image, 

"name" => $name, 

"price" => $price 

); 

$productDataList[] = $productData; 

}

Una vez que nuestra lógica captura todos los fragmentos de información del artículo de una sola página y posteriormente los guarda como el array $productDataList. Aplica esta lógica a cada página.

// iterar sobre todas las páginas "/shop/page/X" y recuperar todos los datos del producto 

for ($paginationNumber = 1; $paginationNumber <= $highestPaginationNumber; $paginationNumber++) { 

$curl = curl_init(); 

curl_setopt($curl, CURLOPT_URL, "https://scrapeme.live/shop/page/$paginationNumber/"); 

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 

$pageHtml = curl_exec($curl); 

curl_close($curl); 

$paginationHtmlDomParser = HtmlDomParser::str_get_html($pageHtml); 

// lógica de scraping... 

}

¡Genial! Hemos llegado a la situación en la que podemos extraer datos según lo planeado.

 

Comentarios finales 

 

Ejecutando un ecosistema de proxies dirigidos geográficamente, nos gustaría finalizar esta guía con un par de comentarios. Intenta evitar ser detectado y restringido como un scraper. Para eso, te recordamos los proxies que ya hemos mencionado.

Aquí hay otro recordatorio de cómo uno puede agregar sus identificadores de proxy:

curl_setopt($curl, CURLOPT_PROXY, "<PROXY_URL>"); 

curl_setopt($curl, CURLOPT_PROXYPORT, "<PROXY_PORT>"); 

curl_setopt($curl, CURLOPT_PROXYTYPE, "<PROXY_TYPE>");

1. Una capa extra de protección puede constituirse mediante un encabezado HTTP de agente de usuario. Por definición, cURL siempre establecería algo como curl/XX.YY.ZZ. No será un gran problema atrapar a un usuario con tal encabezado. En su lugar, intenta "jugar" con el encabezado aquí.

curl_setopt($curl, CURLOPT_USERAGENT, "<USER_AGENT_STRING>");

Como resultado, colocarás algo como esto, un ejemplo encontrado en internet:

curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")

2. Otro comentario de Dexodata se centra en contenido dinámico. Hemos enfatizado que la consulta GET cURL habitual no te ayudará con eso, se requerirán técnicas más avanzadas. Regresa a nuestra guía dedicada a JS y aprende más sobre navegadores sin cabeza, es decir, paquetes de software de navegación sin UI. Esto te ayudará a construir un scraper que interactúe con una presencia como un usuario real y extraiga contenido dinámico simultáneamente.

3. Nuestro tercer comentario está dedicado al scraping paralelo. La multi-threading en PHP es desafiante pero a veces inevitable. Aquí está cómo puedes abordar este desafío con el sitio web proxy de confianza Dexodata. Nuestro concepto es permitir que tu script de scraping se ejecute en varias instancias aplicando HTTP GET parámetros.

Modifica el script para que no itere sobre todas las páginas y se concentre en piezas paralelas más pequeñas en su lugar. Aquí está cómo uno puede modificar el script y establecer los límites de una "pieza". Simplemente establece un par de parámetros GET, tal como se destaca a continuación:

$from = null; 

$to = null; 

 

if (isset($_GET["from"]) && is_numeric($_GET["from"])) { 

$from = $_GET["from"]; 

if (isset($_GET["to"]) && is_numeric($_GET["to"])) { 

$to = $_GET["to"]; 

if (is_null($from) || is_null($to) || $from > $to) { 

die("¡Parámetros from y to inválidos!"); 

// raspar solo las páginas de paginación cuyo número va 

// de "$from" a "$to" 

for ($paginationNumber = $from; $paginationNumber <= $to; $paginationNumber++) { 

// lógica de scraping... 

}

// escribir los datos raspados en una base de datos/archivo

Esto te preparará para iniciar múltiples instancias activando varios enlaces en el navegador:

https://instance.com/scripts/scrapeme.live/scrape-products.php?from=1&to=5 

y similares.

Se ejecutarán simultáneamente y rasparán la presencia en paralelo. Eso es todo. Gracias por quedarte con Dexodata, tu ecosistema ético de proxies móviles, de centro de datos y residenciales con todas las normas KYC y AML aplicadas.

Back

Comemos cookies. Leer más sobre la Política de Cookies