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