Schritt-für-Schritt-Anleitung zur Erstellung eines Web Crawlers von Grund auf

Bemerkungen: 0

Webcrawler werden für die Preisüberwachung, die Zusammenstellung von Nachrichten, die Analyse von Wettbewerbern, die Indizierung von Suchmaschinen und andere Aufgaben verwendet, die eine strukturierte Datenerfassung von Websites erfordern. Dieser Leitfaden zeigt Ihnen, wie Sie einen Web-Crawler von Grund auf aufbauen, angefangen bei der Projektplanung und der Wahl der Technologie bis hin zur Einrichtung der Umgebung und der Datenspeicherung. Er bietet eine Grundlage, die Sie später auf komplexere und umfangreichere Projekte ausweiten können.

Was ist ein Web Crawler und wie funktioniert er?

Es handelt sich um ein Programm, das automatisch Webseiten besucht und Informationen von ihnen sammelt. Es arbeitet, indem es HTTP-Aufrufe an eine Website sendet, den HTML-Code jeder Seite abruft und dann diesen HTML-Code verarbeitet, um die erforderlichen Daten zu extrahieren. Danach folgt es internen Links und wiederholt den Prozess, bis es vordefinierte Grenzen oder Stoppbedingungen erreicht. Dieser Prozess ist nicht dasselbe wie Web Scraping. Für einen detaillierten Vergleich siehe Web Scraping vs. Web Crawling.

Solche Werkzeuge werden häufig eingesetzt:

  • Preisüberwachung im elektronischen Handel
  • Sammlung von Kontakten und Verzeichnissen
  • Aufbau von Datensätzen für die Analytik
  • Indizierung von Inhalten für Suchmaschinen

In solchen Fällen ist es oft besser, einen eigenen Web-Crawler zu entwickeln: Sie können das Programm genau auf Ihre Bedürfnisse abstimmen, die Häufigkeit der Anfragen kontrollieren und festlegen, welche Informationen auf welche Weise gesammelt werden sollen.

Planung eines Web Crawler Projekts

Bevor Sie mit der Programmierung beginnen, sollten Sie die wichtigsten Parameter Ihres Projekts festlegen, um allgemeine Probleme zu vermeiden und einen stabilen Betrieb zu gewährleisten.

  1. Ziele der Datenerfassung. Geben Sie an, wofür Sie das Tool benötigen: Preisüberwachung, Erfassung von Kontakten, Indexierung von Inhalten, Aufbau von Analysedatensätzen usw.
  2. Zielseiten und Datentypen. Entscheiden Sie, welche Ressourcen Sie crawlen werden und welche Informationen Sie von ihnen benötigen. Dies wirkt sich auf Ihre Architektur und die Wahl der Technologie aus.
  3. Häufigkeit der Aktualisierung. Schätzen Sie ab, wie oft Sie neue Daten benötigen, um eine Überlastung der Systeme oder die Arbeit mit veralteten Informationen zu vermeiden.
  4. Technische und rechtliche Beschränkungen. Prüfen Sie robots.txt, Anti-Bot-Schutz, Datenschutzgesetze und Nutzungsbedingungen der Website.
  5. Verarbeitung und Speicherung. Entscheiden Sie, in welchem Format Sie die Informationen speichern und wie Sie sie später auswerten wollen.

Ein gut geplantes Werkzeug arbeitet zuverlässig, nutzt Ressourcen effizient und liefert hochwertige Ergebnisse.

Die Wahl der richtigen Sprache und Werkzeuge

Sie können einen Web-Crawler in mehreren Programmiersprachen erstellen, darunter Python, Java und PHP. Python zeichnet sich durch eine einfache Syntax und ein reichhaltiges Ökosystem von Bibliotheken für HTTP-Anfragen und HTML-Parsing aus (z. B. requests, BeautifulSoup, lxml). Java ist eine solide Wahl für Groß- und Unternehmensprojekte. PHP ist in der Webentwicklung weiter verbreitet und für eigenständige Crawler weniger geeignet.

Für einen ersten Versuch werden wir uns ansehen, wie man einen Web-Crawler in Python erstellt, da dies normalerweise die optimale Wahl ist, weil man damit grundlegende Funktionen schnell implementieren und testen kann.

Einrichten Ihrer Umgebung

