Comment automatiser le web (robot, crawler, scraper) ?

Vous connaissez les macros sur Excel qui vous permettent d’abattre des tâches répétitives et de vous faire gagner un temps considérable ? Sur le web, il existe des technologies du même acabit grâces auxquelles vous n’effectuerez plus aucune tâche répétitive. On parle alors de robots, de crawling, de scraping, de data-mining…

Pourquoi est-il utile d’automatiser votre navigation sur le Web ?

  • Pour impressionner vos collègues et votre chef
  • Pour gagner en productivité (dès qu’une tâche est répétitive, vous l’automatisez ) et économiser votre temps.
  • Pour faire de la recherche fondamentale (par exemple analyser des champs lexicaux dans des blogs)
  • Pour surveiller les faits et gestes de vos concurrents (prix de leurs produits, nouveautés, etc.).
  • Pour faire une étude de marché complète et actualisée (par exemple en suivant les annonces de tel produit sur Leboncoin).
  • Pour tester automatiquement votre site Internet sur différents navigateurs.
  • Pour créer de nouveaux services sur Internet. Par exemple, le site de traduction Linguee compare les différentes versions (anglais, français, allemand, espagnol, etc.) des sites Internet connus et vous propose des traductions en contexte.
  • Pour avoir de forts gains en productivité dans votre business en remplaçant 100 opérateurs par 1 ingénieur.
  • Pour trouver des réponses à vos questions. Par exemple, il y a quelques années un ami avait reçu ses résultats pour les écoles de commerce et ne savait pas quelle école il allait intégrer : il devait attendre que les personnes mieux classées que lui choisissent leur école.  J’ai alors conçu un petit programme qui est allé chercher les résultats d’admissions de toutes les principales écoles de commerce, ce qui m’a permis de déduire d’une manière presque certaine l’école qu’il intégrerait.
  • En somme, Internet étant aujourd’hui présent sur votre mobile, chez vous et bientôt dans vos objets, le potentiel d’automatisation n’aura d’égal que votre imagination…

Comment s’y prendre ?

Il existe de nombreuses alternatives et il est souvent difficile de faire un choix technique au milieu de ce capharnaüm. Voici une tentative de catégorisation des technologies d’automatisation d’Internet :

I. Les services qui ne nécessitent pas de connaissances techniques

a) les sites Internet

Le site Internet IFTTT est un parfait exemple de l’automatisation très haut niveau. Ce web service vous permet d’interconnecter près de 70 web services, dont votre téléphone mobile. Il est par exemple possible de lier l’arrivée d’un nouvel article dans un blog avec l’envoi d’un texto et son archivage dans votre dropbox ou de répondre automatiquement lorsqu’on vous envoie un mail depuis Craigslist.

Les applications sont néanmoins limitées aux sites pris en charges par IFTTT et il vous sera par exemple très difficile de faire des choses aussi simples que de la veille sur les prix de vos concurrents.

b) Les modules pour Chrome et Firefox

Il est possible d’installer des logiciels directement sur votre navigateur Firefox ou Chrome. Ce sont des « modules ». Parmi la multitude de modules disponibles, il en existe qui vous permettent d’enregistrer des tâches et de les lancer ensuite un nombre infini de fois, un peu comme les macros dans Excel. Par exemple :

Le principal avantage est la facilité d’utilisation. Vous démarrez l’enregistrement puis vous effectuez une action directement dans votre navigateur. En revanche, pour des besoins plus complexes ou qui nécessitent d’accéder à un grand nombre de pages, cette solution est inadaptée.

II. Les services qui demandent la connaissance d’un langage de programmation

Je différencierai ici deux grandes familles de techniques : les techniques qui reposent sur l’utilisation et l’automatisation d’un navigateur Internet et les techniques plus bas niveau qui reposent sur la maîtrise du protocole HTTP que je vous présenterai ci-après.

a) L’automatisation d’un navigateur

Plutôt que de manier un navigateur à la main, vous pouvez dire à un langage de programmation ce que le navigateur doit faire. Par exemple :

  • Se rendre sur le site https://www.google.fr/
  • Taper « hello » dans la barre de recherche
  • Cliquer sur le bouton Recherche Google
  • Capturer l’écran de résultat
  • Stocker dans une base de données les 10 résultats
  • Cliquer sur le lien 2
  • etc.

