Zurück zum Blog
Anleitungen
Raluca PenciucLast updated on Mar 31, 202611 min read

Der ultimative Leitfaden zu Ruby-Bibliotheken für das Parsen von HTML und XML

Der ultimative Leitfaden zu Ruby-Bibliotheken für das Parsen von HTML und XML

Beim Web Scraping, also dem Extrahieren von Daten aus dem Internet, werden Inhalte aus HTML- und XML-Dokumenten gelesen und verarbeitet. Um diese Aufgabe zu vereinfachen, nutzen Entwickler spezielle Bibliotheken, sogenannte Parser.

Die Ruby-Community bietet eine große Auswahl an Ruby-HTML-Parsern, und die Wahl des richtigen Parsers für Ihr Projekt kann eine schwierige Aufgabe sein. Um Ihnen zu helfen, eine fundierte Entscheidung zu treffen, finden Sie hier einige wichtige Faktoren, die Sie bei der Auswahl eines Parsers berücksichtigen sollten:

  • Open-Source-basiert und frei verfügbar.
  • Der Grad der Unterstützung für verschiedene HTML- und XML-Standards.
  • Umfassende Dokumentation und Tutorials, die Entwicklern den Einstieg erleichtern.
  • Die Fähigkeit, verschiedene Arten von Kodierungen zu verarbeiten, insbesondere im Umgang mit nicht-lateinischen Sprachen.
  • Eine schlanke und benutzerfreundliche API, die das Navigieren und Durchsuchen von HTML- und XML-Dokumenten erleichtert.
  • Der Umfang der Fehlerbehandlung und Validierung, den die Bibliothek bietet.
  • Eine starke und aktive Community, die Unterstützung und Ressourcen bereitstellt.
  • Die Größe und der Speicherbedarf der Bibliothek.
  • Gute Leistung, insbesondere bei der Arbeit mit großen Dateien.
  • Der Grad der Unterstützung für XML-Namespaces, falls Dokumente verwendet werden, die diese nutzen.
  • Aktive Pflege, um die Kompatibilität mit den neuesten Ruby-Versionen sicherzustellen und Fehlerbehebungen zu erhalten.
  • Der Grad der Erweiterbarkeit oder die Anpassungsmöglichkeiten, die die Bibliothek bietet.

Dieser Artikel wirft einen genaueren Blick auf sechs beliebte Ruby-Bibliotheken zum Parsen von HTML und XML und bewertet sie anhand der oben genannten Kriterien, um Ihnen dabei zu helfen, das perfekte Tool für Ihre Web-Scraping-Anforderungen zu finden.

Nokogiri

Nokogiri ist eine beliebte und leistungsstarke Bibliothek zum Parsen und Durchsuchen von XML- und HTML-Dokumenten in Ruby. Sie verfügt über eine übersichtliche und einfache API und basiert auf libxml2, einer etablierten C-Bibliothek zum Parsen von XML.

Gem-Befehl

gem install nokogiri

Code-Beispiele

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

Vor- und Nachteile

Hier sind einige Vor- und Nachteile der Verwendung von Nokogiri:

Vorteile

  • Es gilt weithin als der beliebteste und am häufigsten verwendete Parser für Ruby
  • Er ist sehr schnell und effizient, da er libxml2 als Parsing-Engine nutzt. Er kann große Dokumente mühelos verarbeiten.
  • Er verfügt über eine einfache und benutzerfreundliche API, die das Navigieren und Durchsuchen von XML- und HTML-Dokumenten erleichtert.
  • Er unterstützt sowohl XML- als auch HTML-Dokumente, sodass Sie dieselbe Bibliothek zum Parsen verschiedener Dokumenttypen verwenden können.
  • Er verfügt über eine umfangreiche Sammlung von Methoden zum Suchen und Bearbeiten von Elementen in einem Dokument, was das Extrahieren der benötigten Informationen vereinfacht. Sie können Daten mithilfe von CSS-Selektoren oder XPath extrahieren.
  • Es kann fehlerhafte HTML-Dokumente parsen
  • Es ist mit verschiedenen Ruby-Versionen kompatibel und wird aktiv gepflegt.
  • Sie unterstützt zudem sowohl SAX- (Simple API for XML) als auch DOM- (Document Object Model) Parser

