Python Web Scraping: Das umfassende Handbuch für 2025

Zuletzt aktualisiert am June 11, 2025

Lass mich dich mal mitnehmen zu meinem allerersten Versuch, Geschäftsdaten von einer Webseite zu ziehen. Ich saß damals am Küchentisch, in der einen Hand eine Tasse Kaffee, in der anderen ein halb funktionierendes Python-Skript, und wollte Produktpreise von einer Konkurrenzseite abgreifen. Mein Gedanke: „Wie schwer kann das schon sein?“ Kleiner Spoiler: Am Ende hatte ich eine CSV-Datei voller leerer Felder – und plötzlich riesigen Respekt vor allen, die behaupten, „das kann man easy mit Python automatisieren“. Spulen wir vor ins Jahr 2025: Web-Scraping ist heute das Rückgrat datengetriebener Firmen – es liefert Sales-, E-Commerce-, Marketing- und Operations-Teams Einblicke in Echtzeit, die manuell kaum zu bekommen wären.

Aber hier kommt der Knackpunkt: Auch wenn Python-Web-Scraping heute mächtiger ist als je zuvor, hat sich das Spielfeld verändert. Der Markt für Web-Scraping boomt – . Fast , um bessere Entscheidungen zu treffen. Die eigentliche Herausforderung ist aber nicht das Coden selbst – sondern das richtige Tool zu wählen, skalierbar zu arbeiten und nicht im Wartungschaos von Skripten zu versinken. In diesem ultimativen Guide zeige ich dir alle wichtigen Python-Web-Scraping-Bibliotheken (mit Codebeispielen), echte Business-Anwendungen und warum ich – trotz meiner Python-Liebe – für die meisten Unternehmen 2025 No-Code-Lösungen wie empfehle.

Was ist Python Web Scraping? Einfach erklärt

Kurz gesagt: Web-Scraping ist nichts anderes als automatisiertes Copy-Paste. Anstatt ein Heer von Praktikant:innen loszuschicken, um Produktpreise, Kontaktlisten oder Bewertungen zu sammeln, übernimmt Software diesen Job: Sie besucht Webseiten, zieht die gewünschten Daten raus und speichert sie in einer Tabelle oder Datenbank. Python-Web-Scraping heißt, dass du dafür Python-Skripte nutzt – um Webseiten abzurufen, HTML zu analysieren und gezielt Infos rauszufiltern.

Stell dir das wie einen digitalen Assistenten vor, der rund um die Uhr für dich im Netz recherchiert – ohne Pause. Die am häufigsten gesammelten Datentypen? Preise, Produktdetails, Kontakte, Bewertungen, Bilder, Nachrichtenartikel und Immobilienanzeigen. Manche Seiten bieten dafür APIs an, die meisten aber nicht – oder sie beschränken den Zugriff. Genau hier kommt Web-Scraping ins Spiel: Es ermöglicht dir, öffentlich verfügbare Daten in großem Stil zu nutzen, auch wenn es keinen offiziellen „Download“-Button gibt.

Warum Python Web Scraping für Unternehmen ein Muss ist

Hand aufs Herz: Wer 2025 als Unternehmen kein Web-Scraping nutzt, lässt bares Geld liegen. Warum?

web-scraping-benefits-funnel.png

  • Manuelle Datenerfassung automatisieren: Nie wieder mühsames Kopieren von Wettbewerberdaten oder Branchenverzeichnissen.
  • Echtzeit-Einblicke: Aktuelle Preise, Lagerbestände oder Markttrends sofort am Start.
  • Skalierbarkeit: Tausende Seiten in der Zeit auslesen, in der du dein Mittagessen aufwärmst.
  • Mehrwert: Unternehmen, die datengetrieben arbeiten, erzielen .

Hier ein Überblick typischer Anwendungsfälle:

AbteilungBeispiel-AnwendungMehrwert
VertriebLeads aus Verzeichnissen extrahieren, mit E-Mails anreichernGrößere, gezieltere Lead-Listen
MarketingWettbewerberpreise, Aktionen, Bewertungen verfolgenKlügere Kampagnen, schnellere Reaktionen
E-CommerceProduktpreise, Lagerbestand, Bewertungen überwachenDynamische Preisgestaltung, Bestandswarnungen
OperationsLieferantendaten bündeln, Berichte automatisierenZeitersparnis, weniger Fehler
ImmobilienImmobilienanzeigen von mehreren Portalen sammelnMehr Angebote, schnellere Kundenreaktion

Fazit: Web-Scraping ist das Geheimrezept für schnellere, bessere und wettbewerbsfähigere Geschäftsentscheidungen.

Überblick: Die wichtigsten Python Web Scraping Bibliotheken (mit Codebeispielen)

Wie versprochen, hier der Rundgang. Das Python-Ökosystem fürs Web-Scraping ist riesig – für jede Aufgabe gibt’s das passende Tool, von einfachen Downloads bis zu komplexer Browser-Automatisierung. Hier die wichtigsten Tools, jeweils mit Beispielcode:

urllib und urllib3: Die Basics für HTTP-Anfragen

Das sind Pythons Bordmittel für HTTP-Requests. Nicht super komfortabel, aber für einfache Aufgaben absolut solide.

import urllib3, urllib3.util
http = urllib3.PoolManager()
headers = urllib3.util.make_headers(user_agent="MyBot/1.0")
response = http.request('GET', "<https://httpbin.org/json>", headers=headers)
print(response.status)        # HTTP-Statuscode
print(response.data[:100])    # erste 100 Bytes des Inhalts

Ideal, wenn du keine Zusatzpakete willst oder maximale Kontrolle brauchst. Für die meisten Aufgaben empfiehlt sich aber requests.

requests: Die beliebteste Python Web Scraping Bibliothek

Wenn es ein Maskottchen fürs Python-Scraping gäbe, wäre es requests. Einfach, leistungsstark und nimmt dir die HTTP-Arbeit ab.

import requests
r = requests.get("<https://httpbin.org/json>", headers={"User-Agent": "MyBot/1.0"})
print(r.status_code)      # 200
print(r.json())           # geparster JSON-Inhalt (falls vorhanden)

Warum so beliebt? Es kümmert sich um Cookies, Sessions, Weiterleitungen und mehr – du konzentrierst dich auf die Daten, nicht auf HTTP-Details. Aber: requests holt nur das HTML. Zum Extrahieren brauchst du einen Parser wie BeautifulSoup.

BeautifulSoup: Einfache HTML-Analyse und Datenauslese

BeautifulSoup ist der Standard für HTML-Parsing in Python. Fehlertolerant, einsteigerfreundlich und perfekt in Kombination mit requests.

from bs4 import BeautifulSoup
html = "<div class='product'><h2>Widget</h2><span class='price'>$19.99</span></div>"
soup = BeautifulSoup(html, 'html.parser')
title = soup.find('h2').text               # "Widget"
price = soup.find('span', class_='price').text  # "$19.99"

Ideal für kleine bis mittlere Projekte oder den Einstieg. Für große Datenmengen oder komplexe Abfragen empfiehlt sich lxml.

lxml und XPath: Schnelles, leistungsfähiges HTML/XML-Parsing

Wenn du Geschwindigkeit oder XPath-Abfragen brauchst, ist lxml die richtige Wahl.

from lxml import html
doc = html.fromstring(page_content)
prices = doc.xpath("//span[@class='price']/text()")

Mit XPath holst du gezielt die gewünschten Daten. lxml ist schnell und effizient, aber etwas anspruchsvoller als BeautifulSoup.

Scrapy: Das Framework für großflächiges Web Crawling

Scrapy ist der Platzhirsch für große Scraping-Projekte. Ein komplettes Framework – quasi das Django fürs Web-Scraping.