Ces techniques sont très puissantes et tout ce que vous faîtes à la main peut être fait automatiquement. En particulier :

  • Aller sur un site Web
  • Compléter un formulaire (créer un compte, se connecter à un compte, etc)
  • Cliquer sur un bouton
  • Rechercher dans la page de résultat
  • Récupérer certaines informations
  • Insérer des conditions, des boucles, etc.
  • Faire une capture d’écran, télécharger des fichiers
  • Stocker les données dans une base de données
  • Lancer ce programme depuis 100 ordinateurs partout dans le monde
  • Tester un site Internet
  • Etc.

Les technologies que vous pouvez utiliser sont :

  • Selenium : marche dans la plupart des langages de programmation
  • Watir : repose sur Selenium et est très utilisé en Ruby
  • PhantomJS : respose sur le langage Javascript
  • Et bien d’autres selon le langage de programmation utilisé : Perl, Php, Python, Java, Javascript, C++, Ruby, C#, Asp, etc.

Leur principal avantage est leur facilité d’utilisation. Pas besoin donc de fouiller dans le code source du site pour faire du reverse engineering et comprendre ce qu’il se passe dans les coulisses. Vous y allez comme si vous naviguiez, de manière déclarative (aller ici, cliquer ici, récupérer telle info, etc.)

Leur principal inconvénient est leur lourdeur et leur lenteur puisque vous devez à chaque fois lancer et mimer un vrai navigateur Internet… Ceci peut être rédhibitoire si vous devez explorer plusieurs milliers de pages (chaque page peut prendre une seconde ou plus pour se charger).

De plus, si vous ne lancez pas ces navigateurs depuis votre propre ordinateur mais depuis un serveur distant (par exemple Amazon EC2 pour pouvoir lancer autant de machines en parallèle que vous souhaitez), il faudra installer les bons navigateurs en headless (c’est à dire sans affichage sur un écran), ce qui peut s’avérer complexe. Pour vous éviter de gérer votre flotte de machine distantes, il existe des solutions d’hébergement dans le cloud plus ou moins chères comme : Testingbot ou Saucelabs.

b) L’utilisation du protocole HTTP

La navigation sur Internet repose sur ce que l’on appelle le protocole HTTP. Il y a alors 4 actions principales que vous effectuerez :

– GET : c’est le fait de chercher une URL (une adresse web) et d’afficher une page

– POST : c’est le fait de poster un formulaire (par exemple vous connecter à Facebook ou poster une annonce sur Weesper).

– PUT : c’est le fait de modifier une information : vous mettez à jour cette même annonce sur Weesper

– DELETE : c’est le fait de supprimer une information : vous venez de supprimer votre annonce sur Weesper.

Naviguer sur Internet n’est rien d’autre que d’effectuer les 4 actions précédentes un certain nombre de fois.

