Coding Praxis Go & Node.js Übungen

Web-Crawler in Go erstellen: Schritt-für-Schritt

Das Bild zeigt das Gopher, das Go Maskottchen, vor einem blauen Hintergrund mit Spinnenbeine. Es dient als Titelbild für den Beitrag Web-Crawler in Go erstellen

Mit einem Web-Crawler kannst du eine Webseite durchsuchen, spezifische Informationen extrahieren und diese sammeln.

Einen eigenen Web-Crawler zu schreiben, hilft dir ein besseres Verständnis für den Aufbau von HTML-Seiten zu bekommen. Zudem kann dir die Implementierung einiges über deine eigene Programmiersprache beibringen.

Deshalb schauen wir uns heute einmal an, wie du einen Web-Crawler in Go schreiben kannst:

Das Maskottchen der Programmiersprache Go, der Gopher, in hellblauer Farbe

Was ist ein Web-Crawler?

Ein Web-Crawler ist ein Programm, das automatisch durch das Internet navigiert, um Informationen von Webseiten zu gewinnen. Dieser Vorgang wird auch als Web-Crawling oder Spidering bezeichnet.

Der vorrangige Zweck eines Web-Crawlers besteht darin, Webseiten zu indexieren, um Suchmaschinen bei der Bereitstellung relevanter Suchergebnisse zu unterstützen. Indem er Webseiten systematisch durchsucht, sammelt der Crawler Daten, die dann in einer Datenbank gespeichert oder für andere Zwecke genutzt werden können.

Aufgaben, die von einem Web-Crawler ausgeführt werden können, sind das Extrahieren von:

  • Texten
  • Bildern
  • Links
  • anderen relevanten Informationen

Die so gesammelten Daten finden Anwendung in Analysen, Datenbankaktualisierungen oder anderen Anwendungen.

Das Maskottchen der Programmiersprache Go, der Gopher, in hellblauer Farbe

Akzeptanzkriterien

Wie soll dein Web-Crawler funktionieren?

  • Bei der Eingabe einer URL in deinem Terminal, soll eine Webseite aufgerufen werden.
  • Diese Webseite soll nach vorhandenen Links durchsucht werden.
  • Die Links sollen in einer Liste gesammelt werden.
  • Sobald das Ende der Seite erreicht wurde, soll die Liste im Terminal ausgegeben werden.

Info: Für Konsole oder Command Prompt wird in diesem Artikel der Begriff Terminal verwendet.

Das Maskottchen der Programmiersprache Go, der Gopher, in hellblauer Farbe

Setup

Um einen Web-Crawler in Go schreiben zu können, musst du vorab Go installiert haben.

Sollte die Programmiersprache Go neu für dich sein, kannst du auch mit diesem Artikel beginnen: Erste Schritte mit Go.

Neues Projekt einrichten

Initialisiere ein neues Go Projekt:

  • Erstelle über dein Terminal ein neues Verzeichnis mit dem Befehl mkdir web-crawler
  • Führe dort den Befehl go mod init web-crawler aus
  • Erstelle eine main.go Datei mit dem Befehl touch main.go
  • Öffne das Projekt in der IDE deiner Wahl
  • Erstelle in der main.go Datei eine main() Funktion, die eine Hello World! Ausgabe ausführt
  • Teste mit dem Befehl run main.go, ob dein Setup geklappt hat

Die Terminal Befehle sind neu für dich? Schaue dir diesen Artikel an: Grundlegende Linux Befehle inklusive Übungen

Das Maskottchen der Programmiersprache Go, der Gopher, in hellblauer Farbe

Code

Nachdem die Akzeptanzkriterien klar sind und das Setup vorbereitet ist, kannst du mit der Implementierung beginnen.

GET Request vorbereiten

Damit deine Eingabe über das Terminal angenommen werden kann, benötigst du das os Package von go. Genauer genommen, os.Args:

  • os.Args gibt dir eine Liste an Befehlszeilenargumenten zurück, die mit dem Programmnamen beginnen. Mit dem Befehl go run main.go url1 url2 url3 wird dir über os.Args[1:] ein Array mit url1, url2, url3 ausgegeben.
  • Iterierst du über dieses Array, kannst du für jede einzelne URL einen GET Request durchführen. Hierfür benötigst du eine for-Schleife in deiner main.go Datei.

Um einen richtigen Response zu erhalten, werden wir die go Startseite anfragen und somit mit nur einer URL anfangen. Der zugehörige Code sieht wie folgt aus:

Führe den Befehl go run main.go https://go.dev/ aus und schaue dir die Antwort des GET Requests im Terminal an.

Das Maskottchen der Programmiersprache Go, der Gopher, in hellblauer Farbe

Response verarbeiten

Der nächste Schritt ist die Verarbeitung des Response. Dieser soll nach enthaltenen Links durchsucht werden.

Das html Package bietet dir verschiedene Möglichkeiten, um den Rückgabewert zu verarbeiten.

Für unseren Web-Crawler verwenden wir die html.NewTokenizer() Funktion aus diesem Package. Diese Funktion bietet eine zeilenweise Verarbeitung des HTML-Inhalts an. Dabei wird der erhaltene HTML-Code in Tokens zerlegt.