import scrapy

class QuotesSpider(scrapy.Spider):
    name = "quotes"
    start_urls = ["<http://quotes.toscrape.com/>"]

    def parse(self, response):
        for quote in response.css("div.quote"):
            yield {
                "text": quote.css("span.text::text").get(),
                "author": quote.css("small.author::text").get(),
            }

Scrapy verarbeitet asynchrone Anfragen, folgt Links, verwaltet Pipelines und exportiert Daten in verschiedene Formate. Für kleine Skripte zu viel, aber unschlagbar für das Crawlen tausender Seiten.

Selenium, Playwright und Pyppeteer: Scraping dynamischer Webseiten

Wenn eine Seite Daten per JavaScript nachlädt, brauchst du Browser-Automatisierung. Hier sind Selenium und Playwright die Favoriten.

Selenium Beispiel:

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("<https://example.com/login>")
driver.find_element(By.NAME, "username").send_keys("user123")
driver.find_element(By.NAME, "password").send_keys("secret")
driver.find_element(By.ID, "submit-btn").click()
titles = [el.text for el in driver.find_elements(By.CLASS_NAME, "product-title")]

Playwright Beispiel:

from playwright.sync_api import sync_playwright
with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    page = browser.new_page()
    page.goto("<https://website.com>")
    page.wait_for_selector(".item")
    data = page.eval_on_selector(".item", "el => el.textContent")

Diese Tools können alles, was ein Mensch im Browser kann – sind aber langsamer und ressourcenhungriger als reines HTTP-Scraping. Nutze sie nur, wenn es wirklich nötig ist.

MechanicalSoup, RoboBrowser, PyQuery, Requests-HTML: Weitere nützliche Tools

  • MechanicalSoup: Automatisiert Formulare und Navigation, basiert auf Requests und BeautifulSoup.

    import mechanicalsoup
    browser = mechanicalsoup.StatefulBrowser()
    browser.open("<http://example.com/login>")
    browser.select_form('form#loginForm')
    browser["username"] = "user123"
    browser["password"] = "secret"
    browser.submit_selected()
    page = browser.get_current_page()
    print(page.title.text)
    
    
  • RoboBrowser: Ähnlich wie MechanicalSoup, aber weniger gepflegt.

  • PyQuery: jQuery-ähnliches HTML-Parsing.

    from pyquery import PyQuery as pq
    doc = pq("<div><p class='title'>Hello</p><p>World</p></div>")
    print(doc("p.title").text())      # "Hello"
    print(doc("p").eq(1).text())      # "World"
    
    
  • Requests-HTML: Kombiniert HTTP-Anfragen, Parsing und sogar JavaScript-Rendering.

    from requests_html import HTMLSession
    session = HTMLSession()
    r = session.get("<https://example.com>")
    r.html.render(timeout=20)
    links = [a.text for a in r.html.find("a.story-link")]
    
    

Ideal, wenn du Formulare, CSS-Selektoren oder leichtes JavaScript-Rendering brauchst.

Asyncio und Aiohttp: Python Web Scraping beschleunigen

Für das Scrapen von hunderten oder tausenden Seiten sind synchrone Anfragen zu langsam. Mit aiohttp und asyncio geht’s parallel und deutlich flotter.

import aiohttp, asyncio

async def fetch_page(session, url):
    async with session.get(url) as resp:
        return await resp.text()

async def fetch_all(urls):
    async with aiohttp.ClientSession() as session:
        tasks = [fetch_page(session, url) for url in urls]
        return await asyncio.gather(*tasks)

urls = ["<https://example.com/page1>", "<https://example.com/page2>"]
html_pages = asyncio.run(fetch_all(urls))

So kannst du Dutzende Seiten gleichzeitig abrufen und sparst enorm Zeit.

