Le scraping client-side avec Artoo.js

Alexis Jacomy - @jacomyal

Human Coders Nantes, mars 2015

2013 - 2014

2014 - aujourd'hui

Humanités numériques

Veille concurentielle

Analyse de données

Comment récupérer les données du Web ...

... de manière réutilisable
 par des non-développeurs ?

Scraper depuis le navigateur

Une solution:

Les bénéfices :

  • Un contexte d'exécution propre : le DOM
  • Un contexte d'exécution dynamique avec le JavaScript
  • Les outils de débogage du navigateur
  • Réutilisable avec des bookmarklets
  • Aucun serveur à déployer

Un outil :

développé par Guillaume Plique

Sciences-Po médialab

Les killer features :

Récupérer des liens depuis une page Reddit

Démo :

Récupérer le bookmarklet de Artoo

Étape 1

drag-n-dropper le logo depuis le site Web

dans la barre de favoris

Trouver le bon sélecteur

Étape 2

en utilisant l'inspecteur du DOM

du navigateur et document.querySelectorAll

document.querySelectorAll('#siteTable .thing .entry a.title');

Récupérer les liens

Étape 3

avec Artoo, ça donne :

artoo.scrape(
  '#siteTable .thing .entry a.title',
  {
    title: 'text',
    url: 'href'
  }
);

Récupérer les liens

Étape 4

// On utilise le même scraper :
var scraper = {
  iterator: '#siteTable .thing .entry a.title',
  data: { title: 'text', url: 'href' }
};

// On scrape la première page (celle ouverte) :
var frontpageData = artoo.scrape(scraper);

// On scrape les pages suivantes :
artoo.ajaxSpider(
  // Cette fonction va déterminer, en fonction de
  // la dernière page scrapée, l'URL de la suivante :
  function(i, $data) {
    var $context = i ? $data : artoo.$(document);

    return (
      $context
        .find('.nav-buttons .nextprev a[rel~="next"]')
        .attr('href')
    );
  },
  {
    limit: 2,
    scrape: scraper,
    concat: true,
    done: function(data) {
      // On ajoute les datas de la première page :
      data = frontpageData.concat(data);
      console.log(data);
    }
  }
);

avec les spiders de Artoo :

des pages suivantes

Exporter les données

Étape 5

avec les helpers dédiés :

artoo.saveCsv(data);

Générer un bookmarklet

Étape 5

grâce à l'outil dédié

Merci beaucoup !