PHP pour la collecte de données en collaboration avec un site web proxy de confiance

image

Contenu de l'article :

Le texte que vous êtes en train de lire finalise notre long voyage à travers le domaine difficile du scraping web. Le site web proxy de confiance Dexodata avec des paramètres avancés et flexibles a déjà exploré le potentiel de Python, JavaScript et Java. Nous invitons maintenant les lecteurs à se concentrer sur une autre direction bien appréciée pour récolter des informations. Nous parlons du bon vieux PHP.

Pourquoi les utilisateurs devraient-ils essayer si ils ont l'intention de récupérer le contenu d'une présence web et vont recourir à nos proxies géo-ciblés à cet effet ? Voici une réponse. Fondamentalement, PHP peut être décrit comme un langage de script côté serveur à usage général né dès 1995. En tant que tel, il est, par nature, destiné au développement web (la dernière version de PHP est 8.4). La part que PHP a gagnée et conservée est encore énorme.  

  1. Quiconque connaissant au moins un peu les aspects techniques d'Internet sait ce qu'est WordPress. Basé sur PHP, ce CMS alimente et maintient environ 40 % de tous les sites web existants. Tous ne sont pas si populaires, 40 % des sites ne signifient pas nécessairement 40 % du trafic ou 40 % des données. Mais ce fait parle de lui-même.
  2. En dehors de tout ce qui concerne la gestion de contenu, environ 80 % des sites web reposent sur PHP (lorsque leur propriété côté serveur peut être identifiée).
  3. Enfin, des produits véritablement avancés et très demandés peuvent être conçus avec PHP. Par exemple, ceux qui demandent notre essai gratuit de proxy payant en tant que nouveaux utilisateurs pour appliquer des adresses comme proxies pour les réseaux sociaux devraient savoir que Slack repose sur du code PHP. Oui, ce n'est pas un réseau social dans sa forme la plus pure, mais quand même.

En tant que langage "prédisposé" pour le Web, PHP est une option décente pour des scénarios de faible à moyenne complexité. Grâce à lui, les développeurs peuvent :

  • Initier des requêtes à transférer vers une page donnée;  
  • Récupérer des informations;
  • Enregistrer des informations sous une forme organisée, par exemple dans des formats tels que CSV, JSON ou XML.

Pour résumer : PHP est certainement une ressource à appliquer aux tâches de scraping, car il est capable d'interagir avec des sites et de comprendre et manipuler HTML, ainsi que de récupérer des informations à partir de présences via une gamme de fonctions et de bibliothèques adaptées. En cette capacité, PHP n'est pas si avancé et flexible et ne devrait pas être choisi pour du contenu dynamique, même ainsi, c'est une option viable et fonctionnelle (dans une certaine mesure). Nous le disons en tant que site web proxy de confiance avec des adresses pour le scraping web connaissant bien ce métier de collecte de données.

Scraping web avec PHP : bases et prérequis

Avant d'aller plus loin, validez si vous êtes bien conscient des éléments ci-dessous.

  1. Requêtes HTTP. Ici, nous entendons le protocole appliqué par les serveurs pour envoyer et obtenir des informations. Pour obtenir des données d'une présence, un utilisateur doit diriger une requête HTTP vers le serveur responsable de l'hébergement de la page. PHP dispose de fonctions intégrées telles que cURL, file_get_contents(), ainsi que fopen() permettant de diriger des requêtes HTTP et d'obtenir des informations à partir des pages.
  2. Analyse HTML. En tant que langage conçu pour "construire" des pages web, PHP offre des éléments intégrés tels que DOMDocument ainsi que SimpleXMLElement permettant aux utilisateurs d'analyser HTML pour récupérer des informations.
  3. Expressions régulières servent d'outil fonctionnel et puissant pour faire correspondre des motifs et manipuler des textes. Encore une fois, PHP propose des fonctions intégrées, par exemple preg_match() ainsi que preg_replace() qui permettent d'appliquer des expressions régulières pour récupérer des informations provenant de sites.