Spezialbibliotheken: PRAW (Reddit), PyPDF2 und mehr

  • PRAW: Für das Scrapen von Reddit über die API.

    import praw
    reddit = praw.Reddit(client_id='XXX', client_secret='YYY', user_agent='myapp')
    for submission in reddit.subreddit("learnpython").hot(limit=5):
        print(submission.title, submission.score)
    
    
  • PyPDF2: Um Text aus PDFs zu extrahieren.

    from PyPDF2 import PdfReader
    reader = PdfReader("sample.pdf")
    num_pages = len(reader.pages)
    text = reader.pages[0].extract_text()
    
    
  • Weitere: Es gibt Bibliotheken für Instagram, Twitter, OCR (Tesseract) und vieles mehr. Für fast jede Datenquelle gibt’s ein passendes Python-Tool.

Vergleichstabelle: Python Scraping Bibliotheken

Tool / BibliothekBenutzerfreundlichkeitGeschwindigkeit & SkalierungIdeal für
Requests + BeautifulSoupEinfachMittelEinsteiger, statische Seiten, schnelle Skripte
lxml (mit XPath)MittelSchnellGroße Datenmengen, komplexes Parsing
ScrapyAnspruchsvollSehr schnellUnternehmen, große Crawls, Pipelines
Selenium / PlaywrightMittelLangsamJavaScript-lastige, interaktive Seiten
aiohttp + asyncioMittelSehr schnellHohe Volumen, meist statische Seiten
MechanicalSoupEinfachMittelLogins, Formulare, Session-Handling
PyQueryMittelSchnellCSS-Selektor-Fans, DOM-Manipulation
Requests-HTMLEinfachVariabelKleine Aufgaben, leichtes JS-Rendering

Schritt-für-Schritt-Anleitung: So baust du einen Python Web-Scraper (mit Beispielen)

Gehen wir ein Praxisbeispiel durch: Produktlisten von einer (fiktiven) E-Commerce-Seite scrapen, Paginierung abarbeiten und als CSV exportieren.

import requests
from bs4 import BeautifulSoup
import csv

base_url = "<https://example.com/products>"
page_num = 1
all_products = []

while True:
    url = base_url if page_num == 1 else f"{base_url}/page/{page_num}"
    print(f"Scraping page: {url}")
    response = requests.get(url, timeout=10)
    if response.status_code != 200:
        print(f"Page {page_num} returned status {response.status_code}, stopping.")
        break

    soup = BeautifulSoup(response.text, 'html.parser')
    products = soup.find_all('div', class_='product-item')
    if not products:
        print("No more products found, stopping.")
        break

    for prod in products:
        name_tag = prod.find('h2', class_='product-title')
        price_tag = prod.find('span', class_='price')
        name = name_tag.get_text(strip=True) if name_tag else "N/A"
        price = price_tag.get_text(strip=True) if price_tag else "N/A"
        all_products.append((name, price))
    page_num += 1

print(f"Collected {len(all_products)} products. Saving to CSV...")
with open('products_data.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    writer.writerow(["Product Name", "Price"])
    writer.writerows(all_products)
print("Data saved to products_data.csv")

Was passiert hier?

  • Es werden Seiten durchlaufen, HTML geladen, Produkte geparst, Name und Preis gesammelt und gestoppt, wenn keine Produkte mehr gefunden werden.
  • Die Ergebnisse werden als CSV exportiert – perfekt für die weitere Analyse.

Du willst lieber nach Excel exportieren? Nutze pandas:

import pandas as pd
df = pd.DataFrame(all_products, columns=["Product Name", "Price"])
df.to_excel("products_data.xlsx", index=False)

Formulare, Logins und Sessions beim Python Web Scraping

Viele Seiten verlangen einen Login oder Formularübermittlung. So klappt’s:

Mit requests und Session:

session = requests.Session()
login_data = {"username": "user123", "password": "secret"}
session.post("<https://targetsite.com/login>", data=login_data)
resp = session.get("<https://targetsite.com/account/orders>")

Mit MechanicalSoup:

import mechanicalsoup
browser = mechanicalsoup.StatefulBrowser()
browser.open("<http://example.com/login>")
browser.select_form('form#login')
browser["user"] = "user123"
browser["pass"] = "secret"
browser.submit_selected()

Sessions sorgen dafür, dass du eingeloggt bleibst und Cookies erhältst, während du mehrere Seiten scrapest.

Dynamische Inhalte und JavaScript-Rendering scrapen

Wenn die Daten nicht im HTML stehen (Seitenquelltext zeigt leere Divs), brauchst du Browser-Automatisierung.

Selenium Beispiel:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver.get("<http://examplesite.com/dashboard>")
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'stats-table')))
html = driver.page_source