Jeder Token repräsentiert einen Teil des HTML-Codes, etwa ein Tag oder Text. Indem du durch die Token iterierst, kannst du nach den gewünschten Links suchen und sie in einer Liste speichern.

Info: Wenn du komplexere Akzeptanzkriterien hast, kann eine andere Funktion möglicherweise besser geeignet sein, wie html.Parse().

Das Maskottchen der Programmiersprache Go, der Gopher, in hellblauer Farbe

Nachdem du mit http.Get() erfolgreich eine Webseite aufgerufen hast, kommt der spannende Teil: Die Links aus dem HTML-Code herausfiltern.

Hierfür erstellen wir die Funktion extractLinks(), die den Response Body als Eingabe erhält. Sie gibt ein Array mit allen gefundenen Links zurück.

So funktioniert extractLinks() Schritt für Schritt:

  • Tokenizer erstellen: Der Tokenizer zerlegt die HTML-Seite in kleine Bausteine (Tokens). Wie ein Scanner, der Tag für Tag durchgeht.
  • Endlosschleife durch die Seite: tokenizer.Next() liest das nächste HTML-Element. Die Schleife läuft, bis die gesamte Seite durch ist.
  • Ende der Seite erkennen: Wenn der Tokenizer html.ErrorToken findet, sind wir fertig. Alle Links werden zurückgegeben.
  • Nach <a>-Tags suchen: Nur StartTagToken und SelfClosingTagToken können Links enthalten. Bei <a>-Tags schauen wir genauer hin.
  • href-Attribut extrahieren: Jedes <a>-Tag hat Attribute. Wir suchen das href-Attribut, das die eigentliche URL enthält.
  • Interne Anker filtern: Links wie href=“#top“ (Anker auf derselben Seite) werden ignoriert. Nur echte URLs kommen in unsere Liste.

Unsere main.go sieht nun folgendermaßen aus:

Das Maskottchen der Programmiersprache Go, der Gopher, in hellblauer Farbe

Testen

Du hast nun erfolgreich deinen ersten Web-Crawler mit Go geschrieben und kannst ihn ausprobieren.

Lasse dir alle Links mit go run main.go https://go.dev/ ausgeben und sieh dir dein Ergebnis in deinem Terminal an.

Dein Crawler findet jetzt systematisch alle Links, genau wie eine Suchmaschine das macht.

Das Maskottchen der Programmiersprache Go, der Gopher, in hellblauer Farbe

Wichtige Hinweise

Achte darauf, dass du die robots.txt einer Seite beachtest und keine Daten sammelst, die nicht für den öffentlichen Zugriff gedacht sind.

Web‑Crawler sollten immer respektvoll und im Rahmen der Nutzungsbedingungen der jeweiligen Website eingesetzt werden.

Du findest die robots.txt einer Seite, indem du /robots.txt an die Domain anhängst, zum Beispiel https://go.dev/robots.txt. Dort stehen Anweisungen, welche Bereiche für das Crawlen erlaubt oder verboten sind.

Das Maskottchen der Programmiersprache Go, der Gopher, in hellblauer Farbe

Nächste Schritte

Mit diesem einfachen Web‑Crawler hast du schon einiges gelernt, aber du kannst ihn noch weiter ausbauen. Hier sind ein paar Ideen, wie du dein Projekt erweitern kannst:

  • Crawler auf mehrere Seiten erweitern (rekursives Crawling): Lass deinen Crawler nicht nur die Startseite durchsuchen, sondern auch die gefundenen Links besuchen und dort erneut nach Links suchen.
  • Fehlerbehandlung verbessern: Füge Timeouts hinzu und behandle Netzwerkfehler sauber, damit dein Programm bei langsamen oder nicht erreichbaren Seiten nicht hängen bleibt.
  • Daten in eine Datei oder Datenbank schreiben: Speichere die gefundenen Links statt nur im Terminal in einer Datei (z. B. JSON oder CSV), um sie später auszuwerten. Alternativ kannst du sie auch in einer Datenbank speichern.
Das Maskottchen der Programmiersprache Go, der Gopher, in hellblauer Farbe

Zusammenfassung

Mit diesem einfachen Web‑Crawler hast du die Grundlagen von HTTP‑Requests, HTML‑Parsing und Terminal‑Input in Go kennengelernt. Damit kannst du jetzt eigene kleine Crawling‑Tools bauen und dein Verständnis für Web‑Seiten vertiefen.

Quelle Hintergrund des Titelbilds: kostenlose Hintergrundfotos von .pngtree.com

Annika

Ich bin IT-Quereinsteigerin nach einem Coding-Bootcamp. Neben meiner Tätigkeit als Software Engineer bei REWE digital, setze ich mich u.a. in meiner Mentorinnen-Rolle für die Vernetzung von Frauen im IT-Umfeld ein. Zusätzlich betreibe ich coding.anni, um anderen den (Quer-) Einstieg zu erleichtern. Durch das Teilen meiner Erfahrungen und praktischen Tipps, will ich die Vielfalt in der IT vorantreiben.

Was dir auch gefallen könnte...

WordPress Cookie Hinweis von Real Cookie Banner