Ces notions de base suffiraient si les utilisateurs ont l'intention de créer un programme PHP simple capable de transférer des requêtes HTTP vers une présence, de "sauver" le HTML, et finalement d'analyser le code ainsi que de récupérer les informations recherchées avec l'écosystème de proxies géo-ciblés éthiques de Dexodata (avec essai gratuit de proxy payant, y compris des proxies pour les réseaux sociaux).

 

Collecte de données web avec PHP : scénario d'exemple

 

Supposons qu'il soit nécessaire de récupérer des informations contenues par une présence sous forme d'une liste d'articles à vendre (ce que nous allons montrer est un cas très basique, il y aura des cas plus avancés dans les sections suivantes). Il est impératif de récupérer le nom, le coût et l'image de chaque article et d'enregistrer ces informations sous forme de fichier CSV. Voici la manière la plus simple de procéder, c'est-à-dire lorsqu'il n'y a pas de scénarios complexes et d'obstacles. Suivez simplement les étapes de l'écosystème Dexodata de proxies géo-ciblés sur liste blanche.

<?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);

?>

Rien n'a jamais été aussi facile !

Ce que les lecteurs voient ici, c'est que nous transférons d'abord une requête HTTP vers la présence par le biais de file_get_contents(). Ensuite, nous passons à l'analyse du contenu HTML via la classe DOMDocument et récupérons des informations pertinentes via la technique getElementsByTagName(). Ensuite, nous sommes libres d'enregistrer les informations récupérées dans un tableau multidimensionnel, qui est ensuite écrit dans un fichier CSV via fputcsv().

Si vous pensez que tout est clair, passons à la suite. Le site web proxy de confiance Dexodata avec des options d'essai gratuit de proxy payant vous montrera le chemin vers les données.

 

Évolution. Bibliothèques et outils

 