Oder – falls du die API findest, die das JavaScript nutzt – hol dir die Daten direkt per requests als JSON. Das ist viel schneller.

Export der gesammelten Daten: CSV, Excel, Datenbanken und mehr

  • CSV: Mit Pythons csv-Modul (siehe oben).

  • Excel: Mit pandas oder openpyxl.

  • Google Sheets: Mit der gspread-Bibliothek.

    import gspread
    gc = gspread.service_account(filename="credentials.json")
    sh = gc.open("My Data Sheet")
    worksheet = sh.sheet1
    worksheet.clear()
    worksheet.append_row(["Name", "Price"])
    for name, price in all_products:
        worksheet.append_row([name, price])
    
    
  • Datenbanken: Mit sqlite3, pymysql, psycopg2 oder SQLAlchemy für SQL-Datenbanken. Für NoSQL: pymongo für MongoDB.

Python Web Scraping vs. moderne No-Code-Lösungen: Warum Thunderbit 2025 die beste Wahl ist

thunderbit-vs-diy-scraping-comparison-2025.png

Kommen wir zum Elefanten im Raum: Wartung. Eigene Scraper zu programmieren ist super – bis du 100 verschiedene Seiten überwachen musst, jede mit ihren Eigenheiten, und alles am Vorabend des Reports plötzlich nicht mehr funktioniert. Glaub mir, ich spreche aus Erfahrung.

Deshalb bin ich ein großer Fan von . Das sind meine Gründe, warum es 2025 für Unternehmen die beste Wahl ist:

  1. Kein Programmieren nötig: Thunderbit bietet eine visuelle Oberfläche. „KI-Felder vorschlagen“, Spalten anpassen, auf „Scrapen“ klicken – fertig. Kein Python, kein Debugging, keine stundenlangen Foren-Recherchen.
  2. Skalierbar auf tausende Seiten: Du willst 10.000 Produkte scrapen? Thunderbits Cloud-Engine schafft das – ohne dass du ein Skript überwachen musst.
  3. Null Wartungsaufwand: Wer 100 Wettbewerberseiten für Analysen trackt, will keine 100 Python-Skripte pflegen. Bei Thunderbit wählst du einfach eine Vorlage, und die KI passt sich automatisch an Layout-Änderungen an.
  4. Unterseiten & Paginierung: Thunderbit folgt Links zu Unterseiten, verarbeitet Paginierung und kann sogar Detailseiten für zusätzliche Daten besuchen.
  5. Sofort-Vorlagen: Für bekannte Seiten (Amazon, Zillow, LinkedIn usw.) gibt’s fertige Templates. Ein Klick – und du hast deine Daten.
  6. Kostenloser Datenexport: Exportiere nach Excel, Google Sheets, Airtable oder Notion – ohne Zusatzkosten.

Kurz gesagt: Wer als Business-Anwender einfach nur Daten will, bekommt mit Thunderbit einen persönlichen Daten-Butler. Entwickler:innen, die gerne basteln, werden Python weiterhin lieben – aber manchmal zählt einfach das Ergebnis.

Best Practices für ethisches und rechtssicheres Python Web Scraping

ethical-and-legal-web-scraping-best-practices.png

