Retour au blog
Guides
Suciu Dan2 février 202312 minutes de lecture

Le guide complet des bibliothèques Ruby pour l'analyse syntaxique du HTML et du XML

Le guide complet des bibliothèques Ruby pour l'analyse syntaxique du HTML et du XML

Nokogiri

Nokogiri est une bibliothèque populaire et puissante pour l'analyse et la recherche de documents XML et HTML en Ruby. Elle dispose d'une API claire et simple et s'appuie sur libxml2, une bibliothèque C bien établie pour l'analyse XML.

Commande Gem

gem install nokogiri

Exemples de code

require "nokogiri"

html = "<!DOCTYPE html><html><head><title>Hello, World!</title></head><body>Hello, World!</body></html>"

parsed_data = Nokogiri::HTML.parse(html)

puts parsed_data.title

Avantages et inconvénients

Voici quelques-uns des avantages et inconvénients liés à l'utilisation de Nokogiri :

Avantages

  • Il est largement considéré comme le parseur le plus populaire et le plus utilisé pour Ruby
  • Il est très rapide et efficace, grâce à l'utilisation de libxml2 comme moteur d'analyse. Il peut traiter facilement des documents volumineux.
  • Il dispose d'une API simple et conviviale qui facilite la navigation et la recherche dans les documents XML et HTML.
  • Il prend en charge à la fois les documents XML et HTML, ce qui vous permet d'utiliser la même bibliothèque pour analyser différents types de documents.
  • Il dispose d'un ensemble complet de méthodes pour rechercher et manipuler des éléments dans un document, ce qui facilite l'extraction des informations dont vous avez besoin. Vous pouvez extraire des données à l'aide de sélecteurs CSS ou de XPath.
  • Il peut analyser des documents HTML mal formés
  • Elle est compatible avec différentes versions de Ruby et fait l'objet d'une maintenance active.
  • Elle prend également en charge les analyseurs SAX (Simple API for XML) et DOM (Document Object Model)

Inconvénients

  • Certaines tâches d'analyse peuvent nécessiter une compréhension approfondie de la structure DOM, ce qui peut être difficile à acquérir si le développeur n'est pas familier avec celle-ci.
  • Il peut nécessiter plus de mémoire que d'autres bibliothèques telles qu'Ox.
  • Il peut rencontrer des difficultés pour analyser des documents protégés par une authentification, par exemple un site web nécessitant un nom d'utilisateur et un mot de passe pour y accéder.
  • Elle n'est pas thread-safe, vous devez donc faire très attention si vous prévoyez de l'utiliser dans un environnement multithread.
  • Elle n'est pas bien adaptée au transfert de documents dont le contenu est chargé dynamiquement via JavaScript, comme avec AJAX.

Ox

Ox, ou Optimized XML, est une bibliothèque puissante et efficace pour analyser et manipuler des documents XML et JSON en Ruby.

La bibliothèque est implémentée en C pour de meilleures performances et une meilleure efficacité mémoire. Ox utilise une approche de parseur « pull » pour analyser le document, ce qui lui permet de traiter des fichiers volumineux en utilisant moins de mémoire qu'un parseur basé sur le DOM.

Voici quelques-unes des façons dont Ox traite les documents XML :

  • En tant qu'analyseur et générateur XML générique : Ox peut lire et écrire des documents XML, en fournissant des méthodes pour rechercher et manipuler les éléments du document.
  • En tant que marshaller Objet/XML rapide : Ox peut convertir des documents XML en objets Ruby et vice versa. Cette fonctionnalité permet une sérialisation et une désérialisation faciles des données.
  • En tant qu'analyseur SAX en flux : Ox peut analyser le XML en flux continu, ce qui convient aux fichiers volumineux et offre un moyen rapide de gérer les événements XML.

Commande Gem

gem install ox

Exemples de code

require "ox"

doc = Ox.parse(%{

  <?xml version="1.0"?>

  <Payment>

	<Shop>ikea</Shop>

	<Amount>199.99</Amount>

	<Date>2023-01-12</Date>

  </Payment>

})

puts doc.Payment.Shop.text

Avantages et inconvénients

Voici quelques avantages et inconvénients liés à l'utilisation d'Ox :

Avantages

  • Ox est très rapide et économe en mémoire, grâce à son approche de parseur « pull » et au fait qu'il est implémenté en C. Cela le rend particulièrement adapté à l'analyse de grands documents XML et JSON ou au traitement de données en flux continu
  • Ox dispose d'une API claire et simple qui le rend facile à utiliser et à comprendre
  • Ox prend en charge à la fois JSON et XML, ce qui vous permet d'utiliser la même bibliothèque pour analyser différents types de documents
  • Il intègre une prise en charge des espaces de noms XML, ce qui facilite la gestion des documents XML comportant des espaces de noms.
  • Il est activement maintenu et mis à jour