Par exemple une recherche Google pourrait être schématisée par les actions suivantes :

  • en allant sur google.com vous effectuez un premier GET pour afficher la page
  • vous complétez le formulaire de recherche et appuyez sur le bouton : alors un GET avec comme information votre recherche (le fameux #q=hello de l’url https://www.google.fr/#q=hello) est envoyé aux serveurs de Google qui vous renvoie la page de résultats

Pour une utilisation de Facebook :

  • Vous allez sur Facebook.com et un GET affiche la page
  • Vous entrez vos identifiants de connexion et cliquez sur « connexion », une requête POST est effectuée avec comme informations votre identifiant et votre mot de passe cryptés et en réponse la page de notification s’affiche

Ces actions sont très faciles à automatiser via n’importe quel langage de programmation (comme Python, Ruby, Php, Java, C#, C++, Perl, Javascript, etc.).

Plutôt que d’utiliser un navigateur complet, pourquoi ne pas automatiser directement ce qu’il se passe dans les coulisses de ce dernier ? C’est la méthode la plus rapide et la plus puissante, mais aussi la plus compliquée à mettre en place.

En Ruby par exemple vous aurez : Mechanize, Nokogiri, Hpricot, ScRUBYt, etc.

Historiquement, Python est le langage le plus utilisé pour réaliser ce genre de tâches et traiter ensuite les informations collectées. Scrapy en Python est donc sans doute l’outil le plus populaire et c’est personnellement celui que j’utilise.

Les limites de ces techniques

Les limites légales

Le web n’est plus tout à fait le Far West et certaines règles déontologiques et légales ont été instaurées. En effet, certaines personnes malveillantes pourraient utiliser les techniques mentionnées précédemment à des fins malicieuses. Par exemple

  • Pour spammer (tous ceux qui ont un blog connaissent les spams aux commentaires)
  • Pour pirater le site de ses concurrents
  • Pour récupérer des informations sur des personnes (toute base de données sur des personnes doit être déclarée à la CNIL en France)
  • Pour s’approprier des informations chez ses concurrents

Je rejette toute responsabilité de l’utilisation que vous pourrez faire des précédentes techniques et vous invite à prendre les précautions suivantes.

La première pratique est de suivre le mode de fonctionnement des robots des moteurs de recherche. Ces derniers commencent par ouvrir un fichier nommé robot.txt qui dit quelles pages du site sont indexables. Evitez ensuite d’explorer des pages interdites.

En second lieu, lisez les conditions générales d’utilisation ou de vente (CGU ou CGV) du site que vous allez explorer. Si le site en question ne vous autorise pas à collecter et utiliser ses données, il est fort probable que cela sera mentionné dans ses CGU.

Enfin, en France, le droit est particulièrement protecteur de la propriété des données. En effet, il existe un statut légal d’hébergeur de données dans lequel entrent de nombreux sites (PAP par exemple). Dans ce cas, il vous est interdit de collecter et d’utiliser une partie substantielle des données dudit site. La jurisprudence à ce sujet est fournie et je vous invite alors à la plus grande prudence comme le montre les différents contentieux entre le groupe NERESSIS (éditeur du site PAP) et certains de ses concurrents peu scrupuleux.

Les limites techniques

Crawler le web peut rapidement s’avérer complexe. Ce n’est pas pour rien que Google embauche les meilleurs ingénieurs… Vous sous heurterez notamment aux problèmes suivants :

  • Votre adresse IP pourra vite être bloquée par le site cible
  • Où stocker les données, surtout si vous en disposez d’un grand nombre (big data)
  • Comment accélérer le crawling (notamment en lançant plusieurs serveurs en parallèle)
  • Comment maintenir le code (les sites cibles peuvent changer)
  • Que faire s’il y a des captcha (les fameuses photos qui ne peuvent être lues par un robot)
  • Comment faire si le site utilise des cookies

Une fois que vous avez collecté des données, vous aurez ensuite besoin de les traiter et de les visualiser. Ces deux disciplines sont elles aussi très complexes et ne sont pas traitées dans cet article.

En conclusion, j’espère que vous avez maintenant un meilleur aperçu de ce qu’il est possible de faire en automatisant Internet. Pour aller plus loin et sans déflorer le sujet d’un futur article, nous sommes dans une ère de l’internet sémantique. L’automatisation présentée précédemment n’est que le premier pas d’une grande tendance. Depuis quelques années, de nombreux sites sont allés plus loin et ont ouvert leur service, non plus uniquement à des hommes derrière un navigateur, mais à d’autres sites et à des ordinateurs via ce que l’on appelle des API. Plutôt que de protéger leurs données contre une utilisation intempestive par des robots, ces sites ont compris la valeur qu’ils pourraient retirer de l’ouverture de leurs services et données à des tiers. Un exemple connu est Facebook qui a offert un accès à sa plateforme à des développeurs pour interagir avec sa communauté (Graphe Facebook, Facebook Connect, Like etc). Facebook n’est ni le seul ni le premier. Dans son sillage, toujours plus de services sur Internet sont aujourd’hui ouverts aux développeurs…

Comment automatiser le web (robot, crawler, scraper) ?

6 réflexions au sujet de « Comment automatiser le web (robot, crawler, scraper) ? »

  1. Bonjour, il y a également un nouvel outil que nous venons de sortir qui pourrait intéresser grand nombre: Myddleware.
    C’est une nouvelle plate-forme française qui automatise le transfert de données entre diverses applications web de façon simple, personnalisable et c’est sans abonnement. Conçue pour faire gagner du temps aux entreprises dans l’exécution de leurs tâches quotidiennes, Myddleware se connecte régulièrement à de nouvelles applications touchant à divers secteurs (CRM, Réseaux sociaux, Outils d’emailing etc).
    Myddleware connecte déjà Prestashop, SugarCRM, Salesforce, Dolist…Découvrez-en plus sur les applications connectées à http://www.myddleware.fr

  2. bonjour,
    j’utilise Imacro. Mais j’ai un souci !
    quand je remplis un formulaire sur un site web, il m’indique une erreur à mon avis due au captcha. Y a t il un moyen de le contourner ?
    D’avance merci.

  3. Bonjour,

    Si votre adresse IP est bloquée par le site cible, vous pouvez utiliser Luminati.io, un service qui vous permet d’envoyer des requêtes via un réseau de P2P constitué de 15 millions d’adresses IPs.

    N’hésitez pas à me contacter par email (marie@luminati.io) si vous êtes intéressés ou créer directement un compte pour avoir un essai gratuit de 7 jours:
    https://luminati.io/?affiliate=L_marie

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *