Web Scraping en Ruby : L'ultime tutoriel

Raluca Penciuc le 15 janvier 2023

Ne nous voilons pas la face : au fil des ans, le volume de données sur l'internet ne cessera d'augmenter. La situation échappe à tout contrôle, mais est-ce vraiment une mauvaise chose ?

C'est surtout au cours de la dernière décennie que le web scraping a gagné en popularité. Pour réussir dans le monde des affaires d'aujourd'hui, les entreprises ont besoin de stratégies appropriées, qui requièrent une grande quantité d'informations en peu de temps. En outre, il s'agit d'un bon moyen pour les développeurs d'améliorer leurs compétences en matière de codage ET d'aider l'entreprise.

Si vous jouez pour l'équipe Ruby mais que vous n'avez pas grand-chose à voir avec le web scraping, cet article vous fournira une nouvelle niche à explorer : construire votre propre web scraper.

Comprendre le web scraping

Prenons l'exemple d'une plateforme de comparaison de prix. Son rôle est d'obtenir le coût d'une multitude d'articles auprès de plusieurs détaillants en ligne. Mais pourquoi s'arrêter aux produits physiques ? Les secteurs du transport aérien et de l'hôtellerie sont également devenus beaucoup plus conviviaux pour les consommateurs, grâce aux sites de comparaison. Comment ces sites ou applications magiques fonctionnent-ils ? Grâce au web scraping, bien sûr !

Vous vous demandez sans doute maintenant : "Comment vais-je utiliser ces données à d'autres fins ? Voyons donc quelques-unes des applications pratiques du web scraping :

Cet article bien rédigé sur le web scraping fournit des descriptions détaillées et des cas d'utilisation supplémentaires.

Il n'est pas facile de créer des scrapeurs web, même si l'on comprend leur fonctionnement et les avantages potentiels qu'ils peuvent offrir. Les sites web disposent de nombreux moyens pour identifier et empêcher les robots d'accéder à leurs données.

