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:
- Was ist ein Web-Crawler?
- Akzeptanzkriterien
- Setup
- Code
- Testen
- Wichtige Hinweise
- Nächste Schritte
- Zusammenfassung

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.

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.

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-crawleraus - Erstelle eine main.go Datei mit dem Befehl
touch main.go - Öffne das Projekt in der IDE deiner Wahl
- Erstelle in der
main.goDatei einemain()Funktion, die eineHello 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

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.Argsgibt dir eine Liste an Befehlszeilenargumenten zurück, die mit dem Programmnamen beginnen. Mit dem Befehlgo run main.go url1 url2 url3wird dir überos.Args[1:]ein Array miturl1, url2, url3ausgegeben.- 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.

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

Links extrahieren und ausgeben
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.ErrorTokenfindet, 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:

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.

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.

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.

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