Nachteile

  • Einige der Parsing-Aufgaben erfordern möglicherweise ein tiefes Verständnis der DOM-Struktur, was für Entwickler, die damit nicht vertraut sind, schwierig zu erlernen sein kann.
  • Es benötigt möglicherweise mehr Speicherplatz als andere Bibliotheken wie Ox.
  • Es kann zu Schwierigkeiten beim Parsen von Dokumenten kommen, die durch Authentifizierung geschützt sind, beispielsweise bei einer Website, für deren Zugriff ein Benutzername und ein Passwort erforderlich sind.
  • Es ist nicht threadsicher, daher müssen Sie besondere Vorsicht walten lassen, wenn Sie es in einer Multithread-Umgebung einsetzen möchten.
  • Es eignet sich nicht gut für die Übergabe von Dokumenten mit dynamisch geladenem Inhalt über JavaScript, wie beispielsweise bei AJAX.

Ox

Ox, oder Optimized XML, ist eine leistungsstarke und effiziente Bibliothek zum Parsen und Bearbeiten von XML- und JSON-Dokumenten in Ruby.

Die Bibliothek ist in C implementiert, um eine bessere Leistung und Speichereffizienz zu erzielen. Ox verwendet einen Pull-Parser-Ansatz zum Parsen des Dokuments, wodurch es große Dateien mit geringerem Speicherverbrauch als ein DOM-basierter Parser verarbeiten kann.

Ox verarbeitet XML-Dokumente unter anderem auf folgende Weise:

  • Als generischer XML-Parser und -Writer: Ox kann XML-Dokumente lesen und schreiben und bietet Methoden zum Suchen und Bearbeiten von Elementen im Dokument.
  • Als schneller Objekt/XML-Marshaller: Ox kann XML-Dokumente in Ruby-Objekte konvertieren und umgekehrt. Diese Funktion ermöglicht eine einfache Datenserialisierung und -deserialisierung.
  • Als Stream-SAX-Parser: Ox kann XML im Streaming-Verfahren parsen, was für große Dateien geeignet ist und eine schnelle Möglichkeit zur Verarbeitung der XML-Ereignisse bietet.

Gem-Befehl

gem install ox

Code-Beispiele

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

Vor- und Nachteile

Hier sind einige Vor- und Nachteile der Verwendung von Ox:

Vorteile

  • Ox ist sehr schnell und speichereffizient, dank der Verwendung eines Pull-Parser-Ansatzes und der Tatsache, dass es in C implementiert ist. Dadurch eignet es sich gut zum Parsen großer XML- und JSON-Dokumente oder für die Arbeit mit Streaming-Daten
  • Ox verfügt über eine übersichtliche und einfache API, die die Nutzung und das Verständnis erleichtert
  • Ox unterstützt sowohl JSON als auch XML, sodass Sie dieselbe Bibliothek zum Parsen verschiedener Dokumenttypen verwenden können
  • Es verfügt über eine integrierte Unterstützung für XML-Namespaces, was die Verarbeitung von XML-Dokumenten mit Namespaces vereinfacht.
  • Es wird aktiv gepflegt und aktualisiert

Nachteile

  • Die API zum Suchen und Bearbeiten von Elementen ist im Vergleich zu anderen Bibliotheken wie Nokogiri oder REXML möglicherweise weniger umfangreich
  • Die Community und der Support sind möglicherweise nicht so stark wie bei etablierteren Bibliotheken wie Nokogiri

Oga

Oga ist eine moderne und schlanke Bibliothek zum Parsen und Durchsuchen von XML- und HTML-Dokumenten in Ruby. Im Vergleich zu anderen Bibliotheken verfolgt sie einen moderneren Ansatz, da sie eine reine Ruby-Implementierung nutzt, was bedeutet, dass sie keine Abhängigkeiten von C-Bibliotheken hat.

Die Bibliothek eignet sich für kleine bis mittelgroße Dokumente und benötigt keine fortgeschrittenen Funktionen wie XSLT oder XML-Schema-Validierung.

Auch wenn die Bibliothek keine Systembibliotheken wie libxml benötigt, verwendet Oga zur Erzielung einer besseren Leistung eine kleine, native Erweiterung (C für MRI/Rubinius, Java für JRuby).

Gem-Befehl

gem install oga

Code-Beispiele

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()")

Vor- und Nachteile

