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

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

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. 

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 « ; 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.”

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

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.

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?