Le web scraping avec PHP : un guide pas-à-pas

Apprenez à créer et à programmer facilement votre propre web scraper en PHP, à partir de zéro.
Web scraping with PHP
Daniel Shashko
Daniel Shashko | SEO Specialist
04-Sep-2022

PHP (Hypertext Preprocessor) est un langage de script pour le développement web, qui peut être utilisé pour la collecte de données web. Dans cet article, nous parlerons des points suivants :

Pourquoi utiliser PHP

PHP alimente actuellement environ 40 % du web, y compris des sites tels que WordPress, Slack et Facebook. Il s’agit de l’un des langages de script les plus populaires côté serveur pour le développement web. Si vous travaillez avec MySQL, sachez que leurs bases de données sont étroitement liées. C’est un langage relativement facile à apprendre, avec une bonne documentation et des bibliothèques qui peuvent réduire les délais de développement.

Commencer à travailler avec PHP

Ce guide présente une méthode de web scraping manuel par laquelle vous envoyez un bot à un serveur web et collectez des données en utilisant PHP comme langage de programmation de base. Il ne s’agit pas d’utiliser un outil de collecte de données entièrement automatisé capable de simplifier et de rationaliser l’ensemble du processus.

Ce web scraper fonctionne en envoyant une requête HTTP au serveur, puis en collectant le code du site web. Nous allons ensuite vous apprendre à analyser les informations récupérées.

Voici un exemple d’extrait de code qui peut apparaître dans l’en-tête d’un site web dont vous souhaitez extraire les données :

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

Une fois récupéré, ce code devra être analysé afin que le texte puisse être lu et compris par des analystes humains. Dans cet exemple, vous obtiendrez le texte brut suivant à l’issue de l’analyse :

‘This is a heading!’

Avant de commencer, assurez-vous que PHP est bien installé sur votre ordinateur.

Le web scraping avec PHP en 3 étapes faciles

Étape 1 : collecte du code de votre site web cible

Commencez par saisir le code suivant :

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

Au niveau des conventions de codage,

  • « <?php » et « ?> » sont utilisés dans toute la documentation PHP au début et à la fin des commandes.
  • La deuxième ligne définit une variable appelée « $code », qui se rapporte au contenu de l’URL en question. Dans cet exemple, nous ciblons l’URL : « http://quotes.toscrape.com ». Cela permet de stocker le code de l’URL dans la variable « $code ».

Vous préférez une solution de web scraping entièrement automatisée ?

Étape 2 : analyse de la page webÉtape 2 : analyse de la page web

La présente tâche a pour but de recueillir toutes les citations de ce site web :

Texte de citations sur un site web de citations

Cliquez avec le bouton droit de la souris sur votre page cible et cliquez sur « view page source » ; une nouvelle fenêtre contenant le code source s’ouvre. Dans notre exemple, vous remarquerez que toutes les citations sont contenues entre des balises , avec la classe « text », avec l’attribut itemprop également défini sur « text », comme suit :

Texte de citations sur un site web de citations

Nous allons commencer par utiliser PHP pour éliminer tout le texte indésirable dans le code, à l’exception des citations figurant entre les balises , puis afficher le texte sur notre écran en utilisant la fonction « 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;
?>

À la ligne 2, nous remplaçons toutes les occurrences de « > » dans le code par « <> ». Ceci permet de segmenter le code avec le signe « < » à la ligne 5. Nous disposons maintenant d’un tableau de toutes les balises dans le code. À la ligne 8, notre programme trouve l’emplacement de la balise ouvrante ; et, à la ligne 11, il trouve l’emplacement de la balise fermante .

Il suffit maintenant de récupérer le texte entre ces deux occurrences. Pour ce faire, nous créons une variable appelée « i » avec la valeur de l’emplacement de la variable de balise ouvrante. Nous créons ensuite une variable pour y conserver le résultat ultérieurement. À la ligne 16, le programme commence une boucle dans laquelle il prend chaque lettre après la balise ouvrante, en ajoutant la lettre à la valeur totale, puis il fait augmenter la variable « i ». Une fois la balise fermante passée, la boucle s’arrête.

