De plus en plus fréquent, il est très utile et nécessaire pour de nombreux sites web d’obtenir des données de façon automatisée à partir d’autres sites web, c’est ce qu’on appelle le « scraping ». Le meilleur exemple qui vient à l’esprit et sans doute le plus utilisé est celui de connaître les prix de la concurrence et de les surveiller à différentes fins : depuis l’adaptation des prix de son propre e-commerce, surveiller les offres, observer comment les prix de ses produits sont affichés, adapter leurs campagnes sur shopping ou amazon. Les possibilités et les besoins sont multiples.
Professionnellement j’ai dû développer d’innombrables scrapers pour des types de sites web très différents, principalement des e-commerces pour obtenir les prix de la concurrence, mais aussi des annuaires d’entreprises, des recettes de cuisine et sûrement bien d’autres si je fais un effort de mémoire. Parmi eux j’ai bataillé avec Google Shopping, Amazon, des marketplaces, des annuaires d’entreprises nationaux… je ne me considère pas un expert en la matière mais j’ai quelques connaissances à apporter.
Je ne vais pas entrer dans le sujet éthique/légal que la pratique du scraping implique mais il est certain qu’aujourd’hui c’est une partie fondamentale de nombreux types d’entreprises et une activité très répandue sur internet (Google lui-même et les robots des moteurs de recherche sont en définitive des « scrapers »).
Je me concentrerai sur l’aspect purement technique.
La difficulté de réaliser un scraping dépend de nombreux facteurs, essentiellement :
- Nombre de sites web à scraper.
- Nombre de requêtes simultanées et fréquence nécessaires.
- Les mesures de protection du site web lui-même contre les techniques de scraping.
- Le HTML/la page à partir de laquelle obtenir les données nécessaires.
- Besoin de rendu JavaScript et de simulation d’actions humaines (par exemple se connecter ou cliquer)
- La structure du site web.
Bien que tout développeur puisse obtenir n’importe quelle donnée de n’importe quelle page ponctuelle, peu de développeurs ont les connaissances nécessaires pour comprendre la complexité requise pour travailler en volume et contourner toutes les mesures de protection des sites web cibles et c’est ce dernier point qui le rend intéressant pour un profil professionnel plus orienté systèmes où connaître toute la chaîne de technologies depuis qu’une requête est initiée vers un serveur et qu’il vous retourne les données est d’une grande aide.
Il existe d’innombrables bibliothèques (surtout en Python), classes et outils qui facilitent le développement d’un scraper, mais finalement, dans mon cas la plupart du temps je n’en ai utilisé aucun. Tous nécessitaient de grandes ressources matérielles dès qu’il était nécessaire de réaliser plusieurs centaines de milliers de requêtes par jour et les supposés avantages d’utiliser le DOM HTML avec des outils spécifiques pour localiser le XPath de la donnée nécessaire n’était pas si utile ni ne m’apportait un avantage réel par rapport à mes vieilles connaissances les expressions régulières. Une autre affaire est quand la simulation d’une interaction humaine est nécessaire, dans ce cas l’utilisation de ces outils est presque obligatoire.
L’autre aspect important est de disposer soit d’un grand pool d’IPs avec différents sous-réseaux (OVH est d’une grande aide ici) soit d’une bonne entreprise de proxys mondiaux avec des IPs de différents types (datacenter, résidentielles, réseau mobile, par pays) à un prix raisonnable. Dans mon cas je dispose des deux options pour optimiser les coûts ; quand les mesures de sécurité du site web cible le permettent, j’utilise mon propre pool d’IPs et si cela se complique, le fournisseur proxy.
Ensuite il y a beaucoup plus, bien que déjà à un niveau plus éloigné de ce qui pour moi est la partie la plus passionnante. La conception de la base de données où stocker les données et l’application qui utilise les données que vous avez obtenues pour le but souhaité, exemple : générer un flux de données optimisé pour shopping avec vos meilleurs produits selon vos prix et ceux de la concurrence et ainsi optimiser le retour sur votre investissement en publicité.
Dans de prochains articles je me concentrerai sur des exemples plus pratiques et des informations plus concrètes sur la façon d’obtenir des données d’un site web.