Inconvénients

  • L'API de recherche et de manipulation des éléments peut s'avérer moins riche que celle d'autres bibliothèques telles que Nokogiri ou REXML
  • Sa communauté et son support ne sont peut-être pas aussi solides que ceux de bibliothèques plus établies comme Nokogiri

Oga

Oga est une bibliothèque moderne et légère permettant d'analyser et de rechercher des documents XML et HTML en Ruby. Elle adopte une approche plus moderne que d'autres bibliothèques en utilisant une implémentation purement Ruby, ce qui signifie qu'elle ne dépend d'aucune bibliothèque C.

La bibliothèque est adaptée aux documents de petite et moyenne taille et ne nécessite pas de fonctionnalités avancées telles que XSLT ou la validation de schémas XML.

Même si la bibliothèque ne nécessite aucune bibliothèque système telle que libxml, pour obtenir de meilleures performances, Oga utilise une petite extension native (en C pour MRI/Rubinius, en Java pour JRuby).

Commande Gem

gem install oga

Exemples de code

require "oga"

doc = Oga.parse_xml(%{

  <?xml version="1.0"?>

  <Payment>

	<Shop>ikea</Shop>

	<Amount>199.99</Amount>

	<Date>2023-01-12</Date>

  </Payment>

})

puts doc.at_xpath("Payment/Shop/text()")

Avantages et inconvénients

Voici quelques avantages et inconvénients liés à l'utilisation d'Oga :

Avantages

  • Oga dispose d'une API simple et épurée, ce qui facilite la navigation et la recherche dans les documents XML et HTML.
  • Son implémentation en Ruby pur facilite son installation et son exécution sur différentes plateformes et dans différents environnements.
  • L'API d'Oga permet d'analyser et d'interroger des documents dans un environnement multithread en toute sécurité, sans se soucier des problèmes de performances
  • Oga est léger et facile à intégrer à d'autres bibliothèques et modules.
  • Oga a une faible empreinte mémoire.

Inconvénients

  • Oga ne prend pas en charge les fonctionnalités avancées telles que XPath, XSLT ou la validation de documents XML par rapport à une DTD ou un schéma XML.
  • Les fonctionnalités d'Oga sont limitées par rapport à d'autres bibliothèques comme Nokogiri, ce qui peut ne pas convenir aux tâches complexes d'analyse XML ou HTML.
  • Même s'il est maintenu, il reçoit moins de mises à jour que Nokogiri

LibXML Ruby

LibXML Ruby est une liaison vers la bibliothèque C libxml2, une bibliothèque bien établie pour l'analyse et la manipulation de documents XML. Cette liaison fournit une interface vers les fonctionnalités de libxml2 et est utilisée par plusieurs autres bibliothèques populaires, dont Nokogiri.

La bibliothèque offre des fonctionnalités avancées telles que la prise en charge de XPath, l'analyse DTD, les transformations XSL, et bien plus encore.

Commande Gem

gem install libxml-ruby

Exemples de code

require "xml"

doc = XML::Parser.string(%{

  <?xml version="1.0"?>

  <Payment>

	<Shop>ikea</Shop>

	<Amount>199.99</Amount>

	<Date>2023-01-12</Date>

  </Payment>

})

puts doc.parse.find('//Shop').first.content

Avantages et inconvénients

Voici une liste de ses avantages et inconvénients :

Avantages

  • Offre un moyen rapide et efficace d'analyser et de manipuler des documents XML et HTML en Ruby, grâce à sa bibliothèque C sous-jacente.
  • Il prend en charge plusieurs types d'encodage et peut traiter des documents présentant des structures et des espaces de noms complexes
  • Prend en charge XPath, un langage qui permet de naviguer et de sélectionner des éléments dans un document XML en fonction de leurs propriétés et de leurs relations.
  • Prend en charge les transformations XSLT et la validation des schémas DTD/XML
  • Dispose d'un large éventail de fonctionnalités et d'options qui le rendent adapté aux cas d'utilisation avancés.
  • Il bénéficie d'un bon soutien de la communauté et constitue une bibliothèque stable et bien documentée.

