Web Scraping in Ruby: Das ultimative Tutorial

Raluca Penciuc am 15. Januar 2023

Machen wir uns nichts vor: Mit den Jahren wird das Datenvolumen im Internet immer weiter ansteigen. Die Situation entzieht sich jedermanns Kontrolle, aber ist das wirklich eine schlechte Sache?

Vor allem in den letzten zehn Jahren hat das Web Scraping enorm an Popularität gewonnen. Um in der heutigen Geschäftswelt erfolgreich zu sein, brauchen Unternehmen geeignete Strategien, die eine Fülle von Informationen in kurzer Zeit erfordern. Außerdem kann es für Entwickler eine gute Möglichkeit sein, ihre Programmierkenntnisse zu verbessern UND dem Unternehmen zu helfen.

Wenn Sie für das Team Ruby spielen, aber nicht viel mit Web-Scraping zu tun haben, bietet Ihnen dieser Artikel eine neue Nische, die Sie erkunden können: den Bau eines eigenen Web-Scrapers.

Verstehen von Web Scraping

Nehmen wir als Beispiel eine Preisvergleichsplattform. Ihre Aufgabe ist es, die Kosten für eine Vielzahl von Artikeln von verschiedenen Online-Händlern zu ermitteln. Aber warum nur bei physischen Produkten? Auch das Flug- und Gastgewerbe ist dank der Preisvergleichsplattformen viel verbraucherfreundlicher geworden. Wie also funktionieren diese magischen Websites oder Apps? Natürlich durch Web Scraping!

Wahrscheinlich fragen Sie sich jetzt : "Wie kann ich diese Daten noch verwenden?". Werfen wir also einen Blick auf einige der praktischen Anwendungen von Web Scraping:

Dieser gut geschriebene Artikel über Web Scraping enthält detaillierte Beschreibungen und zusätzliche Anwendungsfälle.

Web-Scraper sind nicht einfach zu erstellen, selbst wenn man versteht, wie sie funktionieren und welche Vorteile sie bieten können. Es gibt viele Möglichkeiten, wie Websites Bots erkennen und vom Zugriff auf ihre Daten abhalten können.

Als Beispiele seien hier einige genannt:

  • Geo-Blockierung: Wenn Sie nach Informationen aus einem anderen Gebiet suchen, werden Ihnen möglicherweise regional spezifische Ergebnisse angezeigt (z. B. Preise für Flugtickets).
  • IP-Blockierung: Eine Website kann Sie blockieren oder verlangsamen, wenn sie feststellt, dass Sie wiederholt Anfragen von einer bestimmten IP-Adresse stellen;
  • Honeypots: Menschen können Honeypot-Links nicht sehen, aber Bots schon. Sobald die Roboter in die Falle getappt sind, wird ihre IP-Adresse gesperrt;
  • CAPTCHAs: Menschen können diese einfachen logischen Probleme relativ schnell lösen, aber Scraper finden sie oft schwierig;

Es ist keine leichte Aufgabe, all diese Hindernisse zu überwinden. Es ist nicht allzu schwierig, einen einfachen Bot zu erstellen, aber die Entwicklung eines exzellenten Web Scrapers ist schon etwas anspruchsvoller. Daher sind APIs für Web-Scraping in den letzten zehn Jahren zu einem der heißesten Themen geworden.

HTML-Inhalte von beliebigen Websites können mit WebScrapingAPI gesammelt werden, und alle zuvor genannten Probleme werden automatisch behoben. Außerdem nutzen wir Amazon Web Services, um Geschwindigkeit und Skalierbarkeit zu gewährleisten. Klingt interessant, oder? Nun, hören Sie nicht nur auf zu klingen! Testen Sie es selbst mit den 5000 kostenlosen API-Aufrufen, die Sie im Rahmen der kostenlosen WebScrapingAPI-Testversion erhalten.

Das Web verstehen

Um das Web zu verstehen, muss man das Hypertext Transfer Protocol (HTTP) kennen. Es erklärt, wie ein Server und ein Client kommunizieren. Eine Nachricht enthält Informationen, die den Client beschreiben und wie er Daten verarbeitet: Methode, HTTP-Version und Header.