Depuis sa création, PHP a évolué de manière significative. Probablement, ses bibliothèques ne semblent pas si "à la mode" et "élégantes" (ce n'est pas Python), néanmoins, ce langage dispose d'une énorme communauté de participants soutenant des bibliothèques fonctionnelles. Examinons-les dans le contexte du scraping web. Nous, en tant que site web proxy de confiance gérant un écosystème de proxies géo-ciblés (y compris des proxies pour les réseaux sociaux, comme Instagram) proposons l'échelle suivante, à notre avis, des options les plus simples aux plus avancées.

 

1. Goutte

 

Goutte sert de bibliothèque entièrement fonctionnelle que l'on peut appliquer avec le framework PHP. Elle peut être maîtrisée même par des débutants pour récupérer des données provenant de HTML. La courbe d'apprentissage dans ce cas n'est pas non plus difficile, grâce à son design orienté objet compréhensible. En ce qui concerne les autres avantages, ils incluent une communauté visible, un volume impressionnant de documentation utile, et enfin, la vitesse. Grâce au fait qu'elle repose sur des connexions persistantes HTTP 1.1, cela implique qu'un navigateur n'a besoin que d'une connexion au serveur. Après cela, la même connexion sera utilisée pour toutes les requêtes après la première.

Il y a aussi quelques inconvénients. Dans certains projets, des limitations insurmontables concernant le contenu dynamique peuvent être rencontrées. Essayons Goutte et PHP en action et cliquons sur la page d'intérêt (comme d'habitude, lorsque vous scrapez quoi que ce soit sur le web, n'oubliez pas les proxies géo-ciblés résidentiels, de centre de données et mobiles de Dexodata disponibles à des tarifs avantageux).

Pour commencer, il faut installer Composer. Ce dernier est utilisé pour gérer les dépendances en ce qui concerne PHP. Il permet de déclarer les bibliothèques importantes pour un projet.

Tout ce qu'il faut faire est d'exécuter ce type de commande dans le terminal :

composer require fabpot/goutte

Ensuite, générez un script PHP pour l'initiative. Donnez-lui le nom que vous voulez. Ensuite, ouvrez votre nouveau script et complétez ces lignes de code pour faire fonctionner Goutte :

require 'vendor/autoload.php';

use Goutte\Client;

$client = new Client();

Super, Goutte est en pleine action et initialisé ! Après cela, fournissez ce couple de lignes ci-dessous à la fin du fichier pour récupérer une URL par le biais de la fonction client->request().

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

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

// Cliquez sur le lien "Plus d'informations..."

$link = $crawler->selectLink('Plus d'informations…')->link();

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

Il nous a fallu juste quelques lignes de code pour nous retrouver dans la bonne position pour naviguer vers une présence et faire des clics. Maintenant, il est temps de passer à la deuxième manche avec le site web proxy de confiance Dexodata.

 

2. Simple HTML DOM

 

En tant que parseur, ce programme est conçu pour travailler avec n'importe quel document HTML, y compris ceux qui sont définis comme invalides par les spécifications HTML correspondantes. Son grand avantage est qu'il est facile à maîtriser, et il ne contient aucun élément JS externe à charger séparément avant de commencer à travailler. D'autres avantages incluent la vitesse (les utilisateurs n'ont pas besoin de charger une page entière en mémoire, donc vous pouvez traiter un tas de pages HTML simultanément sans que votre performance soit affectée) et le fait qu'il soit léger (c'est-à-dire qu'il n'est pas nécessaire d'installer un logiciel ou des bibliothèques supplémentaires, PHP seul suffira).

Sans aucun doute, il existe des contraintes. Votre accès aux composants de la page sera limité : on peut effectuer des manipulations avec la structure d'une page, mais son contenu sera hors de portée. Il est à noter que Simple HTML DOM est assez rigide, donc à moins que vous ne soyez un dieu de HTML, le potentiel sera restreint.

Assez de théorie, passons à la pratique.

Pour commencer, obtenez la dernière version en visitant cet espace de documentation Simple HTML DOM. Cela vous donnera tout ce dont vous avez besoin.

Tout d'abord, copiez le fichier simple_html_dom.php. Ensuite, collez simplement ce dernier dans votre projet actif.

Générez votre fichier PHP (les noms n'ont pas d'importance). Par exemple, webscrapingstuff.php.

Maintenant, ouvrez le fichier et "armez" votre projet avec la bibliothèque Simple HTML DOM en l'ajoutant. Utilisez le code proposé par le site web proxy de confiance Dexodata ci-dessous :

include('simple_html_dom.php');

Entrez cette ligne de code. Elle est importante, car elle vous dirigera vers la page elle-même :

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

Le file_get_html, étant une partie de Simple HTML DOM, est capable de récupérer le HTML associé à l'URL spécifiée. Plus tard, il livre un objet DOM stockant notre variable $html.

Disons que vous avez besoin du titre principal. Pour obtenir ce premier titre H1, appliquez ce code :

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

Si vous ouvrez ce fichier résultant sur votre serveur web, vous trouverez ce dont vous avez besoin.

 

3. PHP Scraper

 

En tant qu'écosystème d'adresses IP sur liste blanche et éthiquement sourcées axées sur la collecte de données, nous ne pouvons pas ignorer PHP Scraper. Ce dernier sert d'outil permettant aux collecteurs de scraper des informations via des scripts PHP. Cette approche implique qu'il n'est pas nécessaire de coder beaucoup par vous-même. Tout ce qui est nécessaire est d'appliquer des commandes simples telles que find_element_by_class ou find_element_by_id. Elles suffiront pour des composants spécifiques sur une présence particulière en tapant leur classe ou leur numéro d'identification.

Des problèmes ? Bien sûr, il existe quelques-uns. PHP Scraper peut ne pas correspondre à chaque cas d'utilisation possible, tant qu'il est, naturellement, basé sur PHP. Ainsi, il est compatible avec des serveurs associés à Apache ou Nginx et configurés via mod_rewrite activé par défaut. PHP Scraper n'est pas votre direction à suivre si vous avez l'intention de récupérer des informations d'une API ou d'analyser des présences HTML sophistiquées.

Quoi qu'il en soit, exécutons un scénario de base.

Nos lecteurs doivent installer Composer, comme nous l'avons fait dans la section Goutte. Après cela, complétez votre projet avec la bibliothèque discutée, avec ce code via Composer :

composer require spekulatius/phpscraper

Une fois l'étape d'installation derrière nous, l'autoloader de Composer prend en charge le package. Dans le cas où l'on travaille avec une bibliothèque VanillaPHP, il faut incorporer l'autoloader dans leur script, comme montré ci-dessous :

require 'vendor/autoload.php'

En guise d'exercice, générez un script qui accède à une présence et énumère le nombre de liens publiés là-bas. Démarrez le programme et donnez-lui une variable, comme montré ici :

$web = new \spekulatius\phpscraper();

Donnez l'ordre au programme de visiter l'URL :  

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

Complétez cette section de code chargée de prendre chaque lien contenu par la présence et d'imprimer leur nombre.

// Imprimer le nombre de liens.

echo "Cette page contient " . count($web->links) . " liens. ";

// Boucle à travers les liens

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

echo " - " . $link . " ";

}