Inconvénients

  • Elle peut consommer plus de mémoire que certaines autres bibliothèques qui sont des implémentations purement Ruby
  • L'API n'est pas aussi intuitive ni conviviale que certaines autres bibliothèques Ruby pour l'analyse XML, ce qui peut rendre son utilisation plus difficile pour les développeurs moins expérimentés
  • Elle ne prend pas en charge nativement l'analyse de JSON ; elle nécessitera une configuration et des outils supplémentaires pour gérer le JSON
  • Elle peut ne pas gérer aussi bien le XML mal formé que certaines autres bibliothèques.

REXML

REXML est une bibliothèque purement Ruby destinée à l'analyse de documents XML ; elle est incluse dans la bibliothèque standard de Ruby, ce qui la rend facile à utiliser et ne nécessite aucune installation supplémentaire.

Inspirée de la bibliothèque Electric XML pour Java, elle se caractérise par une API facile à utiliser, une petite taille et une grande rapidité.

Commande Gem

gem install rexml

Exemples de code

require "rexml/document"

doc = REXML::Document.new(%{

  <?xml version="1.0"?>

  <Payment>

	<Shop>ikea</Shop>

	<Amount>199.99</Amount>

	<Date>2023-01-12</Date>

  </Payment>

})

doc.elements.each("//Shop"){ |element| puts element.text }

Avantages et inconvénients

Avantages

  • Elle est incluse dans la bibliothèque Ruby standard, ce qui la rend facile à installer et à utiliser.
  • REXML est écrit en Ruby pur, ce qui signifie qu'il ne dépend d'aucune bibliothèque C ni d'aucune dépendance externe, ce qui le rend indépendant de la plateforme.
  • Il dispose d'une API simple et facile à utiliser, ce qui en fait un bon choix pour les documents XML de petite à moyenne taille
  • Il dispose d'une implémentation XPath intégrée, ce qui facilite la recherche et la sélection d'éléments dans un document XML

Inconvénients

  • REXML n'est pas aussi rapide que d'autres bibliothèques, comme Nokogiri, et peut consommer davantage de mémoire, ce qui le rend peu adapté aux documents XML volumineux.
  • Il ne dispose pas de certaines fonctionnalités avancées présentes dans d'autres bibliothèques XML, telles que la gestion des espaces de noms XML ou la gestion avancée des erreurs

Selenium WebDriver

Selenium WebDriver n'est pas avant tout un analyseur HTML ou XML, mais plutôt un outil d'automatisation de navigateur. Il vous permet d'interagir avec un navigateur web par programmation, en simulant des actions utilisateur telles que cliquer sur des boutons, remplir des formulaires et naviguer entre les pages.

Selenium WebDriver vous permet d'automatiser les interactions avec les navigateurs Web, telles que cliquer sur des boutons, remplir des formulaires et naviguer entre les pages.

Cet outil est utile lorsque vous devez extraire les données d'un site web qui utilise JavaScript pour charger son contenu de manière dynamique ou pour effectuer des actions spécifiques telles que l'interaction avec un formulaire ou un bouton sur la page.

Commande Gem

gem install selenium-webdriver webdrivers

Exemples de code

require "selenium-webdriver"

require "webdrivers/chromedriver"

driver = Selenium::WebDriver.for :chrome

driver.get("https://webscrapingapi.com")

puts driver.title

Avantages et inconvénients

Voici quelques-uns des avantages et inconvénients de l'utilisation de Selenium WebDriver en Ruby :

Avantages

  • Selenium WebDriver prend en charge un large éventail de navigateurs Web, notamment Chrome, Firefox, Edge, Safari et bien d'autres, ce qui signifie que les tests que vous créez peuvent s'exécuter sur différents navigateurs sans modification.
  • Selenium WebDriver offre plusieurs moyens d'inspecter le contenu d'une page web, par exemple en localisant des éléments par leur ID, leur nom de classe ou leur sélecteur CSS, ce qui facilite l'interaction avec les pages web et l'automatisation des tâches.
  • Il vous permet d'interagir avec les éléments JavaScript sur les pages web ; cette fonctionnalité le rend particulièrement adapté au test du comportement des pages web utilisant JavaScript.
  • Il est largement utilisé dans le secteur, bien documenté et bénéficie d'une vaste communauté de développeurs pouvant apporter leur aide.

Inconvénients

  • Selenium WebDriver peut être plus lent que d'autres bibliothèques d'analyse HTML, car il doit lancer un navigateur et simuler l'interaction d'un utilisateur réel, ce qui peut allonger le temps nécessaire pour extraire les données.
  • Selenium WebDriver nécessite l'installation d'un navigateur web sur la machine, ce qui peut poser des problèmes lors de l'exécution du script dans un environnement sans interface graphique ou sur un serveur dépourvu d'interface graphique.
  • Selenium WebDriver n'est pas une bibliothèque spécialisée dans l'analyse HTML et son API n'est peut-être pas aussi intuitive ou conviviale que celle de bibliothèques spécialisées telles que Nokogiri ou