Bei HTTP-Anfragen verwenden Web Scraper die GET-Methode, um Daten vom Server abzurufen. Darüber hinaus gibt es einige erweiterte Methoden wie POST und PUT. Die HTTP-Methoden werden hier zu Ihrer Information ausführlich beschrieben.

In den HTTP-Headern finden sich eine Reihe zusätzlicher Informationen über Anfragen und Antworten. Für Web-Scraping sind diese Informationen von Bedeutung:

  • User-Agent: Web Scraper verlassen sich auf diesen Header, um ihre Anfragen realistischer erscheinen zu lassen; er enthält Informationen wie die Anwendung, das Betriebssystem, die Software und die Version.
  • Cookie: Server und Anfrage können vertrauliche Informationen austauschen (z. B. Authentifizierungstoken).
  • Referrer: enthält die Quellseite, die der Nutzer besucht hat; daher ist es wichtig, diese Tatsache zu berücksichtigen.
  • Host: identifiziert den Host, mit dem Sie sich verbinden.
  • Accept: gibt einen Antworttyp für den Server an (z. B. text/plain, application/json).

Ruby verstehen

Ruby ist eine hochentwickelte Multiparadigmen-Programmiersprache, die auch vollständig interpretierbar ist. Das bedeutet, dass der Programmcode im Klartext gespeichert wird, der an den Interpreter übermittelt wird, der ihn ausführt.

1995 kombinierte Yukihiro Matsumoto (in der Ruby-Gemeinde auch als Matz bekannt) Merkmale verschiedener Programmiersprachen wie Perl, Lisp und Smalltalk, um eine neue Sprache zu schaffen, die sich auf Einfachheit und Produktivität konzentriert.

Es handelt sich um eine Nischenprogrammiersprache, deren natürliches Einsatzgebiet Webanwendungen sind. Hier sind die wesentlichen Vorteile, die Sie aus der Verwendung dieser Sprache in Ihren Projekten ziehen:

  • Es liefert schnell Ergebnisse. In Kombination mit dem Rails-Framework kann man relativ schnell Software erstellen. Deshalb bevorzugen Startups Ruby vor allem, um ihre MVPs(Minimum Viable Product) schnell zu erstellen.
  • Sie ist gut entwickelt und wird von der wachsenden Ruby-Gemeinschaft gepflegt.
  • Hilfreiche Tools und Bibliotheken (so genannte Gems) sorgen dafür, dass es einfach ist, die besten Programmierpraktiken in fast jeder Situation zu befolgen.

Andererseits machen diese Vorteile Ruby nicht zu einer magischen Universallösung für jede neue Software. Sie können auch diese Eigenschaften der Sprache berücksichtigen, bevor Sie eine Entscheidung treffen:

  • Mit zunehmender Größe werden die mit Ruby erstellten Anwendungen langsamer, was zu Problemen bei der Skalierbarkeit führt.
  • Sein natürlicher Bereich sind Webanwendungen. Daher ist es für Desktop-/Mobilanwendungen nicht gut geeignet.
  • Da er einen Interpreter verwendet, wird ein möglicher objektorientierter Code langsamer sein.

Einen eigenen Web Scraper erstellen

Jetzt können wir mit der Datenextraktion beginnen. Das Wichtigste zuerst: Wir brauchen eine Website, die wertvolle Informationen liefert.

Schritt 1: Einrichten der Umgebung

Um unseren Ruby Web Scraper zu bauen, müssen wir zunächst sicherstellen, dass wir alle Voraussetzungen erfüllen:

  • Die neueste stabile Version von Ruby: Sehen Sie sich die offizielle Installationsanleitung an, um die beste Methode für Ihr Betriebssystem zu wählen.
  • Eine IDE: In dieser Anleitung verwenden wir Visual Studio Code, da es leichtgewichtig ist und keine zusätzlichen Konfigurationen erforderlich sind, aber Sie können jede IDE wählen, die Sie bevorzugen.
  • Bundler: ein Ruby-Tool zur Verwaltung von Abhängigkeiten (auch Gem genannt);
  • Watir: ein von Selenium betriebener Edelstein, der für automatische Tests verwendet wird, da er das Verhalten des Benutzers in einem Browser nachahmen kann;
  • Webdrivers: ein von Watir empfohlenes Tool, das automatisch den neuesten Treiber für eine Browser-Instanz herunterlädt;
  • Nokogiri: ein Juwel, das für seine Fähigkeit bekannt ist, die Analyse von Webseiten zu erleichtern. Es kann HTML und XML analysieren, erkennt defekte HTML-Dokumente und bietet Zugriff auf Elemente über XPath- und CSS3-Selektoren.