Hier sind einige Vor- und Nachteile der Verwendung von Oga:

Vorteile

  • Oga verfügt über eine einfache und übersichtliche API, die das Navigieren und Durchsuchen von XML- und HTML-Dokumenten erleichtert.
  • Die reine Ruby-Implementierung erleichtert die Installation und Ausführung auf verschiedenen Plattformen und in unterschiedlichen Umgebungen.
  • Die API von Oga ermöglicht das sichere Parsen und Abfragen von Dokumenten in einer Multithread-Umgebung, ohne dass man sich um Leistungsprobleme sorgen muss.
  • Oga ist leichtgewichtig und lässt sich einfach in andere Bibliotheken und Module integrieren.
  • Oga hat einen geringen Speicherbedarf.

Nachteile

  • Oga bietet keine Unterstützung für erweiterte Funktionen wie XPath, XSLT oder die Validierung von XML-Dokumenten anhand einer DTD oder eines XML-Schemas.
  • Die Funktionen von Oga sind im Vergleich zu anderen Bibliotheken wie Nokogiri eingeschränkt, was für komplexe XML- oder HTML-Parsing-Aufgaben möglicherweise ungeeignet ist.
  • Obwohl es gepflegt wird, erhält es im Vergleich zu Nokogiri weniger Updates

LibXML Ruby

LibXML Ruby ist eine Anbindung an die C-Bibliothek libxml2, eine etablierte Bibliothek zum Parsen und Bearbeiten von XML-Dokumenten. Die Anbindung stellt eine Schnittstelle zu den Funktionen von libxml2 bereit und wird von mehreren anderen beliebten Bibliotheken genutzt, darunter Nokogiri.

Die Bibliothek verfügt über erweiterte Funktionen wie XPath-Unterstützung, DTD-Parsing, XSL-Transformationen und mehr.

Gem-Befehl

gem install libxml-ruby

Code-Beispiele

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

Vor- und Nachteile

Hier ist eine Liste der Vor- und Nachteile:

Vorteile

  • Bietet dank der zugrunde liegenden C-Bibliothek eine schnelle und effiziente Möglichkeit, XML- und HTML-Dokumente in Ruby zu parsen und zu bearbeiten.
  • Es unterstützt mehrere Kodierungsarten und kann Dokumente mit komplexen Strukturen und Namespaces verarbeiten
  • Bietet Unterstützung für XPath, eine Sprache, mit der Sie Elemente in einem XML-Dokument anhand ihrer Eigenschaften und Beziehungen durchsuchen und auswählen können.
  • Unterstützt XSLT-Transformationen und DTD-/XML-Schema-Validierung
  • Verfügt über eine breite Palette an Funktionen und Optionen, die es für fortgeschrittene Anwendungsfälle geeignet machen.
  • Es wird von der Community gut unterstützt und ist eine stabile und gut dokumentierte Bibliothek.

Nachteile

  • Sie kann mehr Speicherplatz beanspruchen als einige andere Bibliotheken, die reine Ruby-Implementierungen sind
  • Die API ist nicht so intuitiv oder benutzerfreundlich wie bei einigen anderen Ruby-Bibliotheken zum Parsen von XML, was die Verwendung für weniger erfahrene Entwickler erschweren kann
  • Sie unterstützt das Parsen von JSON nicht nativ; für die Verarbeitung von JSON sind zusätzliche Konfigurationen und Tools erforderlich
  • Es verarbeitet fehlerhaftes XML möglicherweise nicht so gut wie einige andere Bibliotheken.

REXML

REXML ist eine reine Ruby-Bibliothek zum Parsen von XML-Dokumenten. Sie ist in der Standard-Ruby-Bibliothek enthalten, sodass sie einfach zu verwenden ist und keine zusätzliche Installation erfordert.

Inspiriert von der Electric XML-Bibliothek für Java, zeichnet sie sich durch eine benutzerfreundliche API, geringe Größe und Geschwindigkeit aus.

Gem-Befehl

gem install rexml

Code-Beispiele

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 }

Vor- und Nachteile