Beginnen Sie mit der Installation von Python aus dem offizielle Website. Installieren Sie dann die Kernbibliotheken, die Sie verwenden werden: requests zum Senden von HTTP-Anfragen und BeautifulSoup zum Parsen von HTML:


pip install requests beautifulsoup4

Es lohnt sich auch, die Projektstruktur von Anfang an zu organisieren: separate Dateien für die Hauptlogik, die Konfiguration und die Dienstprogramme. Das macht die zukünftige Wartung und Skalierung viel einfacher.

Wie man einen Web Crawler erstellt (Code-Beispiel)

Ein einfaches Skript kann aus drei Hauptteilen bestehen: Senden einer Anfrage, Verarbeiten von HTML und Verfolgen von Links.


from bs4 import BeautifulSoup
import time
import random

# Configuration
url = "https://quotes.toscrape.com/"  # Replace this with your target site
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
                  "(KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"
}
timeout = 5  # server response timeout
max_retries = 3  # maximum number of retries on errors
# You can add your proxy here if needed
proxies = {
    "http": "http://username:password@proxyserver:port",
    "https": "https://username:password@proxyserver:port"
}

# Function to check access via robots.txt
def can_crawl(base_url, path="/"):
    try:
        robots_url = base_url.rstrip("/") + "/robots.txt"
        r = requests.get(robots_url, headers=headers, timeout=timeout)
        if r.status_code == 200 and f"Disallow: {path}" in r.text:
            print(f"Service {path} forbidden for scraping robots.txt")
            return False
    except requests.RequestException:
        # If robots.txt is unavailable, continue
        pass
    return True

# Main logic
if can_crawl(url):
    for attempt in range(max_retries):
        try:
            response = requests.get(url, headers=headers, timeout=timeout, proxies=proxies)
            response.raise_for_status()

            soup = BeautifulSoup(response.text, 'lxml')

            # Collect links
            links = [a['href'] for a in soup.find_all('a', href=True)]  # You can change selector here
            print("Found links:", links)

            # Delay between requests to simulate more realistic behavior
            time.sleep(random.uniform(3, 7))  # better than a fixed 5-second delay
            break  # if everything succeeds, exit the retry loop

        except requests.RequestException as e:
            print(f"Request error (attempt {attempt+1}): {e}")
            wait = 2 ** attempt
            print(f"Waiting {wait} seconds before retry...")
            time.sleep(wait)
else:
    print("The crawler cannot process this resource due to robots.txt rules")

Dieses Skript zeigt den grundlegenden Arbeitsablauf: eine Anfrage stellen, HTML parsen und Links sammeln.

Handhabung von Paginierung und Site-Navigation

Für mehrseitige Websites benötigen Sie eine Schleife, die alle Seiten durchläuft. Beispiel:


for page in range(1, 6):
    url = f"https://google.com/page/{page}"
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'lxml')
    # data processing

Einhaltung von Robots.txt und Ratenbeschränkungen

Zu einem verantwortungsvollen Crawling gehört es, die robots.txt-Datei einer Website zu überprüfen und ihre Regeln zu befolgen. Sie müssen auch Verzögerungen zwischen den Anfragen einführen, damit Sie den Server nicht überlasten. Mit der Funktion time.sleep() können Sie Pausen zwischen den Seitenabrufen einfügen.


import time
from bs4 import BeautifulSoup

for page in range(1, 6):
    url = f"https://google.com/page/{page}"
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'lxml')
    # data processing
	
    time.sleep(5) # delay in seconds

Speichern der gesammelten Daten

Sie können die gesammelten Details in praktischen Formaten wie CSV oder JSON speichern. Zum Beispiel, um eine Liste von Links zu speichern:


import json

data = {"links": links}
with open("links.json", "w", encoding="utf-8") as f:
    json.dump(data, f, ensure_ascii=False, indent=4)

Schlussfolgerung

Wenn Sie diese Schritte befolgen, erhalten Sie einen grundlegenden Web-Crawler, den Sie für fortgeschrittenere Aufgaben erweitern können. Sie können den Code skalieren, Proxy-Unterstützung integrieren, eine große Anzahl von Seiten verarbeiten oder für komplexe Datenerfassungsszenarien zu leistungsfähigeren Frameworks wie Scrapy wechseln.

Bemerkungen:

0 Bemerkungen