Ensuite, le code supprime les 37 premiers chiffres de la chaîne finale car ces 37 premiers chiffres sont ceux de la balise que nous analysons – la balise . Enfin, il récupère le résultat final à l’aide de la fonction « echo ».

Une fois le programme exécuté, vous verrez quelque chose comme ceci :

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

Il s’agit de la première citation figurant sur le site web que nous parvenons à analyser sans aucun code « non convivial pour les humains ».

Étape 3 : en boucle

Vous avez peut-être remarqué que le programme ne collecte que la première occurrence, mais rien après. Pour résoudre ce problème, il suffit de supprimer les occurrences que nous venons de renvoyer, puis de répéter le processus jusqu’à ce que nous les ayons toutes récupérées. De plus, nous pouvons simplifier notre code en incorporant le processus de web scraping dans une fonction qui pourra être exécutée à chaque fois que nous en aurons besoin. Essayez d’utiliser ce code :

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

?>

Vous avez peut-être remarqué que notre code précédent a été incorporé dans une fonction appelée « parseCode », qui contient un paramètre appelé « $splitCode », afin de pouvoir accéder au code puis renvoyer le résultat avec la fonction « echo ». La fonction parseCode est exécutée à la ligne 27, puis à la ligne 28, notre programme supprime l’occurrence précédente de la balise fermante afin qu’elle puisse être répliquée. Les lignes 27 et 28 sont simplement répétées 3 fois afin que le programme puisse identifier un modèle et découvrir l’occurrence suivante.

Enfin, nous entrons la balise fermante en tant que variable globale avec la portée superglobale « $GLOBALS » ; et à la ligne 21, nous entrons des balises <p> autour de chaque ligne que le programme renvoie afin de créer une nouvelle ligne pour chaque nouvelle citation analysée. Voici le résultat :

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

Le résultat est exactement ce que nous recherchions. Pas de code, juste du texte lisible. Ce processus peut être répliqué pour presque n’importe quel site cible, par exemple eBay, afin d’obtenir des points de données cibles tels que le prix des produits, les avis et les UGS (unités de gestion des stocks).

Au final

Utiliser PHP pour le web scraping de données cibles peut être un processus efficace, quoique lent/manuel. Une alternative viable qui peut s’avérer intéressante pour les entreprises consiste simplement à acheter des jeux de données prêts à l’emploi. Vous économisez ainsi du temps et des ressources, ce qui vous permet, à vous et à votre équipe, de vous concentrer sur le développement de votre entreprise, la satisfaction de vos clients et le développement de vos produits essentiels.

Daniel Shashko
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.

Vous pourriez aussi être intéressé par

Le web scraping avec Python : guide pour débutants

Apprenez à faire du web scraping avec Python afin de recueillir rapidement des données sur plusieurs sites web, ce qui vous permet d’économiser du temps et des efforts.

Le scraping de données en temps réel

La technologie du web scraping, c’est-à-dire de la collecte automatisée de gros volumes de données publiques sur Internet, n’est plus à présenter. Diverses sociétés proposent des services de web scraping et un nombre croissant d’entreprises y recourent désormais. Cependant, le web scraping peut être utilisé de différentes manières : ainsi, certains utilisateurs peuvent se contenter de […]

Les 9 plus grands mythes au sujet du web scraping

Le web scraping a mauvaise réputation parce qu’il peut être utilisé à des fins malveillantes. Mais le web scraping peut également être utilisé à bon escient ! Dans ce post, nous allons dissiper quelques mythes répandus sur le web scraping afin que vous puissiez comprendre comment cette technologie peut être utilisée à bon escient
Youtube Scraper

L’importance du web scraping pour le commerce en ligne

Nous assistons aujourd’hui à un changement de paradigme technologique accompagné d’innovations qui conduisent les entreprises à repenser leurs pratiques. Internet a pris le pas sur l’environnement