Logo Le ReacteurLogo Le Reacteur
Bootcamp
Entreprises
RecruteursÉvénementsBlogPostuler

Tutoriel

L’art du scraping II : Projet LDLC

19 juillet, 2017

--- Kévin Lemaire

Ce projet présente un cas concret d’extraction de données du célèbre site de e-commerce spécialisé dans la High-Tech : E̶ ̶C̶o̶r̶p̶ LDLC.

Vous apprendrez comment :

  • Simuler la navigation d’un utilisateur
  • Prendre des captures d’écrans
  • Appréhender la pagination d’un site

Attention cet exemple est donné à titre éducatif uniquement ! (sinon) 😈)

Les objectifs

Pour ce projet, nous allons choisir un produit au hasard parmi la large sélection de ce site de e-commerce, charger la page web, puis naviguer entre les différentes pages d’avis et prendre une capture d’écran à chaque fois.

1 - Charger une page produit

Par exemple : http://www.ldlc.com/fiche/PB00180177.html

credit

2 - Naviguer vers la page d’avis liée au produit

credit

3 - Prendre une capture d’écran

credit

4 - Appréhender la pagination du site

credit

Le “hack”

La personnalisation de la fonction create()

La fonction create() accepte un argument unique, qui est un objet JavaScript standard. Celui-ci va nous permettre de personnaliser notre instance casper.

var casper = require('casper').create({
  // Les options
});

Les options principales :

  • verbose : par défaut “false” - la valeur “true” indiquera à Casper d’écrire chaque message enregistré dans le logLevel, de sorte que nous puissions suivre chaque étape lors de l’exécution.
  • logLevel : peut prendre 4 valeurs : “debug”, “info”, “warning” et “error”.
  • clientScripts : permet d’injecter des librairies JavaScript, par exemple JQuery ou Lodash. pageSettings : Cette option prend aussi un argument unique, qui est un objet JavaScript standard, dont voici les options principales :
  • imageLoad : par défaut “true” - Casper procède au chargement des images.
  • loadPlugins : par défaut “true” - Casper procède au chargement des plugins.
  • userAgent : Quand vous visitez une page Web, des informations comme le nom du navigateur, la version, le système d’exploitation, la langue, et d’autres sont envoyées au serveur pour identifier l’agent utilisateur. Ces informations sont incluses dans la requête HTTP.

Le site whatsmyuseragent.org vous permettra de connaitre votre “User-Agent” actuel.

Voici la configuration de notre instance casper pour ce projet :

var casper = require('casper').create({
  verbose: true,
  logLevel: 'error',
  pageSettings: {
    loadPlugins: false,
    userAgent:
      'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36',
  },
});

Le coeur de notre script

Notre programme va tout d’abord charger une page produit, dont l’URL est stockée dans la variable url. Puis naviguer vers la page d’avis, en cliquant sur le bouton correspondant au sélecteur : ‘span.noteliens a.button’. Attendre le chargement de cette page en attendant un sélecteur (‘.ssTitle’). Enfin, exécuter la fonction pagination(), qui va nous permettre de naviguer entre les différentes pages d’avis et prendre une capture d’écran à chaque fois.

var url = 'http://www.ldlc.com/fiche/PB00180177.html';
casper
  .start(url)
  .echo('Navigating to the reviews page')
  .thenClick('span.noteliens a.button')
  .waitForSelector('.ssTitle', pagination)
  .run();

La gestion de la pagination et la capture d’écran

La fonction pagination() est une fonction récursive. Elle permet de prendre une capture d’écran et de naviguer vers la page suivante. Tant qu’elle n’a pas atteint la page maximum que nous avons déterminer - dans notre cas 3 - elle continue de s’auto-exécuter.

Lorsque le programme entreprend de charger une nouvelle page, la variable currentPage est incrémentée. Une condition permet de sortir de la boucle dès que la fonction pagination() a été exécutée le nombre de fois désiré (ici 3 fois).

La fonction capture() va nous permettre de prendre une capture d’écran de nos pages d’avis.

La navigation vers la page suivante est assurée en cliquant sur le bouton “Page suivante”, correspondant au sélecteur : ‘.pagerLastNextGroup a’.

var currentPage = 1;
function pagination() {
  casper
    .echo('Capturing page ' + currentPage)
    .wait(1000, function() {
      this.capture('ldlc-reviews-page-' + currentPage + '.jpg');
    })
    .then(function() {
      currentPage++;
    })
    .then(function() {
      if (currentPage <= 3) {
        this.echo('Requesting next page: ' + currentPage);
        this.thenClick('.pagerLastNextGroup a');
        return pagination.call(casper);
      }
    });
}

C’est tout 😎

Lancer votre script pour obtenir des captures d’écrans des 3 premières pages - ou plus - des avis d’un produit proposé par sur le site LDLC.

Code complet :

var casper = require('casper').create({
  verbose: true,
  logLevel: 'error',
  pageSettings: {
    loadPlugins: false,
    userAgent:
      'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36',
  },
});
var url = 'http://www.ldlc.com/fiche/PB00180177.html';
var currentPage = 1;
function pagination() {
  casper
    .echo('Capturing page ' + currentPage)
    .wait(1000, function() {
      this.capture('ldlc-reviews-page-' + currentPage + '.jpg');
    })
    .then(function() {
      currentPage++;
    })
    .then(function() {
      if (currentPage <= 3) {
        this.echo('Requesting next page: ' + currentPage);
        this.thenClick('.pagerLastNextGroup a');
        return pagination.call(casper);
      }
    });
}
casper
  .start(url)
  .echo('Navigating to the reviews page')
  .thenClick('span.noteliens a.button')
  .waitForSelector('.ssTitle', pagination)
  .run();

Si vous souhaitez vous former au JavaScript auprès de passionnés, nous proposons des formations au développement web (React JS) ou mobile (React Native). N’hésitez pas à visiter LeReacteur.io

Kévin Lemaire

Partager l'article

Apprendre à coder

Apprendre à coder : Quelle formation est faite pour vous ?

25 juillet 2019

Xavier Colombel

Apprendre à coder

Apprendre à coder : Quelle formation est faite pour vous ?

25 juillet 2019

Xavier Colombel

Ça y est, 2019 est l’année où vous avez décidé de passer le cap. S’offre alors à vous un choix de formations toutes plus différentes les unes que les autres, que ce soit sur la durée, le mode d’apprentissage, le coût, etc. Bref, il va falloir faire un choix et si possible… le bon : votre avenir professionnel dépend de ça. Mais comment s’y retrouver dans cette jungle digitale ? Je vais essayer de vous donner quelques conseils, le plus objectivement possible.

Le Reacteur

88 rue du Faubourg du Temple

75011 - Paris, France

oi.ruetcaerel@tcatnoc
  • +33 (0)1.79.738.728
  • Déclaration d'activité n° 11755531275

    Référencement DataDock n° 0029509

    Bootcamp

    Developpeur Web et Mobile - Temps PleinDeveloppeur Web et Mobile - Temps Partiel
    Logo SyntecLogo DatadockLogo Pole EmploiLogo Défi MétiersLogo Île de France

    2019 © Le Reacteur Tous droits réservés - Made with React