Nachdem Sie die Ruby-Umgebung eingerichtet haben, erstellen Sie ein neues Verzeichnis irgendwo auf Ihrem Computer und öffnen es mit der IDE Ihrer Wahl. Führen Sie dann den folgenden Befehl in einem Terminalfenster aus, um unseren ersten Edelstein zu installieren:

> gem install bundler

Erstellen Sie nun eine Datei namens Gemfile in Ihrem Projekt-Stammverzeichnis. Hier werden wir den Rest der Gems als Abhängigkeiten hinzufügen:

Quelle 'https://rubygems.org'

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

Gehen Sie nun zurück zum Terminalfenster und führen Sie den folgenden Befehl aus, um die angegebenen Edelsteine zu installieren:

> Bündel-Installation

Tolle Einrichtung! Zum Schluss müssen wir nur noch eine Datei "scraper.rb" erstellen, die den Code unseres Web Scrapers enthält. Was auch immer wir hier schreiben, wir können es mit dem Befehl ausführen:

> ruby scraper.rb

Schritt 2: Überprüfen Sie die Seite, die Sie scrapen möchten

Großartig, machen wir weiter! Navigieren Sie zu der Seite, die Sie scrapen möchten, und klicken Sie mit der rechten Maustaste auf die Seite und dann auf "Element inspizieren". Es öffnet sich die Entwicklerkonsole, in der Sie den HTML-Code der Website sehen sollten.

blog-image

Schritt 3: Senden Sie eine HTTP-Anfrage und scrapen Sie den HTML-Code

Um den HTML-Code auf unserem lokalen Rechner abzurufen, müssen wir nun eine HTTP-Anfrage mit Watir senden, um das Dokument zurückzugeben. Kehren wir zur IDE zurück und setzen diese Idee in Code um.

Schreiben Sie zunächst die Importe, die wir benötigen:

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

Dann initialisieren wir eine Browserinstanz und navigieren zu der Website, die wir scrapen wollen. Dann greifen wir auf den HTML-Code zu und übergeben ihn an den Nokogiri-Konstruktor, der uns beim Parsen des Ergebnisses helfen wird.

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

Wir haben das Ergebnis auch in eine Textdatei namens "parsed.txt" geschrieben, um einen Blick auf den HTML-Code zu werfen. Es ist wichtig, die Verbindung nach Erhalt der Antwort zu schließen, da der Prozess weiterläuft.

Schritt 4: Extrahieren bestimmter Abschnitte

Wir haben also ein HTML-Dokument, aber wir wollen Daten, was bedeutet, dass wir die vorherige Antwort in für den Menschen lesbare Informationen umwandeln müssen.

Beginnen wir mit kleinen Schritten und extrahieren wir den Titel der Website. Eine bemerkenswerte Tatsache über Ruby ist, dass mit sehr wenigen Ausnahmen alles ein Objekt ist, was bedeutet, dass sogar eine einfache Zeichenkette Attribute und Methoden haben kann.

blog-image

Daher können wir über die Attribute des parsed_page-Objekts einfach auf den Wert des Titels der Website zugreifen.

puts parsed_page.title

Als Nächstes wollen wir alle Links aus der Website extrahieren. Hierfür verwenden wir eine allgemeinere Methode, die bestimmte Tags analysiert, die css-Methode.

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

puts links

Wir verwenden auch die Map-Methode, um nur die Links mit einem href-Attribut aus dem HTML zu behalten.

Nehmen wir ein realistischeres Beispiel. Wir müssen die Artikel aus dem Blog extrahieren, ihren Titel, ihre Adresse und ihre Meta-Beschreibung.

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

Ja, wie Sie vielleicht schon erraten haben, ist ein XPath-Ausdruck dafür verantwortlich, denn wir suchen nach HTML-Elementen anhand ihrer Klassennamen und ihrer Oberbegriffe.