Web-Scraping ist mächtig, bringt aber Verantwortung mit sich. So bleibst du auf der sicheren Seite:

  • robots.txt beachten: Respektiere, was die Seite zum Scraping erlaubt.
  • AGB lesen: Manche Seiten verbieten Scraping ausdrücklich. Verstöße können zu Sperrungen oder rechtlichen Konsequenzen führen.
  • Anfragen begrenzen: Server nicht überlasten – Pausen zwischen den Requests einbauen.
  • Keine personenbezogenen Daten: Vorsicht beim Sammeln von E-Mails, Telefonnummern oder anderen sensiblen Daten (Stichwort DSGVO/CCPA).
  • Anti-Bot-Maßnahmen nicht umgehen: Wenn eine Seite CAPTCHAs oder Blockaden einsetzt, lieber zweimal überlegen.
  • Quellen angeben: Bei Veröffentlichungen immer die Datenquelle nennen.

Mehr zum rechtlichen Rahmen findest du in dieser und zu .

Ressourcen für mehr Wissen rund um Python Web Scraping (Kurse, Dokus, Communities)

Du willst tiefer einsteigen? Hier meine Favoriten:

  • Offizielle Dokumentationen:
  • Bücher:
    • „Web Scraping mit Python“ von Ryan Mitchell
    • „Automate the Boring Stuff with Python“ von Al Sweigart
  • Online-Guides:
  • Video-Tutorials:
    • Corey Schafer’s YouTube-Kanal
  • Communities:

Und natürlich: Wer No-Code-Scraping live sehen will, schaut am besten auf dem oder im vorbei.

Fazit & wichtigste Erkenntnisse: Die richtige Web Scraping Lösung 2025 wählen

  • Python Web Scraping ist extrem leistungsfähig und flexibel. Wer gerne programmiert, volle Kontrolle will und Wartung nicht scheut, ist damit bestens bedient.
  • Für jede Scraping-Aufgabe gibt’s die passende Python-Bibliothek – egal ob statische Seiten, dynamische Inhalte, Formulare, APIs oder PDFs.
  • Für die meisten Unternehmen ist die Wartung vieler Skripte aber mühsam. Wer Daten schnell, skalierbar und ohne Informatikstudium braucht, fährt mit am besten.
  • Thunderbits KI-gestützte No-Code-Oberfläche ermöglicht das Scrapen beliebiger Websites mit wenigen Klicks, inklusive Unterseiten, Paginierung und flexiblem Datenexport – ganz ohne Python.
  • Ethik und Recht sind wichtig: Immer die Regeln der Zielseite beachten, Datenschutz respektieren und verantwortungsvoll scrapen.

Ob du Python-Profi bist oder einfach nur Daten ohne Stress willst – die Tools sind 2025 besser als je zuvor. Mein Tipp: Probier beide Ansätze aus, finde deinen Workflow und lass die Roboter die langweilige Arbeit machen – aber immer mit Anstand.

Und wenn du genug von kaputten Skripten hast, teste die . Dein zukünftiges Ich (und dein Kaffeekonsum) werden es dir danken.

Mehr dazu? Lies oder für praktische Anleitungen und aktuelle Scraping-Strategien.

KI-Web-Scraper ausprobieren
Shuai Guan
Shuai Guan
Co-founder/CEO @ Thunderbit. Passionate about cross section of AI and Automation. He's a big advocate of automation and loves making it more accessible to everyone. Beyond tech, he channels his creativity through a passion for photography, capturing stories one picture at a time.
Topics
Python Web ScrapingWeb Scraping mit PythonWeb Scraping ServicesData Scraping
Thunderbit ausprobieren
Mit KI Webseiten ohne Aufwand scrapen.
Kostenlose Version verfügbar
Deutsch wird unterstützt
Inhaltsverzeichnis
Daten mit KI extrahieren
Übertrage Daten mühelos nach Google Sheets, Airtable oder Notion
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week