En voici quelques exemples :

  • Géo-blocage: Il se peut que des résultats spécifiques à une région s'affichent lorsque vous demandez des informations provenant d'une autre région (par exemple, les prix des billets d'avion).
  • Blocage IP: Un site web peut vous bloquer ou vous ralentir lorsqu'il détermine que vous faites des demandes répétées à partir d'une adresse IP particulière ;
  • Les pots de miel: Les humains ne peuvent pas voir les liens des pots de miel, mais les robots le peuvent ; une fois que les robots sont tombés dans le piège, leur adresse IP est bloquée ;
  • CAPTCHAs: Les gens peuvent résoudre ces problèmes logiques simples relativement rapidement, mais les racleurs les trouvent souvent difficiles ;

Il n'est pas facile de surmonter tous ces obstacles. Il n'est pas très difficile de créer un simple robot, mais la création d'un excellent scraper web est un peu plus ardue. C'est pourquoi, au cours de la dernière décennie, les API pour le web scraping sont devenues l'un des sujets les plus brûlants.

Le contenu HTML de n'importe quel site web peut être collecté à l'aide de WebScrapingAPI, et tous les problèmes que nous avons mentionnés précédemment seront automatiquement résolus. En outre, nous utilisons Amazon Web Services pour garantir la vitesse et l'évolutivité. Cela semble intéressant, n'est-ce pas ? Eh bien, ne vous arrêtez pas au son ! Essayez-le par vous-même avec les 5000 appels API gratuits que vous obtenez dans le cadre de la version d'essai gratuite de WebScrapingAPI.

Comprendre le Web

Il est nécessaire de comprendre le protocole de transfert hypertexte (HTTP) pour comprendre le web. Il explique comment un serveur et un client communiquent. Un message contient des informations qui décrivent le client et la manière dont il traite les données : méthode, version HTTP et en-têtes.

Pour les requêtes HTTP, les web scrapers utilisent la méthode GET pour récupérer les données du serveur. Il existe également des méthodes avancées telles que POST et PUT. Les méthodes HTTP sont détaillées ici à titre de référence.

Les en-têtes HTTP contiennent toute une série d'informations supplémentaires sur les requêtes et les réponses. Pour le web scraping, ce sont ces informations qui comptent :

  • User-Agent: les racleurs de sites web utilisent cet en-tête pour rendre leurs demandes plus réalistes ; il contient des informations telles que l'application, le système d'exploitation, le logiciel et la version.
  • Cookie: le serveur et la requête peuvent échanger des informations confidentielles (telles que des jetons d'authentification).
  • Referrer: contient le site source que l'utilisateur a visité ; il est donc essentiel de tenir compte de ce fait.
  • Hôte: il identifie l'hôte auquel vous vous connectez.
  • Accept: fournit un type de réponse au serveur (par exemple, text/plain, application/json).

Comprendre Ruby

Ruby est un langage de programmation multiparadigme de haut niveau qui est également entièrement interprétable. Cela signifie que le code du programme est stocké en texte clair, qui est transmis à l'interprète qui l'exécute.

En 1995, Yukihiro Matsumoto (également connu sous le nom de Matz dans la communauté Ruby) a combiné les caractéristiques de différents langages de programmation tels que Perl, Lisp et Smalltalk pour créer un nouveau langage axé sur la simplicité et la productivité.

Il s'agit d'un langage de programmation de niche, son domaine naturel étant les applications web. Voici les avantages significatifs que vous retirerez de l'utilisation de ce langage dans vos projets :

  • Il permet d'obtenir des résultats rapidement. En combinaison avec le framework Rails, vous pouvez créer des logiciels relativement rapidement ; c'est pourquoi les startups préfèrent Ruby pour construire rapidement leurs MVP(Minimum Viable Product).
  • Il est bien développé et entretenu par la communauté Ruby, qui ne cesse de croître.
  • Des outils et des bibliothèques utiles (appelés "gems") permettent de suivre facilement les meilleures pratiques de codage dans presque toutes les situations.

D'un autre côté, ces avantages ne font pas de Ruby une solution magique et universelle pour tous les nouveaux logiciels. Vous pouvez également prendre en compte ces caractéristiques du langage avant de prendre une décision :

  • Au fur et à mesure que leur taille augmente, les applications construites avec Ruby deviennent plus lentes, ce qui pose des problèmes d'évolutivité.
  • Son domaine naturel est celui des applications web. Il n'est donc pas adapté aux applications de bureau ou mobiles.
  • Parce qu'il utilise un interpréteur, un éventuel code orienté objet sera plus lent.

Fabriquer son propre scraper web

Nous pouvons maintenant commencer à parler de l'extraction des données. Tout d'abord, nous avons besoin d'un site web qui fournit des informations utiles.

Étape 1 : Mise en place de l'environnement

Pour construire notre scraper web Ruby, nous devons d'abord nous assurer que nous disposons de tous les prérequis :

  • La dernière version stable de Ruby : consultez leur guide d'installation officiel pour choisir la meilleure méthode pour votre système d'exploitation.
  • Un IDE : dans ce guide, nous utiliserons Visual Studio Code, car il est léger et ne nécessite pas de configuration supplémentaire, mais vous pouvez choisir l'IDE que vous préférez.
  • Bundler : outil Ruby de gestion des dépendances (également appelé gem) ;
  • Watir : un outil Selenium utilisé pour les tests automatiques, car il permet d'imiter le comportement de l'utilisateur sur un navigateur ;
  • Webdrivers : un outil recommandé par Watir qui télécharge automatiquement le dernier pilote pour une instance de navigateur ;
  • Nokogiri : un gem bien connu pour sa capacité à faciliter l'analyse des pages web. Il peut analyser le HTML, le XML, détecter les documents HTML cassés, et offre un accès aux éléments par XPath et les sélecteurs CSS3.

Après avoir configuré l'environnement Ruby, créez un nouveau répertoire n'importe où sur votre ordinateur et ouvrez-le avec l'IDE de votre choix. Ensuite, lancez la commande suivante dans une fenêtre de terminal pour installer notre première gemme :

> gem install bundler

Créez maintenant un fichier appelé Gemfile dans le répertoire racine de votre projet. Ici, nous allons ajouter le reste des gemmes en tant que dépendances :

source 'https://rubygems.org'

gem 'watir', '~> 6.19', '>= 6.19.1'
gem 'webdrivers', '~> 4.6'
gem 'nokogiri', '~> 1.11', '>= 1.11.7'

Revenez maintenant à la fenêtre du terminal et exécutez la commande suivante pour installer les gemmes que nous avons déclarées :

> bundle install

Cool setup ! Enfin, il suffit de créer un fichier "scraper.rb" pour contenir le code de notre scraper web. Tout ce que nous écrivons ici, nous pouvons l'exécuter avec la commande :

> ruby scraper.rb

Étape 2 : Inspecter la page que vous souhaitez récupérer

Parfait, passons à l'action ! Naviguez jusqu'à la page que vous voulez récupérer et faites un clic droit n'importe où sur celle-ci, puis cliquez sur "Inspecter l'élément". La console du développeur s'ouvre, où vous devriez voir le code HTML du site web.

blog-image

Étape 3 : Envoyer une requête HTTP et récupérer le code HTML

Maintenant, pour obtenir ce HTML sur notre machine locale, nous devons envoyer une requête HTTP en utilisant Watir pour renvoyer le document. Revenons à l'IDE et mettons cette idée en code.

Tout d'abord, il convient d'écrire les importations dont nous avons besoin :

require 'watir'
require 'webdrivers'
require 'nokogiri'

Ensuite, nous initialisons une instance de navigateur et naviguons vers le site web que nous voulons récupérer. Nous accédons ensuite au code HTML et le passons au constructeur de Nokogiri, qui nous aidera à analyser le résultat.

browser = Watir::Browser.new
browser.goto 'https://blog.eatthismuch.com/latest-articles/'
parsed_page = Nokogiri::HTML(browser.html)

File.open("parsed.txt", "w") { |f| f.write "#{parsed_page}" }

browser.close

Nous avons également écrit le résultat dans un fichier texte appelé "parsed.txt" pour jeter un coup d'œil sur le HTML. Il est important de fermer la connexion après avoir reçu la réponse, car le processus continuera à s'exécuter.

Étape 4 : Extraction de sections spécifiques

Nous avons donc un document HTML, mais nous voulons des données, ce qui signifie que nous devons analyser la réponse précédente en informations lisibles par l'homme.

Commençons par les petits pas, extrayons le titre du site web. Un fait remarquable à propos de Ruby est que tout est un objet à quelques exceptions près, ce qui signifie que même une simple chaîne de caractères peut avoir des attributs et des méthodes.

blog-image

Par conséquent, nous pouvons simplement accéder à la valeur du titre du site web par le biais des attributs de l'objet page analysée.

puts parsed_page.title

Pour aller plus loin, extrayons tous les liens du site web. Pour ce faire, nous utiliserons une méthode plus générique qui analyse des balises spécifiques, la méthode css.

links = parsed_page.css('a')
links.map {|element| element["href"]}

puts links

Nous utilisons également la méthode map pour ne conserver que les liens ayant un attribut href dans le code HTML.

Prenons un exemple plus réaliste. Nous devons extraire les articles du blog, leur titre, leur adresse et leur méta-description.

blog-image

If you inspect one of the article cards, you can see that we can get the address and the article’s title through the link’s attributes. Also, the meta description is under a <div> tag with a specific class name.

Of course, there are many ways to perform this search. The one we’ll use will consist of looking for all the <div> tags with the td_module_10 class name and then iterating through each one of them to extract the <a> tags and the inner <div> tags with the td-excerpt class name.

article_cards = parsed_page.xpath("//div[contains(@class, 'td_module_10')]")

article_cards.each do |card|
title = card.xpath("div[@class='td-module-thumb']/a/@title")
link = card.xpath("div[@class='td-module-thumb']/a/@href")
meta = card.xpath("div[@class='item-details']/div[@class='td-excerpt']")
end

Oui, comme vous l'avez peut-être déjà deviné, c'est une expression XPath qui fait l'affaire, car nous recherchons des éléments HTML à partir de leurs noms de classe et de leurs ascendants.

Étape 5 : Exporter les données au format CSV

Ce type d'extraction peut être utile lorsque les données doivent être transmises à une autre application, un agrégateur d'articles dans notre cas. Pour ce faire, nous devons exporter les données analysées vers un fichier externe.

Nous allons créer un fichier CSV, car il peut être facilement lu par une autre application et ouvert avec Excel pour un traitement ultérieur. Tout d'abord, une dernière importation :

nécessite 'csv'

Ensuite, nous allons créer le CSV en mode "append", et intégrer le code précédent, de sorte que notre scraper ressemblera maintenant à ceci :

CSV.open("articles.csv", "a+") do |csv|
csv << ["title", "link", "meta"]

article_cards = parsed_page.xpath("//div[contains(@class, 'td_module_10')]")
article_cards.each do |card|

title = card.xpath("div[@class='td-module-thumb']/a/@title")
link = card.xpath("div[@class='td-module-thumb']/a/@href")
meta = card.xpath("div[@class='item-details']/div[@class='td-excerpt']")

csv << [title.first.value, link.first.value, meta.first.text.strip]
end
end

Cool, c'est tout ! Nous pouvons maintenant voir toutes les données analysées d'une manière propre, non effrayante et facile à comprendre.

blog-image

Conclusion et alternatives

Nous avons maintenant terminé notre tutoriel. Félicitations ! Nous espérons que cet article vous a donné beaucoup d'informations sur le web scraping et vous a aidé à mieux le comprendre.

Il est évident que cette technologie peut faire beaucoup plus que d'alimenter des agrégateurs d'articles. L'essentiel est de trouver les données correctes et de les analyser pour trouver de nouvelles possibilités.

Cependant, comme je l'ai indiqué au début de l'article, les web scrapers sont confrontés à de nombreux défis. En plus de stimuler votre activité, c'est une excellente occasion d'apprentissage pour les développeurs de résoudre des problèmes en utilisant leurs propres web scrapers. Néanmoins, il se peut que vous souhaitiez réduire les coûts si vous devez mener à bien un projet (temps, argent, personnel).

Une API dédiée à la résolution de ces problèmes sera toujours plus facile à utiliser. Même lorsqu'il existe des obstacles tels que le rendu Javascript, les proxies, les CAPTHA et d'autres facteurs de blocage, WebScrapingAPI les surmonte tous et offre une expérience personnalisable. Si vous n'êtes pas encore sûr, pourquoi ne pas essayer l'option d'essai gratuit ?

Nouvelles et mises à jour

Restez au courant des derniers guides et nouvelles sur le web scraping en vous inscrivant à notre lettre d'information.

We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

Articles connexes

vignette
GuidesComment récupérer les données des produits Amazon : Un guide complet des meilleures pratiques et des outils

Explorez les complexités du scraping des données de produits Amazon avec notre guide approfondi. Des meilleures pratiques aux outils tels que l'API Amazon Scraper, en passant par les considérations juridiques, apprenez à relever les défis, à contourner les CAPTCHA et à extraire efficacement des informations précieuses.

Suciu Dan
avatar de l'auteur
Suciu Dan
15 minutes de lecture
vignette
Cas d'utilisationL'utilisation du Web Scraping pour les données alternatives en finance : Un guide complet pour les investisseurs

Explorez le pouvoir de transformation du web scraping dans le secteur financier. Des données sur les produits à l'analyse des sentiments, ce guide donne un aperçu des différents types de données web disponibles pour les décisions d'investissement.

Mihnea-Octavian Manolache
avatar de l'auteur
Mihnea-Octavian Manolache
13 minutes de lecture
vignette
La science du Web ScrapingLe Web Scraping en toute simplicité : l'importance de l'analyse des données

Découvrez comment extraire et organiser efficacement des données pour le web scraping et l'analyse de données grâce à l'analyse de données, aux bibliothèques d'analyse HTML et aux métadonnées schema.org.

Suciu Dan
avatar de l'auteur
Suciu Dan
12 minutes de lecture