L’extraction de données web, ou « web scraping », consiste habituellement à récupérer des informations depuis le code HTML généré lors de l’affichage d’une page web.
Le métagrabage, ou « metascraping », se focalise spécifiquement sur l’extraction des métadonnées d’une page web, en ciblant les balises méta.
Les métadonnées d’une page web sont des informations descriptives qui ne portent pas sur le contenu lui-même, mais sur la page. On peut citer par exemple le nom de l’auteur, le titre de la page, ou sa description.
Ces informations aident les utilisateurs et les moteurs de recherche à mieux comprendre le sujet de la page. Le métagrabage permet donc une collecte rapide d’informations essentielles sur une page web, en un minimum de temps.
Il existe plusieurs méthodes pour extraire les métadonnées d’une page web. On peut effectuer un « scraping » manuel, utiliser une bibliothèque logicielle, ou recourir à une API, comme celle proposée par toptips.fr pour le métagrabage.
Différentes approches pour l’extraction de métadonnées
L’extraction manuelle peut se faire en utilisant les outils de développement d’un navigateur comme Chrome DevTools, en explorant l’onglet « Éléments ». Cependant, cette méthode est répétitive, fastidieuse et peu pratique quand il s’agit de nombreuses pages. Heureusement, il est possible d’automatiser cette tâche grâce à différentes approches :
La première approche consiste à développer un script sur mesure. Cela implique de faire une requête HTTP vers le site web ciblé pour extraire les métadonnées. Il faut ensuite analyser la réponse HTML pour identifier et extraire les données des balises méta, en utilisant des expressions régulières ou une méthode de correspondance de modèles. Toutefois, cette approche revient à réinventer la roue et à perdre du temps à recoder une solution qui existe déjà.
La seconde approche consiste à utiliser une bibliothèque spécifique dans votre langage de programmation préféré. Cela permet de simplifier la tâche en cachant les détails techniques. Cependant, si votre langage de programmation ne possède pas de bibliothèque adaptée ou si la plateforme d’exécution que vous utilisez ne prend pas en charge la bibliothèque, cette option devient inutilisable.
La troisième approche consiste à utiliser une API spécialisée comme l’API Metascraping de toptips.fr. Cette solution est très intéressante car elle offre une interface uniforme, quel que soit le langage de programmation utilisé. Elle est compatible avec tous les langages capables d’effectuer des requêtes HTTP.
Cet article va vous montrer comment utiliser l’API de métagrabage de toptips.fr avec cURL, PHP et JavaScript (NodeJS).
Par rapport aux inconvénients des autres approches, les avantages de l’utilisation de l’API toptips.fr sont :
- Elle est indépendante du langage et de l’environnement d’exécution.
- Elle vous évite de réinventer la roue et vous fait gagner du temps dans l’écriture de code.
- Elle permet d’extraire les données de plusieurs sites web très rapidement.
- Elle est extrêmement facile à utiliser.
- Son utilisation est gratuite.
Premiers pas avec l’API toptips.fr
Pour utiliser l’API de toptips.fr, vous aurez besoin d’une clé API. Pour en obtenir une, rendez-vous sur le site de toptips.fr et créez un compte gratuit. Une fois votre compte créé, connectez-vous au tableau de bord. Votre clé API devrait y être affichée.
Le point de terminaison de l’API se trouve à l’adresse https://api.toptips.fr.com/metascraping. Lorsque vous faites une requête, vous devez fournir votre clé API dans l’en-tête de la requête, en utilisant le nom « x-api-key ». La valeur associée est votre clé API.
Vous devrez également fournir des paramètres supplémentaires dans le corps de la requête. Ces paramètres sont l’URL, le type d’appareil (« device ») et le pays du proxy (« proxyCountry »).
- L’URL spécifie l’adresse web de la page dont vous souhaitez récupérer les métadonnées.
- Le paramètre « device » spécifie le type d’appareil utilisé pour accéder au site lors de la récupération des métadonnées. Les options sont « mobile » ou « desktop ».
- Le « proxyCountry » spécifie le pays depuis lequel la requête doit être effectuée avant l’extraction des données. Toutefois, cette fonctionnalité est premium et n’est disponible que dans les plans payants de toptips.fr.
Étant donné que les paramètres seront transmis dans le corps de la requête, celle-ci doit être de type POST, car les requêtes GET ne peuvent pas inclure de métadonnées.
Pour la première démonstration, nous allons utiliser l’utilitaire cURL en ligne de commande pour interroger l’API Metascraping. Vous devez donc commencer par installer cURL sur votre machine.
J’utiliserai un terminal Bash, qui est le terminal par défaut sur macOS et Linux. Pour Windows, vous devrez installer Git Bash.
Une fois cURL installé, nous pouvons l’utiliser pour effectuer la requête. Nous allons lui fournir différentes options pour définir les paramètres de la requête : la méthode de la requête, le point de terminaison, le corps de la requête et les en-têtes de la requête.
curl -X POST https://api.toptips.fr.com/metascraping -d '{ "url": "https://tesla.com" }' -H 'Content-Type: application/json' -H 'x-api-key: <API_KEY>'
Note : La barre oblique inverse à la fin des trois premières lignes permet de diviser la commande sur plusieurs lignes.
Cette commande indique que la méthode HTTP utilisée est POST et que le point de terminaison est celui de l’API de métagrabage de toptips.fr.
Nous envoyons également le corps de la requête sous forme d’objet JSON avec une propriété « url » définie sur https://tesla.com. Enfin, nous avons ajouté des en-têtes pour spécifier que le type de contenu du corps est JSON et que la clé API est fournie avec l’en-tête « x-api-key ».
Lorsque nous exécutons cette commande, nous obtenons le résultat suivant :
{"timestamp":1669328564856,"apiStatus":"success","apiCode":200,"meta":{"url":"https://tesla.com","device":"desktop","test":{"id":"1fh2c30i05vmvxb99pdh6t6hze2x72jv"}},"data":{"author":null,"date":null,"description":"Tesla is accelerating the world’s transition to sustainable energy with electric cars, solar and integrated renewable energy solutions for homes and businesses.","image":"https://tesla-cdn.thron.com/delivery/public/image/tesla/6139697c-9d6a-4579-837e-a9fc5df4a773/bvlatuR/std/1200x628/Model-3-Homepage-Social-LHD","logo":"https://tesla.com/themes/custom/tesla_frontend/assets/favicons/favicon-196x196.png","publisher":"Tesla","title":"Electric Cars, Solar & Clean Energy | Tesla","url":"https://www.tesla.com/","lang":"en"}}
C’est le résultat attendu.
Pour ce projet, nous allons développer un script NodeJS afin de récupérer les données de l’API. Vous devrez donc installer NodeJS. Vous aurez également besoin de NPM ou d’un autre gestionnaire de paquets pour que Node puisse gérer les dépendances du projet. J’utiliserai également le terminal Bash pour exécuter les commandes.
Pour utiliser l’API en JavaScript, commencez par créer un dossier de projet vide et ouvrez-le dans un terminal.
mkdir metascraping-js && cd metascraping-js
Ensuite, créez le fichier dans lequel nous allons écrire le script :
touch index.js
Ensuite, initialisez le projet en tant que projet Node :
npm init -y
Pour utiliser la syntaxe ESModule dans notre fichier, ajoutez la ligne ` »type »: « module »` à la racine du fichier package.json, de sorte qu’il ressemble à ceci :
{ "name": "metascraping", "version": "1.0.0", "description": "", "main": "index.js", "type": "module", "scripts": { "test": "echo "Error: no test specified" && exit 1" }, "keywords": [], "author": "", "license": "ISC", }
Ensuite, nous allons installer le paquet « node-fetch ». Ce paquet fournit une fonction « fetch » dans NodeJS similaire à la fonction « fetch » du navigateur. Cela simplifie la création de requêtes HTTP dans NodeJS, plutôt que d’utiliser le module http intégré.
npm install node-fetch
Une fois le paquet installé, nous pouvons commencer à éditer le script. Ouvrez le fichier « index.js » à l’aide d’un éditeur de texte de votre choix. Dans mon cas, j’utiliserai l’éditeur de texte nano, qui fonctionne en terminal.
nano index.js
Dans le fichier « index.js », nous allons commencer par importer la fonction fetch, qui est l’export par défaut du module « node-fetch ».
import fetch from 'node-fetch'
Ensuite, nous allons définir le corps de notre requête. Il s’agit d’une chaîne JSON avec une propriété « url ». La valeur de la propriété « url » est la page web dont nous voulons obtenir les métadonnées.
const body = JSON.stringify({ url: 'https://spacex.com' });
Ensuite, définissons les options de la requête que nous allons transmettre à la fonction « fetch » lors de son appel.
const options = { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-api-key': <YOUR API KEY here> }, body: body }
Nous avons défini la méthode de la requête comme étant une requête POST. Nous avons également défini deux en-têtes. L’un spécifie que le corps contient des données JSON et l’autre fournit la clé API.
Vous pouvez remplacer « <YOUR API KEY> » par votre clé API réelle. En pratique, la clé API ne doit pas être écrite en dur dans le fichier, mais chargée via des variables d’environnement. Enfin, nous avons spécifié la propriété « body » comme étant la valeur de la constante « body » définie précédemment.
Finalement, nous effectuons l’appel à fetch :
fetch('https://api.toptips.fr.com/metascraping', options) .then(response => response.json()) .then(json => console.log(json))
Ici, nous avons appelé la fonction « fetch », en lui transmettant le point de terminaison de l’API et les options que nous avons définies précédemment. Étant donné que « fetch » renvoie une promesse, nous y avons attaché un rappel qui analyse les réponses JSON en utilisant « then ».
Le rappel renvoie une autre promesse et, lorsqu’elle se résout, nous allons afficher l’objet renvoyé dans la console avec « console.log() ».
Finalement, voici le contenu du fichier :
import fetch from 'node-fetch' const body = JSON.stringify({ url: 'https://spacex.com' }); const options = { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-api-key': <YOUR API KEY here> }, body: body } fetch('https://api.toptips.fr.com/metascraping', options) .then(response => response.json()) .then(json => console.log(json))
Pour exécuter le script, enregistrez les modifications, fermez nano (ou l’éditeur de texte que vous utilisez) et saisissez la commande suivante :
node .
Vous devriez obtenir les métadonnées suivantes :
{ timestamp: 1669305079698, apiStatus: 'success', apiCode: 200, meta: { url: 'https://spacex.com', device: 'desktop', test: { id: '8m3srgqw06q2k8li5p6x70s8165d6e2f' } }, data: { author: null, date: null, description: 'SpaceX designs, manufactures and launches advanced rockets and spacecraft.', image: 'https://www.spacex.com/static/images/share.jpg', logo: 'https://spacex.com/static/images/favicon.ico', publisher: 'SpaceX', title: 'SpaceX', url: 'http://www.spacex.com/', lang: 'en' } }
Utilisation de l’API toptips.fr avec PHP
Pour utiliser l’API Metascraping de toptips.fr, assurez-vous d’abord que PHP et Composer sont installés sur votre machine locale.
Pour commencer, créez et ouvrez le dossier de projet :
mkdir metascraping-php && cd metascraping-php
Ensuite, installez GuzzleHTTP. Guzzle est un client HTTP pour PHP que vous pouvez utiliser avec l’API toptips.fr.
composer require guzzlehttp/guzzle
Une fois Guzzle installé, vous pouvez créer un script avec la commande suivante :
touch script.php
Nous pouvons maintenant commencer à écrire du code. Ouvrez le fichier « script.php » à l’aide de l’éditeur de texte de votre choix (j’utiliserai nano).
nano script.php
À l’intérieur du script, insérez la balise d’ouverture et de fermeture PHP :
<?php // Tout le code ici ?>
Maintenant, pour charger les extensions, importez les classes Request et Client de Guzzle. Ce code doit être écrit entre les balises `<?php` et `?>` que nous venons de créer.
require_once('vendor/autoload.php'); use GuzzleHttpClient; use GuzzleHttpPsr7Request;
Ensuite, nous pouvons créer un client en instanciant la classe `GuzzleHttpClient` :
$client = new GuzzleHttpClient();
Nous pouvons maintenant définir les en-têtes de la requête. Nous fournirons deux en-têtes : un qui spécifie que le type de contenu du corps est JSON et l’autre contenant notre clé API.
$headers = [ 'x-api-key' => <YOUR API KEY HERE>, 'Content-Type' => 'application/json' ];
Remplacez « <YOUR API KEY HERE> » par votre clé API réelle depuis le tableau de bord de l’API toptips.fr.
Ensuite, nous définissons le corps. Dans notre cas, le corps sera une chaîne JSON avec la propriété « url » définie sur « https://twitter.com ».
$body = json_encode([ "url" => "https://twitter.com" ]);
Pour créer une requête, nous instancions la classe « Request » que nous avons importée précédemment, en transmettant la méthode de la requête, le point de terminaison, les en-têtes et le corps de la requête.
$request = new Request('POST', 'https://api.toptips.fr.com/metascraping', $headers, $body);
Nous pouvons ensuite utiliser le client pour envoyer la requête.
$response = $client->sendAsync($request)->wait();
Enfin, nous pouvons extraire le corps de la requête et l’afficher dans la console.
echo $response->getBody();
Si vous avez correctement copié le code, le fichier « script.php » devrait ressembler à ceci :
<?php require_once('vendor/autoload.php'); use GuzzleHttpClient; use GuzzleHttpPsr7Request; $client = new GuzzleHttpClient(); $headers = [ 'x-api-key' => <YOUR API KEY>, 'Content-Type' => 'application/json' ]; $body = json_encode([ "url" => "https://twitter.com" ]); $request = new Request('POST', 'https://api.toptips.fr.com/metascraping', $headers, $body); $response = $client->sendAsync($request)->wait(); echo $response->getBody(); ?>
Enregistrez le script, fermez-le et exécutez-le en utilisant la commande suivante :
php script.php
Vous devriez obtenir le résultat suivant :
{ "timestamp":1669322100912, "apiStatus":"success", "apiCode":200, "meta": { "url":"https://twitter.com", "device":"desktop", "test":{ "id":"wn1nj30r04bk0ijtpprwdqmtuirg9lze" } }, "data":{ "author":null, "date":null, "description":"The latest stories on Twitter - as told by Tweets.", "image":"https://abs.twimg.com/a/1602199131/img/moments/moments-card.jpg", "logo":"https://abs.twimg.com/responsive-web/client-web/icon-ios.b1fc7279.png", "publisher":"Twitter", "title":"Explore", "url":"https://twitter.com/explore", "lang":"en" } }
Conclusion
Ce guide vous a présenté différentes manières d’utiliser l’API Metascraping de toptips.fr.
L’API Metascraping vous permet également de fournir plus de paramètres que l’URL. L’un de ces paramètres est le paramètre « proxy », accessible uniquement dans le cadre du plan premium de l’API toptips.fr. Quoi qu’il en soit, l’API toptips.fr reste très puissante pour de nombreux cas d’utilisation.
Consultez la documentation officielle de l’API toptips.fr pour plus d’informations.