/**

* Ce code imprimera :

*

* Cette page contient 1 lien.

*

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

*/

Rappelez-vous juste : Nous utilisons une adresse fictive.

 

4. PHP cURL pour les opérations de scraping

 

Après avoir revisité une gamme d'options mises à disposition pour les activités de collecte par PHP, notre site web proxy de confiance Dexodata vous offre une option supplémentaire pratique et largement utilisée. Nous parlons bien sûr de cURL, une bibliothèque et un outil en ligne de commande (normalement disponible avec le langage par défaut) permettant aux utilisateurs d'envoyer et de recevoir des fichiers via HTTP et FTP. En travaillant avec, on peut appliquer des proxies géo-ciblés (y compris ceux fournis avec notre essai gratuit de proxy payant), transmettre des données via des connexions SSL, définir des cookies, et plus encore. Essayons-le en pratique.

Générez un nouveau script PHP et complétez ce code :

// Initialiser curl

$ch = curl_init();

// URL pour le scraping

curl_setopt($ch, CURLOPT_URL,

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

// Retourner le transfert vrai

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$output = curl_exec($ch);

// Fermeture de cURL

curl_close($ch);

Définir CURLOPT_RETURNTRANSFER comme TRUE soumet la page sous forme de chaîne au lieu de l'afficher directement. Ainsi, notre code prend les informations que nous devons récolter sur le site.

On peut jeter un œil à ces données via un echo avec la variable de stockage des données :

echo $output

Notre prochaine étape consiste à placer ces informations dans un document DOM, ce qui nous permettra d'y accéder à des fins de scraping.

$dom = new DOMDocument;

$dom->loadHTML($output);

Actuellement, nous avons nos informations sous forme de structure HTML à l'intérieur d'une variable. Générez un code supplémentaire pour imprimer chaque lien mis à disposition par la page HTML :

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

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

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

echo " - " . $link . " ";

}

Au fait, en tant que source de proxies géo-ciblés avec des opportunités d'essai gratuit de proxy payant, nous exhortons les utilisateurs à ne pas oublier de protéger leurs initiatives de scraping avec les adresses que nous fournissons (par exemple, nos IP résidentielles de premier ordre des FAI ou, alternativement, nos proxies mobiles de haute qualité). L'écosystème Dexodata montrera aux lecteurs comment procéder via cURL. Tout ce qu'ils doivent faire est de suivre la syntaxe.

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

Tout d'abord, la section <proxy-ip> est destinée à insérer l'IP, tandis que la seconde section <proxy-port> est destinée, prévisiblement, au numéro de port. Finalement, cela ressemblera à :

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

À condition que l'adresse soit fonctionnelle et que la requête soit réussie, notre script affichera le contenu de la présence pour ensuite sortir. 

 

Création d'un scraper : un scénario d'exemple

 

Imaginons une présence e-commerce avec une liste d'articles à vendre que nous voulons récolter via PHP. Que devrions-nous faire ? Quelles alternatives devrions-nous utiliser ? Suivez notre site web proxy de confiance et examinez ce scénario d'exemple.