Schritt 5: Exportieren der Daten in CSV

Diese Art der Extraktion kann von Vorteil sein, wenn die Daten an eine andere Anwendung weitergegeben werden sollen, in unserem Fall an einen Artikel-Aggregator. Zu diesem Zweck müssen wir die geparsten Daten in eine externe Datei exportieren.

Wir werden eine CSV-Datei erstellen, da diese leicht von einer anderen Anwendung gelesen und mit Excel zur weiteren Bearbeitung geöffnet werden kann. Zunächst nur ein weiterer Import:

erfordern 'csv'

Dann erstellen wir die CSV-Datei im "Append"-Modus und verpacken den vorherigen Code, so dass unser Scraper jetzt wie folgt aussieht:

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, das ist alles! Jetzt können wir alle geparsten Daten auf eine saubere, unauffällige und leicht verständliche Weise sehen.

blog-image

Schlussfolgerung und Alternativen

Wir haben unser Tutorial nun abgeschlossen. Herzlichen Glückwunsch! Hoffentlich hat Ihnen dieser Artikel viele Informationen über Web Scraping gegeben und Ihnen geholfen, es besser zu verstehen.

Offensichtlich kann diese Technologie viel mehr als nur Artikelaggregatoren betreiben. Der Schlüssel liegt darin, die richtigen Daten zu finden und sie zu analysieren, um neue Möglichkeiten zu erschließen.

Wie ich jedoch bereits zu Beginn des Artikels erwähnt habe, stehen Web-Scraper vor zahlreichen Herausforderungen. Abgesehen davon, dass es Ihr Geschäft ankurbelt, ist es eine großartige Lernmöglichkeit für Entwickler, Probleme mit ihren eigenen Web-Scrapern zu lösen. Dennoch möchten Sie vielleicht Kosten einsparen, wenn Sie ein Projekt abschließen müssen (Zeit, Geld, Mitarbeiter).

Eine API, die sich der Lösung dieser Probleme widmet, wird immer einfacher zu benutzen sein. Selbst wenn es Hindernisse wie Javascript-Rendering, Proxies, CAPTHAs und andere blockierende Faktoren gibt, überwindet WebScrapingAPI sie alle und bietet eine anpassbare Erfahrung. Wenn Sie noch unsicher sind, probieren Sie doch einfach die kostenlose Testversion aus.

Nachrichten und Aktualisierungen

Bleiben Sie auf dem Laufenden mit den neuesten Web Scraping-Anleitungen und Nachrichten, indem Sie unseren Newsletter abonnieren.

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

Ähnliche Artikel

Vorschaubild
LeitfädenWie man Amazon-Produktdaten scrappt: Ein umfassender Leitfaden zu Best Practices & Tools

Entdecken Sie die Komplexität des Scrapens von Amazon-Produktdaten mit unserem ausführlichen Leitfaden. Von Best Practices und Tools wie der Amazon Scraper API bis hin zu rechtlichen Aspekten erfahren Sie, wie Sie Herausforderungen meistern, CAPTCHAs umgehen und effizient wertvolle Erkenntnisse gewinnen.

Suciu Dan
Autorenavatar
Suciu Dan
15 Minuten lesen
Vorschaubild
AnwendungsfälleNutzung von Web Scraping für alternative Daten im Finanzwesen: Ein umfassender Leitfaden für Investoren

Erforschen Sie die transformative Kraft des Web Scraping im Finanzsektor. Von Produktdaten bis zur Stimmungsanalyse bietet dieser Leitfaden Einblicke in die verschiedenen Arten von Webdaten, die für Investitionsentscheidungen zur Verfügung stehen.

Mihnea-Octavian Manolache
Autorenavatar
Mihnea-Octavian Manolache
13 Minuten lesen
Vorschaubild
Wissenschaft des Web ScrapingWeb Scraping leicht gemacht: Die Bedeutung von Data Parsing

Erfahren Sie, wie Sie mit Hilfe von Datenparsing, HTML-Parsing-Bibliotheken und schema.org-Metadaten effizient Daten für Web-Scraping und Datenanalysen extrahieren und organisieren können.

Suciu Dan
Autorenavatar
Suciu Dan
12 Minuten lesen