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) IFTTT

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.

C) DES SITES SPECIALISES

Si vous souhaitez automatiser un site spécialisé (par exemple leboncoin), il est possible qu’il existe déjà un site spécialisé. Par exemple, cet article passe en revue les différentes solutions pour recevoir des alertes leboncoin par email sur une recherche particulière.

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

Je différencierai ici trois grandes familles de techniques : les techniques qui reposent sur l’utilisation et l’automatisation d’un navigateur Internet, les techniques plus bas niveau qui reposent sur la maîtrise du protocole HTTP et enfin les sites/applications qui permettent de configurer un robots avec du code (souvent JavaScript) mais qui hébergent le robot pour vous.

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 : permet d’automatiser Google, IE, Firefox, PhantomJS. C’est un outil très utilisé pour faire des tests. Il y a des bindings dans la plupart des gros langages de programmation.
  • Watir : repose sur Selenium et offre une API plus simple en Ruby
  • PhantomJS : est un navigateur internet (comme Chrome ou Firefox) simplifié pour le scraping et écrit en Javascript. Il peut être utilisé avec ou sans Selenium.
  • 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). Vous allez également télécharger toute la page, images, publicités et css inclus par défault ce qui peut multiplier par 10 ou 100 le volume de téléchargement.

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

Si vous voulez éviter de télécharger toute la page et aller droit à la donnée qui vous intéresse, vous allez directement devoir construire la requête HTTP qu’il faut.

1) Qu’est ce que HTTP

La navigation sur Internet repose sur un protocole que l’on appelle HTTP qui repose sur TCP/IP. Il y a alors 4 actions (verbes) 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)

– PUT : c’est le fait de modifier une information

– DELETE : c’est le fait de supprimer une information

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

2) Exemple de reuqetes HTTP

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

3) EN pratique comment savoir quelles requetes http sont realisees par le navigateur?

Donc votre navugateur fait de nombreuses requêtes HTTP lorsque vous naviguez sur Internet. Comment savoir ce qui se passe dans les coulisses? Sur chrome, vous pouvez utiliser l’outils pour développeurs (clic droit et ‘inspect’/’inspecter’)

Vous verrez alors les différentes requêtes réalisées comme dans l’image suivante. Attention, si vous n’êtes pas ingénieur/développeur, cela vous paraîtra complexe car les requêtes HTTP ont de nombreux Headers…

outil-pour-developpeurs-chrome

Firefox a un outil similaire et le plugin Firebug est encore mieux car il permet de faire des recherches précises sur le contenu d’une page et d’afficher directement la requêtes HTTP correspondante.

4) VOtre robot http

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 sans doute l’outil le plus populaire.

Néanmoins, il n’est pas compliqué de réaliser son propre script sans aucun framework tel que scrappy dans n’importe quel langage de programmation (JavaScript, Python, Php ou Ruby par exemple pour avoir une bonne productivité) ou Java, Scala, Golang, C++ pour privilégier la performance. Javascript est devenu particulièrement populaire ces dernières années.

Chez Revinate chez qui je travaille, nous avons développé des logiciels complexes en Java/Scala/Groovy qui permettent de crawler des centaines de millions d’URLs efficacement et d’ingérer de manière efficace des TBs de données chaque jour, ce qui nous a pris plusieurs mois d’intense développement…

C) L’UTILISATION DE PLATFORMES

Il existe de nombreuses platformes qui vous permettent de lancer des robots sans forcément avoir à les héberger vous-même.

1) GOOGLE APP SCRIPT

Google sheet peut être utilisé pour lancer des scripts. Vous entrez les URLs dans une colonne et vous pouvez lancer un petit script qui s’exécutera sur chaque ligne. Plus d’infos ici. Il vous foudra néanmoins écrire quelques lignes de javascript.

2) MOZENDA, IMPORT.IO et consorts

Quelques sites vous permettent d’écrire votre Javascript pour créer votre robot directement en ligne et s’occupent d’héberger et de « scaler » ces derniers pour vous. Mozenda, Import.io, 80legs sont parmi les plus connus. Ces platformes sont très utiles si vous avez des besoins simples sur quelques sites. Mais elles ont un certain coût surtout si vous souhaitez scraper un gros volume de données. C’est souvent un moyen intéressant de démarrer.

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 *