Commencez par télécharger l'intégralité du HTML de la présence e-commerce via le potentiel de PHP et le bon vieux cURL, comme ceci :

// initialiser la requête cURL 

$curl = curl_init(); 

// définir l'URL à atteindre avec une requête HTTP GET 

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

// obtenir les données retournées par la requête cURL sous forme de chaîne 

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 

// faire en sorte que la requête cURL suive d'éventuelles redirections, 

// et atteindre la page finale d'intérêt 

curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); 

// exécuter la requête cURL et 

// obtenir le HTML de la page sous forme de chaîne 

$html = curl_exec($curl); 

// libérer les ressources cURL 

curl_close($curl);

Les éléments liés au HTML sont à notre entière disposition, sous la forme de la variable $html, comme le souligne Dexodata. Votre prochaine mesure est de charger $html dans une instance HtmlDomParser avec la fonction str_get_html(). Voyez comment cela peut être fait ci-dessous :

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); 

// initialiser HtmlDomParser 

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

Vous et notre site web proxy de confiance êtes maintenant en bonne position pour appliquer HtmlDomParser dans le but ultime de parcourir le DOM de la présence HTML et d'initier efficacement le processus de collecte de données.

C'est ce que Dexodata est sur le point d'accomplir. Pour y parvenir, "sauvez" la liste complète de tous les liens liés à la pagination dans notre scénario. Dans notre cas, cela nous donnera l'opportunité de parcourir l'ensemble de la section de la présence web. Faites un clic droit sur le composant HTML lié au chiffre de pagination et choisissez "Inspecter". Après cela, nos DevTools nous montreront l'élément DOM.

Comment collecter des données en PHP avec un site web proxy de confiance

Passons à l'écosystème de proxies géo-ciblés de Dexodata. On peut s'attendre à ce que le .page-numbers, en tant que classe CSS, identifie les composants HTML liés à la pagination. Cependant, l'équipe de notre site web proxy de confiance nous rappellerait que une classe CSS peut ne pas nécessairement identifier un composant HTML de manière unique. Plusieurs nœuds peuvent en fait être liés à la même classe unique.

Par conséquent, si votre intention est d'appliquer un sélecteur CSS pour récupérer les composants dans le DOM, il est inévitable d'appliquer la classe CSS avec d'autres sélecteurs. Plus précisément, les utilisateurs pourraient appliquer l'assistant HtmlDomParser, avec le sélecteur CSS .page-numbers, pour choisir tous les composants HTML liés à la pagination. Ensuite, notre écosystème de proxies géo-ciblés vous suggérerait d'itérer à travers eux pour récupérer chaque URL nécessaire directement à partir de l'attribut href.

Vérifiez cela :

// récupérer les éléments HTML de pagination avec 

// le sélecteur CSS ".page-numbers a" 

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

$paginationLinks = []; 

foreach ($paginationElements as $paginationElement) { 

// peupler l'ensemble paginationLinks avec l'URL 

// extraite de l'attribut href de l'élément HTML de pagination 

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

// éviter les doublons dans la liste des URLs 

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

$paginationLinks[] = $paginationLink; 

}  

}

// imprimer le tableau paginationLinks 

print_r($paginationLinks);

Faites attention au fait que find() permet aux utilisateurs de récupérer des composants DOM sur la base d'un sélecteur CSS. De plus, dans le scénario hypothétique de Dexodata, les composants liés à la pagination sont présents deux fois sur chaque page de la présence e-commerce. Il faut fournir une astuce unique et ajustée pour gérer le problème des composants en double lorsque le tableau $paginationLinks est en jeu.

Voici ce que nous verrons si nous essayons d'exécuter notre script pour le scénario :

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/ 

)

Notez que toutes les adresses possèdent une structure identique. C'est-à-dire qu'elles sont toutes marquées par le chiffre final responsable de la pagination. Si les lecteurs ont l'intention d'itérer sur chacune d'elles, la seule chose dont ils ont besoin est le chiffre identifiant associé à la dernière page.

Il est sujet à être récupéré comme montré ci-dessous :

// supprimer tous les caractères non numériques dans le dernier élément de 