Vorteile

  • Es ist in der Standard-Ruby-Bibliothek enthalten, sodass es einfach zu installieren und zu verwenden ist.
  • REXML ist reines Ruby, d. h. es ist nicht auf C-Bibliotheken oder externe Abhängigkeiten angewiesen, was es plattformunabhängig macht.
  • Es verfügt über eine einfache und benutzerfreundliche API, was es zu einer guten Wahl für kleine bis mittelgroße XML-Dokumente macht
  • Verfügt über eine integrierte XPath-Implementierung, was das Suchen und Auswählen von Elementen in einem XML-Dokument erleichtert

Nachteile

  • REXML ist nicht so schnell wie andere Bibliotheken, wie z. B. Nokogiri, und kann mehr Speicher beanspruchen, wodurch es für große XML-Dokumente nicht gut geeignet ist.
  • Es fehlen einige der fortgeschritteneren Funktionen anderer XML-Bibliotheken, wie die Verarbeitung von XML-Namespaces oder erweiterte Fehlerbehandlung

Selenium WebDriver

Selenium WebDriver ist in erster Linie kein HTML- oder XML-Parser, sondern ein Tool zur Browser-Automatisierung. Es ermöglicht Ihnen die programmgesteuerte Interaktion mit einem Webbrowser, indem es Benutzeraktionen wie das Klicken auf Schaltflächen, das Ausfüllen von Formularen und das Navigieren zwischen Seiten simuliert.

Mit Selenium WebDriver können Sie Interaktionen mit Webbrowsern automatisieren, wie z. B. das Klicken auf Schaltflächen, das Ausfüllen von Formularen und das Navigieren zwischen Seiten.

Das Tool ist nützlich, wenn Sie eine Website scrapen müssen, die JavaScript verwendet, um ihre Inhalte dynamisch zu laden, oder um bestimmte Aktionen auszuführen, wie die Interaktion mit einem Formular oder einer Schaltfläche auf der Seite.

Gem-Befehl

gem install selenium-webdriver webdrivers

Code-Beispiele

require "selenium-webdriver"

require "webdrivers/chromedriver"

driver = Selenium::WebDriver.for :chrome

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

puts driver.title

Vor- und Nachteile

Hier sind einige der Vor- und Nachteile der Verwendung von Selenium WebDriver in Ruby:

Vorteile

  • Selenium WebDriver unterstützt eine Vielzahl von Webbrowsern, darunter Chrome, Firefox, Edge, Safari und andere, was bedeutet, dass die von Ihnen erstellten Tests ohne Änderungen auf verschiedenen Browsern ausgeführt werden können.
  • Selenium WebDriver bietet eine Reihe von Möglichkeiten, den Inhalt einer Webseite zu untersuchen, beispielsweise das Auffinden von Elementen anhand ihrer ID, ihres Klassennamens oder ihres CSS-Selektors, was die Interaktion mit Webseiten und die Automatisierung von Aufgaben erleichtert.
  • Es ermöglicht Ihnen die Interaktion mit JavaScript-Elementen auf Webseiten; diese Funktion eignet sich daher gut zum Testen des Verhaltens von Webseiten mit JavaScript.
  • Es ist in der Branche weit verbreitet, gut dokumentiert und verfügt über eine große Entwickler-Community, die Unterstützung bieten kann.

Nachteile

  • Selenium WebDriver kann langsamer sein als andere HTML-Parsing-Bibliotheken, da es einen Browser starten und die Interaktion eines echten Benutzers simulieren muss; dies kann die zum Scrapen der Daten benötigte Zeit verlängern.
  • Selenium WebDriver ist darauf angewiesen, dass ein Webbrowser auf dem Rechner installiert ist, was zu Problemen führen kann, wenn das Skript in einer Headless-Umgebung oder auf einem Server ohne GUI ausgeführt wird.
  • Selenium WebDriver ist keine spezialisierte Bibliothek für das Parsen von HTML, und seine API ist möglicherweise nicht so intuitiv oder benutzerfreundlich wie die spezialisierter Bibliotheken wie Nokogiri oder

Erwähnenswert

Obwohl wir uns auf aktive und gut gepflegte Bibliotheken für das Parsen von HTML und XML in Ruby konzentriert haben, gibt es noch einige andere Bibliotheken, die eine Erwägung wert sind.

Man sollte jedoch bedenken, dass diese Bibliotheken möglicherweise weniger aktiv gepflegt werden oder weniger Unterstützung durch die Community erhalten, was bei der Verwendung in einer Produktionsumgebung ein zusätzliches Risiko darstellen kann.

