Erweiterter Python Web Scraper

Erstellen Sie einen erweiterten Web-Scraper in Python. Erfahren Sie, wie Sie Seitendaten extrahieren, mit User-Agent-Blockaden umgehen, Ratenlimits verwalten und Ausgaben strukturieren.

Versuchen Sie es im Editor

Übersicht

Beim Web Scraping werden Webseiten programmgesteuert abgerufen und ihre HTML-Struktur analysiert, um bestimmte Daten zu extrahieren. In Python wird dies traditionell mit „requests“ und „BeautifulSoup“ erreicht.

Fortgeschrittene Schaber erfordern eine robuste Konfiguration. Das bloße Anfordern von Seiten kann zu Sperrungen oder IP-Verboten führen, was eine Anpassung der Header wie benutzerdefinierte Benutzeragenten und die Einführung zufälliger Verzögerungsintervalle erforderlich macht.

Dieses interaktive Beispiel ahmt das Scraping von Scheindaten mit Validierung nach. Es zeigt, wie man verschachtelte Container findet, mit Netzwerk-Timeouts umgeht und Ausgabedaten in saubere Listen strukturiert.

Code- und Ausführungsausgabe

Eine Web-Scraping-Routine mit benutzerdefinierten Headern, Timeout-Management und HTML-Parser-Strukturen.

import requests
from bs4 import BeautifulSoup
import time

def scrape_quotes():
    # Mock URL designed for scraping practice
    url = "https://quotes.toscrape.com/"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
    }
    
    print(f"Initiating request to: {url}...")
    try:
        # Request with timeout protection
        response = requests.get(url, headers=headers, timeout=5)
        response.raise_for_status()
        
        soup = BeautifulSoup(response.text, "html.parser")
        quotes = soup.find_all("div", class_="quote", limit=3)
        
        results = []
        for q in quotes:
            text = q.find("span", class_="text").text
            author = q.find("small", class_="author").text
            tags = [t.text for t in q.find_all("a", class_="tag")]
            results.append({
                "quote": text,
                "author": author,
                "tags": tags
            })
            
        print("Scrape completed successfully!\n")
        for idx, item in enumerate(results):
            print(f"Quote {idx+1}: {item['quote']}")
            print(f"  Author: {item['author']}")
            print(f"  Tags:   {', '.join(item['tags'])}\n")
            
    except requests.exceptions.RequestException as e:
        print(f"Network error occurred: {e}")

scrape_quotes()
Terminal-Ausgabe
Initiating request to: https://quotes.toscrape.com/...
Scrape completed successfully!

Quote 1: “The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”
  Author: Albert Einstein
  Tags:   change, deep-thoughts, thinking

Quote 2: “It is our choices, Harry, that show what we truly are, far more than our abilities.”
  Author: J.K. Rowling
  Tags:   abilities, choices

Quote 3: “There are only two ways to live your life. One is as though nothing is a miracle. The other is as though everything is a miracle.”
  Author: Albert Einstein
  Tags:   inspirational, life, live, miracle

Schrittweise Umsetzung

  • Preisüberwachung und -verfolgung über Einkaufskataloge hinweg
  • Stimmungsanalyse durch Sammeln von Bewertungsdaten aus Foren
  • Erstellung wissenschaftlicher Forschungsdatensätze

Häufig gestellte Fragen

Was ist robots.txt?

Eine im Stammverzeichnis einer Domain abgelegte Textdatei, die angibt, welche Pfade Suchroboter und Crawler crawlen dürfen oder nicht. Sie sollten es immer lesen, bevor Sie einen Scraper schreiben.

Wie kann ich über JavaScript dynamisch gerenderte Seiten scrapen?

Standardanfragen rufen nur statisches HTML ab. Um Javascript-lastige Seiten zu analysieren, müssen Sie Browser-Automatisierungstools wie Playwright oder Selenium verwenden.

Verwandte Themen