J’ai appris le webscraping principalement avec Python (et R), et c’est donc la méthode que j’ai tendance à favoriser, mais afin d’optimiser le processus et de ne pas perdre de temps ou de manquer des astuces/options utiles pour gagner du temps, j’ai commencé à élargir ma boîte à outils! Le webscraping comprend évidemment de nombreux outils, méthodes et solutions potentielless, mais j’ai essayé de présenter une vue d’ensemble des différentes options à prendre en compte et à examiner chaque fois que vous essayez d’extraire des données/fichiers/choses en ligne. Plus concrètement, il s’agit d’une sorte de marche à suivre ou « checklist » à consulter lorsque l’on amorce un projet de webscraping, de manière à réfléchir à la stratégie la plus pertinente/efficace.
- Assurez-vous d’abord que a) vous ne pouvez pas trouver les données dans un format/fichier téléchargeable en ligne (via des recherches sur les moteurs de recherche (par ex. avec ces techniques avancées), des bases de données publiques, des boutons de téléchargement ou d’exportation sur les pages web, etc.), et b) que vous ne pouvez pas simplement copier-coller le contenu efficacement (c’est-à-dire sans aboutir à un jeu de données désordonné et inutilisable, comme c’est souvent le cas).
- Dans certains cas, vous pouvez utiliser l’inspecteur web pour trouver la source (fichier/etc) et télécharger directement les données/médias (images, vidéos, liens, contenu intégré).
- Avant de passer à des outils de scraping plus sophistiqués (c’est-à-dire les API, les scrapers codés et les applications/services/fonctionnalités avancées de scraping/crawling sans code), vous devriez toujours vous demander si certaines des options les plus simples/rapides (et sans ou avec un minimum de code) peuvent suffire:
- Les extensions simples (et gratuites) pour extraire des tableaux/données de tableaux (par exemple, Table Capture dans Chrome ou Firefox), ou pour télécharger des fichiers/listes/etc (par exemple, DownThemAll dans Firefox).
- Les fonctions de Google Sheets pour importer les tableaux et listes HTML (ImportHTML), les éléments XML/XPath (ImportXML), les liens de téléchargement au format .csv/.tsv (ImportData) ou les flux RSS (ImportFeed).
- Certains scrapers gratuits, automatiques et/ou basés sur des extensions, comme Crawly et Data Miner, ainsi que les versions gratuites de WebScraper/Octoparse/Simplescraper/Bardeen/ParseHub, qui permettent d’obtenir rapidement les données souhaitées (pour certaines d’entre elles, y compris lorsqu’elles proviennent de pages web dynamiques et/ou multiples) et de les mettre dans un format lisible par une machine.
- À ce stade, il faut décider quels outils (soit en utilisant un seul outil, soit en en combinant plusieurs) vous allez utiliser si les options précédentes n’ont pas fonctionné. Cela dépend de plusieurs choses, notamment si vous avez accès à un outil de scraping avancé payant (Octoparse, ParseHub, Import.io, Bright Data’s Web Scraper IDE, ScrapingBee, Dexi, etc), ce que vous voulez faire ensuite avec vos données – par ex. nettoyage et/ou analyse de données/spatiale/analyse de texte, datavisualisation, etc – (ce qui a un impact sur le format des données/fichiers et le type d’outil que vous utiliserez par la suite, par exemple Excel, Tableau, Datawrapper, Rawgraphs, Python, R, Flourish, etc.), et bien sûr vos propres compétences et préférences.
- Je ne vais à présent considérer que les options gratuites (soit les options open-source/non commerciales, soit les plans/essais gratuits de bonnes applications/services comme Octoparse). Il est logique de vérifier d’abord si des APIs a) existent/sont accessibles (i.e. certains sites web mettent un paywall sur les API, je ne pense pas que quiconque devrait accepter de les payer alors qu’il existe d’autres options de webscraping qui offrent souvent plus de flexibilité et ne coûtent rien), b) vous permettent réellement d’obtenir ce que vous voulez (les sites web/entreprises limitent souvent les données que vous pouvez obtenir (ou même voir) par le biais de leurs API)
- Parmi les bons services/applications de scraping avancés – qui sont soit gratuits/open-source ou qui incluent des fonctionnalités/plans gratuits (évidemment avec des limitations, c’est le capitalisme, ne l’oubliez pas) – on trouve Morph (ScraperWiki a été mis hors service), OutWit Hub, ParseHub, Octoparse, ScrapingBee, Bardeen, Simplescraper (Chrome), Apify, Common Crawl (référentiel d’ensembles de données crawlées). En général, ils vous permettent de sélectionner (souvent par « pointer et cliquer ») les éléments spécifiques que vous souhaitez extraire des pages web et ils effectuent le scraping pour vous (extracteurs (une seule page) et crawlers (plusieurs pages)) et vous donnent un moyen de télécharger les données/sorties dans des formats appropriés (csv, json, xlsx, etc.).
- Mais dans un sens, les meilleurs « outils » gratuits de webscraping sont les langages de programmation qui vous donnent la pleine capacité/autonomie pour contrôler, essayer/tester, et compléter le processus de webscraping du début à la fin, et parfois très rapidement même s’il s’agit de scrapers avancés -> Python, R, Javascript et Ruby sont tous d’excellentes options !
- Comme toujours, tout commence avec l’inspecteur web/élément, où vous devez examiner la structure HTML du code source, les éléments et les balises, et rechercher/localiser les éléments spécifiques que vous souhaitez extraire. Vous en aurez besoin pour récupérer et analyser les données !
- Vous devez également l’utiliser (en particulier, l’onglet Réseau) pour :
- Examiner comment les fichiers sont transmis entre le serveur et le navigateur.
- Examinez les en-têtes des fichiers – quelles requêtes sont faites, quels sont les paramètres de ces requêtes et comment le serveur répond.
- Vérifier s’il existe des « API cachées »
- La programmation proprement dite commence généralement par l’extraction/le chargement du contenu (code source) d’une page web (c’est-à-dire une URL spécifique du serveur) via Requests pour Python, ou Mechanize/net-http/HTTParty/OpenURI pour Ruby ; puis leur analyse – c’est-à-dire l’extraction de champs de données spécifiques – via BeautifulSoup pour Python, et Nokogiri dans Ruby, ou en faisant les deux via Rvest en R.
- Extraire et (si nécessaire) reformater ces éléments/champs de données et enregistrer le résultat (ou l’utiliser immédiatement pour l’analyse/la datavisualisation).
Mais il va sans dire qu’il y a beaucoup de méthodes, de considérations et de choses qui entrent dans le codage des scrapers, au-delà de cette liste de contrôle générale de base. Vous pouvez parfois simplement utiliser des for loops for en Python, vous pouvez utiliser des bibliothèques pré-faites qui scrappent des sites spécifiques pour vous (par exemple, pour l’analyse du football, voir worldfootballR de Jason Zivkovic en R et Griffis-Soccer-Analysis de Ben Griffis en Python), vous pouvez utiliser Selenium pour des tests automatisés/pages web dynamiques/passer les logins/etc. avec la plupart des navigateurs (populaires) et des langages de programmation (par exemple, Python, R, Ruby), et ainsi de suite.