Es ist unerlässlich, die Funktionen und die Leistung der Bibliothek sowie die Größe und Komplexität der zu parsenden Dokumente sorgfältig zu prüfen, bevor eine Entscheidung getroffen wird.

Hpricot

Hpricot ist ein weiterer beliebter Ruby-HTML-Parser mit Unterstützung für XML-Dokumente. Hpricot verfügt über eine einfache und benutzerfreundliche API und eignet sich gut für kleine bis mittelgroße Dokumente.

Gem-Befehl

gem install hpricot

Code-Beispiele

require "hpricot"

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

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

Vor- und Nachteile

Hier sind einige Vor- und Nachteile der Verwendung von Hpricot:

Vorteile

  • Hpricot verfügt über eine einfache und benutzerfreundliche API, die das Durchsuchen und Navigieren in HTML- und XML-Dokumenten erleichtert.
  • Die Suchfunktionen von Hpricot basieren auf jQuery-ähnlichen CSS-Selektoren, die leicht zu verstehen und zu verwenden sind.
  • Da Teile von Hpricot in C geschrieben sind, ist die Bibliothek relativ schnell und effizient
  • Sie eignet sich für kleine bis mittelgroße Dokumente
  • Genau wie Nokogiri kann sie fehlerhafte Dokumente analysieren

Nachteile

  • Hpricot wird seit 2010 nicht mehr aktiv gepflegt, sodass es möglicherweise nicht gut mit neueren Ruby-Versionen zusammenarbeitet und es an Unterstützung für neue Funktionen und Fehlerbehebungen mangeln könnte.
  • Die Suchfunktionen von Hpricot unterstützen nicht alle CSS-Selektoren und es werden keine XML-Namespaces unterstützt.
  • Es kann fehlerhafte XML-Dokumente nicht verarbeiten
  • Die Leistung von Hpricot kann im Vergleich zu anderen Bibliotheken wie Nokogiri oder Ox geringer sein und es kann mehr Speicher verbrauchen, insbesondere bei größeren Dokumenten.

Fazit

Zusammenfassend lässt sich sagen, dass es für das Parsen von HTML- und XML-Dokumenten in Ruby eine Vielzahl von Bibliotheken gibt, von denen jede ihre eigenen Vor- und Nachteile hat.

Nokogiri, REXML, Ox, Hpricot und LibXML Ruby sind allesamt leistungsstarke Bibliotheken, die für Web-Scraping verwendet werden können, doch es ist wichtig, die spezifischen Anforderungen und Bedürfnisse Ihres Projekts zu prüfen, bevor Sie sich für eine entscheiden.

Selenium WebDriver ist zwar nicht in erster Linie für das Parsen von HTML konzipiert, kann aber ebenfalls für das Web-Scraping verwendet werden; es handelt sich jedoch um ein Tool zur Browser-Automatisierung, das im Vergleich zu spezialisierten Bibliotheken eine gewisse zusätzliche Komplexität und eine langsamere Leistung mit sich bringt.

Die Erstellung eines Web-Scraping-Skripts kann jedoch eine zeitaufwändige und schwierige Aufgabe sein, insbesondere wenn Sie mit dynamischen Websites, CAPTCHAs und Sperren umgehen müssen.

WebScrapingAPI bietet eine einfache und effektive Lösung zum Abrufen von Daten aus dem Web, sodass Sie kein eigenes Skript erstellen müssen. Mit der Funktion „Extraktionsregeln“ können Sie Informationen ganz einfach von einer Webseite abrufen, indem Sie die CSS-Selektoren der Elemente angeben.

Warum erstellen Sie nicht noch heute ein Konto?

Über den Autor
Raluca Penciuc, Full-Stack-Entwickler @ WebScrapingAPI
Raluca PenciucFull-Stack-Entwickler

Raluca Penciuc ist Full-Stack-Entwicklerin bei WebScrapingAPI. Sie entwickelt Scraper, verbessert Umgehungsstrategien und findet zuverlässige Wege, um die Erkennung auf Zielwebsites zu verringern.

Los geht’s

Sind Sie bereit, Ihre Datenerfassung zu erweitern?

Schließen Sie sich den über 2.000 Unternehmen an, die WebScrapingAPI nutzen, um Webdaten im Unternehmensmaßstab ohne zusätzlichen Infrastrukturaufwand zu extrahieren.