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?
- 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:
Abteilung | Beispiel-Anwendung | Mehrwert |
---|---|---|
Vertrieb | Leads aus Verzeichnissen extrahieren, mit E-Mails anreichern | Größere, gezieltere Lead-Listen |
Marketing | Wettbewerberpreise, Aktionen, Bewertungen verfolgen | Klügere Kampagnen, schnellere Reaktionen |
E-Commerce | Produktpreise, Lagerbestand, Bewertungen überwachen | Dynamische Preisgestaltung, Bestandswarnungen |
Operations | Lieferantendaten bündeln, Berichte automatisieren | Zeitersparnis, weniger Fehler |
Immobilien | Immobilienanzeigen von mehreren Portalen sammeln | Mehr 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 / Bibliothek | Benutzerfreundlichkeit | Geschwindigkeit & Skalierung | Ideal für |
---|---|---|---|
Requests + BeautifulSoup | Einfach | Mittel | Einsteiger, statische Seiten, schnelle Skripte |
lxml (mit XPath) | Mittel | Schnell | Große Datenmengen, komplexes Parsing |
Scrapy | Anspruchsvoll | Sehr schnell | Unternehmen, große Crawls, Pipelines |
Selenium / Playwright | Mittel | Langsam | JavaScript-lastige, interaktive Seiten |
aiohttp + asyncio | Mittel | Sehr schnell | Hohe Volumen, meist statische Seiten |
MechanicalSoup | Einfach | Mittel | Logins, Formulare, Session-Handling |
PyQuery | Mittel | Schnell | CSS-Selektor-Fans, DOM-Manipulation |
Requests-HTML | Einfach | Variabel | Kleine 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
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:
- 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.
- Skalierbar auf tausende Seiten: Du willst 10.000 Produkte scrapen? Thunderbits Cloud-Engine schafft das – ohne dass du ein Skript überwachen musst.
- 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.
- Unterseiten & Paginierung: Thunderbit folgt Links zu Unterseiten, verarbeitet Paginierung und kann sogar Detailseiten für zusätzliche Daten besuchen.
- Sofort-Vorlagen: Für bekannte Seiten (Amazon, Zillow, LinkedIn usw.) gibt’s fertige Templates. Ein Klick – und du hast deine Daten.
- 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
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.