// le tableau $paginationLinks pour récupérer le plus grand numéro de pagination 

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

Disons que notre $highestPaginationNumber sera "50".

Il est donc temps de récupérer les informations décrivant un produit individuel avec l'équipe Dexodata. Nous devons faire un clic droit sur un article et activer la fenêtre DevTools, suivie de "Inspecter". On peut s'attendre à ce qu'un article soit "composé de" un élément HTML li.product englobant une URL, une image, un titre et une étiquette de prix. Ces informations proviennent des composants HTML a, puis mg, puis h2, puis span, respectivement.

Le site web proxy de confiance Dexodata propose cette manière de récupérer ces informations via HtmlDomParser :

$productDataLit = array(); 

// récupérer la liste des produits sur la page 

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

foreach ($productElements as $productElement) { 

// extraire les données du produit 

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

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

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

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

// transformer les données du produit en un tableau associatif 

$productData = array( 

"url" => $url, 

"image" => $image, 

"name" => $name, 

"price" => $price 

); 

$productDataList[] = $productData; 

}

Une fois notre logique ayant réussi à récupérer tous les morceaux d'informations sur les articles d'une seule page et à les enregistrer ensuite sous forme de tableau $productDataList. Appliquez cette logique à chaque page.

// itérer sur toutes les pages "/shop/page/X" et récupérer toutes les données des produits 

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); 

// logique de scraping... 

}

Super ! Nous sommes arrivés à la situation où nous pouvons extraire des données comme prévu.

 

Remarques finales 

 

En gérant un écosystème de proxies géo-ciblés, nous aimerions finaliser ce guide avec quelques remarques. Essayez d'éviter d'être détecté et restreint en tant que scraper. Pour cela, nous vous rappelons les proxies que nous avons déjà mentionnés.

Voici un autre rappel sur la manière dont on peut ajouter leurs identifiants de proxy :

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

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

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

1. Une couche supplémentaire de protection peut être constituée par un en-tête HTTP user-agent. Par définition, cURL définirait toujours quelque chose comme curl/XX.YY.ZZ. Ce ne sera pas un gros problème de détecter un utilisateur avec un tel en-tête. Au lieu de cela, essayez de "jouer" avec l'en-tête ici.

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

En conséquence, vous placerez quelque chose comme ceci, un exemple trouvé sur 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. Une autre remarque de Dexodata est axée sur le contenu dynamique. Nous avons souligné que la requête GET cURL habituelle ne vous aidera pas avec cela, des techniques plus avancées seront nécessaires. Revenez à notre guide dédié à JS et apprenez-en plus sur les navigateurs sans tête, c'est-à-dire des packages logiciels de navigation sans interface utilisateur. Cela vous aidera à construire un scraper interagissant avec une présence comme un véritable utilisateur et extrayant du contenu dynamique simultanément.

3. Notre troisième remarque est dédiée au scraping parallèle. Le multi-threading en PHP est difficile mais parfois inévitable. Voici comment vous pouvez relever ce défi avec le site web proxy de confiance Dexodata. Notre concept est de permettre à votre script de scraping d'être exécuté sur plusieurs instances en appliquant des paramètres HTTP GET.

Modifiez le script afin qu'il n'itère pas sur toutes les pages et se concentre plutôt sur des morceaux parallèles plus petits. Voici comment on peut modifier le script et définir les limites d'un "morceau". Il suffit de définir quelques paramètres GET, comme souligné ci-dessous :

$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("Paramètres from et to invalides !"); 

// scrape uniquement les pages de pagination dont le numéro va 

// de "$from" à "$to" 

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

// logique de scraping... 

}

// écrire les données extraites dans une base de données/fichier

Cela vous préparera à initier plusieurs instances en activant plusieurs liens dans le navigateur :

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

et similaires.

Ils seront exécutés simultanément et scraperont la présence en parallèle. C'est tout. Merci de rester avec Dexodata, votre écosystème éthique de proxies mobiles, de centre de données et résidentiels avec toutes les normes KYC et AML appliquées.

Back

En savoir plus sur la Politique de cookies