À noter

Bien que nous nous soyons concentrés sur des bibliothèques actives et bien entretenues pour l'analyse syntaxique du HTML et du XML en Ruby, il existe quelques autres bibliothèques qui méritent d'être prises en considération.

Cependant, il est important de garder à l'esprit que ces bibliothèques peuvent être moins activement maintenues ou bénéficier d'un soutien communautaire moindre, ce qui peut ajouter un niveau de risque supplémentaire si elles sont utilisées dans un environnement de production.

Il est essentiel d'évaluer soigneusement les fonctionnalités et les performances de la bibliothèque, ainsi que la taille et la complexité des documents que vous devez analyser, avant de prendre une décision.

Hpricot

Hpricot est un autre analyseur HTML Ruby populaire prenant en charge les documents XML. Hpricot dispose d'une API simple et facile à utiliser, et il est bien adapté aux documents de petite à moyenne taille.

Commande Gem

gem install hpricot

Exemples de code

require "hpricot"

doc = "<!DOCTYPE html><html><head><title>Hello, World!</title></head><body>Hello, World!</body></html>"

puts Hpricot(doc).at("title").inner_html

Avantages et inconvénients

Voici quelques avantages et inconvénients liés à l'utilisation de Hpricot :

Avantages

  • Hpricot dispose d'une API simple et conviviale qui facilite la navigation et la recherche dans les documents HTML et XML.
  • Les fonctions de recherche de Hpricot s'appuient sur des sélecteurs CSS de type jQuery, faciles à comprendre et à utiliser.
  • Comme certaines parties de Hpricot sont écrites en C, la bibliothèque est relativement rapide et efficace
  • Elle convient aux documents de petite à moyenne taille
  • Tout comme Nokogiri, elle peut analyser des documents mal formés

Inconvénients

  • Hpricot n'a pas fait l'objet d'une maintenance active depuis 2010 ; il se peut donc qu'il ne fonctionne pas correctement avec les versions récentes de Ruby et qu'il ne prenne pas en charge les nouvelles fonctionnalités et les corrections de bogues.
  • Les fonctions de recherche de Hpricot ne prennent pas en charge tous les sélecteurs CSS, et elle ne prend pas en charge les espaces de noms XML.
  • Il ne peut pas traiter les documents XML mal formés
  • Les performances de Hpricot peuvent être plus lentes et il peut consommer plus de mémoire par rapport à d'autres bibliothèques comme Nokogiri ou Ox, en particulier pour les documents volumineux.

Conclusion

En conclusion, lorsqu'il s'agit d'analyser des documents HTML et XML en Ruby, il existe une grande variété de bibliothèques parmi lesquelles choisir, chacune présentant ses propres avantages et inconvénients.

Nokogiri, REXML, Ox, Hpricot et LibXML Ruby sont toutes des bibliothèques puissantes pouvant être utilisées pour le web scraping, mais il est important d'évaluer les exigences et les besoins spécifiques de votre projet avant de décider laquelle utiliser.

Selenium WebDriver, bien qu'il ne soit pas principalement conçu pour l'analyse HTML, peut également être utilisé pour le web scraping ; cependant, il s'agit d'un outil d'automatisation de navigateur qui apporte une certaine complexité supplémentaire et des performances plus lentes par rapport aux bibliothèques spécialisées.

Cependant, la création d'un script de web scraping peut s'avérer une tâche longue et difficile, en particulier si vous devez gérer des sites web dynamiques, des CAPTCHA et faire face à des interdictions d'accès.

WebScrapingAPI offre une solution simple et efficace pour extraire des données du Web, vous évitant ainsi d'avoir à créer votre propre script. Grâce à la fonctionnalité « Règles d'extraction », vous pouvez facilement récupérer des informations à partir d'une page Web en spécifiant les sélecteurs CSS des éléments.

Pourquoi ne pas créer un compte dès aujourd'hui ?

À propos de l'auteur
Suciu Dan, cofondateur @ WebScrapingAPI
Suciu Dancofondateur

Suciu Dan est le cofondateur de WebScrapingAPI et rédige des guides pratiques destinés aux développeurs sur le web scraping avec Python et Ruby, ainsi que sur les infrastructures de proxy.

Commencez à créer

Prêt à faire évoluer votre système de collecte de données ?

Rejoignez plus de 2 000 entreprises qui utilisent WebScrapingAPI pour extraire des données Web à l'échelle de l'entreprise, sans aucun coût d'infrastructure.