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 einfach nicht zu schaffen wären.
Aber hier kommt der Haken: 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, zu skalieren 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-Anwendungsfälle und warum ich – trotz meiner Liebe zu Python – überzeugt bin, dass No-Code-Lösungen wie für die meisten Unternehmen 2025 die beste Wahl sind.
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 die Infos rauszufiltern, die du brauchst.
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 sogar Immobilienanzeigen. Manche Seiten bieten dafür APIs an, aber die meisten eben nicht – oder sie schränken den Zugriff stark ein. Genau hier kommt Web-Scraping ins Spiel: Es ermöglicht dir, öffentlich verfügbare Daten im großen 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 stundenlanges Copy-Paste von Wettbewerberseiten oder Online-Verzeichnissen.
- Echtzeit-Einblicke: Aktuelle Preise, Lagerbestände oder Markttrends sofort abrufen.
- Skalierbarkeit: Tausende Seiten in der Zeit auslesen, in der du dein Mittagessen aufwärmst.
- Mehrwert: Unternehmen, die datengetrieben arbeiten, erzielen .
Hier ein Überblick über die wichtigsten Anwendungsfälle:
Abteilung | Beispiel-Anwendung | Nutzen |
---|---|---|
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 komplette Rundgang. Das Python-Ökosystem für Web-Scraping ist riesig – es gibt für jeden Bedarf das passende Tool, von einfachen Seitenabrufen bis hin 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. Sie sind recht grundlegend, etwas sperrig, aber für einfache Aufgaben absolut solide.
1import urllib3, urllib3.util
2http = urllib3.PoolManager()
3headers = urllib3.util.make_headers(user_agent="MyBot/1.0")
4response = http.request('GET', "<https://httpbin.org/json>", headers=headers)
5print(response.status) # HTTP-Statuscode
6print(response.data[:100]) # erste 100 Bytes des Inhalts
Ideal, wenn du keine zusätzlichen Abhängigkeiten 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ür Python-Scraping gäbe, wäre es requests
. Einfach, leistungsstark und nimmt dir die ganze HTTP-Arbeit ab.
1import requests
2r = requests.get("<https://httpbin.org/json>", headers={"User-Agent": "MyBot/1.0"})
3print(r.status_code) # 200
4print(r.json()) # geparster JSON-Inhalt (falls Antwort JSON war)
Warum so beliebt? Es kümmert sich um Cookies, Sessions, Weiterleitungen und mehr – du konzentrierst dich nur auf die Daten. Aber: requests
holt nur das HTML. Um Daten zu 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
.
1from bs4 import BeautifulSoup
2html = "<div class='product'><h2>Widget</h2><span class='price'>$19.99</span></div>"
3soup = BeautifulSoup(html, 'html.parser')
4title = soup.find('h2').text # "Widget"
5price = 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, leistungsstarkes HTML/XML-Parsing
Wenn du Geschwindigkeit brauchst oder XPath nutzen möchtest (eine Abfragesprache für XML/HTML), ist lxml die richtige Wahl.
1from lxml import html
2doc = html.fromstring(page_content)
3prices = doc.xpath("//span[@class='price']/text()")
Mit XPath greifst du gezielt auf Daten zu. 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.
1import scrapy
2class QuotesSpider(scrapy.Spider):
3 name = "quotes"
4 start_urls = ["<http://quotes.toscrape.com/>"]
5 def parse(self, response):
6 for quote in response.css("div.quote"):
7 yield {
8 "text": quote.css("span.text::text").get(),
9 "author": quote.css("small.author::text").get(),
10 }
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. Selenium und Playwright sind hier die Platzhirsche.
Selenium Beispiel:
1from selenium import webdriver
2from selenium.webdriver.common.by import By
3driver = webdriver.Chrome()
4driver.get("<https://example.com/login>")
5driver.find_element(By.NAME, "username").send_keys("user123")
6driver.find_element(By.NAME, "password").send_keys("secret")
7driver.find_element(By.ID, "submit-btn").click()
8titles = [el.text for el in driver.find_elements(By.CLASS_NAME, "product-title")]
Playwright Beispiel:
1from playwright.sync_api import sync_playwright
2with sync_playwright() as p:
3 browser = p.chromium.launch(headless=True)
4 page = browser.new_page()
5 page.goto("<https://website.com>")
6 page.wait_for_selector(".item")
7 data = page.eval_on_selector(".item", "el => el.textContent")
Diese Tools können alles, was ein Mensch im Browser kann – sind aber langsamer und ressourcenintensiver 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.
1import mechanicalsoup 2browser = mechanicalsoup.StatefulBrowser() 3browser.open("<http://example.com/login>") 4browser.select_form('form#loginForm') 5browser["username"] = "user123" 6browser["password"] = "secret" 7browser.submit_selected() 8page = browser.get_current_page() 9print(page.title.text)
-
RoboBrowser: Ähnlich wie MechanicalSoup, aber weniger gepflegt.
-
PyQuery: jQuery-ähnliches HTML-Parsing.
1from pyquery import PyQuery as pq 2doc = pq("<div><p class='title'>Hello</p><p>World</p></div>") 3print(doc("p.title").text()) # "Hello" 4print(doc("p").eq(1).text()) # "World"
-
Requests-HTML: Kombiniert HTTP-Anfragen, Parsing und sogar JavaScript-Rendering.
1from requests_html import HTMLSession 2session = HTMLSession() 3r = session.get("<https://example.com>") 4r.html.render(timeout=20) 5links = [a.text for a in r.html.find("a.story-link")]
Ideal, wenn du Formulare, CSS-Selektoren oder leichtes JS-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 es parallel und deutlich schneller.
1import aiohttp, asyncio
2async def fetch_page(session, url):
3 async with session.get(url) as resp:
4 return await resp.text()
5async def fetch_all(urls):
6 async with aiohttp.ClientSession() as session:
7 tasks = [fetch_page(session, url) for url in urls]
8 return await asyncio.gather(*tasks)
9urls = ["<https://example.com/page1>", "<https://example.com/page2>"]
10html_pages = asyncio.run(fetch_all(urls))
So kannst du Dutzende Seiten gleichzeitig abrufen und sparst enorm Zeit.
Spezialisierte Bibliotheken: PRAW (Reddit), PyPDF2 und mehr
-
PRAW: Für das Scrapen von Reddit über die API.
1import praw 2reddit = praw.Reddit(client_id='XXX', client_secret='YYY', user_agent='myapp') 3for submission in reddit.subreddit("learnpython").hot(limit=5): 4 print(submission.title, submission.score)
-
PyPDF2: Um Text aus PDFs zu extrahieren.
1from PyPDF2 import PdfReader 2reader = PdfReader("sample.pdf") 3num_pages = len(reader.pages) 4text = reader.pages[0].extract_text()
-
Weitere: Es gibt Bibliotheken für Instagram, Twitter, OCR (Tesseract) und vieles mehr. Für fast jede Datenquelle gibt es eine Python-Lösung.
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, komplexe Abfragen |
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 handhaben und als CSV exportieren.
1import requests
2from bs4 import BeautifulSoup
3import csv
4base_url = "<https://example.com/products>"
5page_num = 1
6all_products = []
7while True:
8 url = base_url if page_num == 1 else f"{base_url}/page/{page_num}"
9 print(f"Scraping page: {url}")
10 response = requests.get(url, timeout=10)
11 if response.status_code != 200:
12 print(f"Page {page_num} returned status {response.status_code}, stopping.")
13 break
14 soup = BeautifulSoup(response.text, 'html.parser')
15 products = soup.find_all('div', class_='product-item')
16 if not products:
17 print("No more products found, stopping.")
18 break
19 for prod in products:
20 name_tag = prod.find('h2', class_='product-title')
21 price_tag = prod.find('span', class_='price')
22 name = name_tag.get_text(strip=True) if name_tag else "N/A"
23 price = price_tag.get_text(strip=True) if price_tag else "N/A"
24 all_products.append((name, price))
25 page_num += 1
26print(f"Collected {len(all_products)} products. Saving to CSV...")
27with open('products_data.csv', 'w', newline='', encoding='utf-8') as f:
28 writer = csv.writer(f)
29 writer.writerow(["Product Name", "Price"])
30 writer.writerows(all_products)
31print("Data saved to products_data.csv")
Was passiert hier?
- Das Skript geht die Seiten durch, holt das HTML, liest Produkte aus, sammelt Name und Preis und stoppt, wenn keine Produkte mehr gefunden werden.
- Die Ergebnisse werden als CSV für die weitere Analyse exportiert.
Du willst lieber nach Excel exportieren? Nutze pandas:
1import pandas as pd
2df = pd.DataFrame(all_products, columns=["Product Name", "Price"])
3df.to_excel("products_data.xlsx", index=False)
Formulare, Logins und Sessions beim Python Web Scraping meistern
Viele Seiten verlangen einen Login oder Formularausfüllung. So klappt’s:
Mit requests und Session:
1session = requests.Session()
2login_data = {"username": "user123", "password": "secret"}
3session.post("<https://targetsite.com/login>", data=login_data)
4resp = session.get("<https://targetsite.com/account/orders>")
Mit MechanicalSoup:
1import mechanicalsoup
2browser = mechanicalsoup.StatefulBrowser()
3browser.open("<http://example.com/login>")
4browser.select_form('form#login')
5browser["user"] = "user123"
6browser["pass"] = "secret"
7browser.submit_selected()
Sessions sorgen dafür, dass du eingeloggt bleibst und Cookies erhältst, während du mehrere Seiten scrapest.
Dynamische Inhalte und JavaScript-generierte Seiten scrapen
Wenn die Daten nicht im HTML stehen (Seitenquelltext zeigt leere divs), brauchst du Browser-Automatisierung.
Selenium Beispiel:
1from selenium.webdriver.support.ui import WebDriverWait
2from selenium.webdriver.support import expected_conditions as EC
3driver.get("<http://examplesite.com/dashboard>")
4WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'stats-table')))
5html = driver.page_source
Oder, wenn du die API findest, die das JavaScript nutzt, kannst du mit requests
direkt das JSON holen – das ist viel schneller.
Export von gescrapten Daten: CSV, Excel, Datenbanken und mehr
-
CSV: Mit Pythons
csv
-Modul (siehe oben). -
Excel: Mit pandas oder openpyxl.
-
Google Sheets: Mit der
gspread
-Bibliothek.1import gspread 2gc = gspread.service_account(filename="credentials.json") 3sh = gc.open("My Data Sheet") 4worksheet = sh.sheet1 5worksheet.clear() 6worksheet.append_row(["Name", "Price"]) 7for name, price in all_products: 8 worksheet.append_row([name, price])
-
Datenbanken: Mit
sqlite3
,pymysql
,psycopg2
oder SQLAlchemy für SQL-Datenbanken. Für NoSQL z.B.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 mit jeweils eigenen Tücken scrapen musst und alles am Abend vor der Deadline plötzlich nicht mehr funktioniert. Ich spreche aus Erfahrung.
Deshalb bin ich ein großer Fan von . Das sind die Gründe, warum es für Business-Anwender:innen 2025 meine Top-Empfehlung ist:
- Kein Programmieren nötig: Thunderbit bietet eine visuelle Oberfläche. „KI-Felder vorschlagen“ anklicken, Spalten anpassen, auf „Scrapen“ drücken – fertig. Kein Python, kein Debugging, keine Stack Overflow-Nächte.
- Skaliert auf tausende Seiten: Du willst 10.000 Produktlisten extrahieren? Thunderbits Cloud-Engine schafft das – ohne dass du ein Skript überwachen musst.
- Null Wartungsaufwand: Wer 100 Wettbewerberseiten für E-Commerce analysiert, will keine 100 Python-Skripte pflegen. Mit Thunderbit wählst du einfach eine Vorlage, und die KI passt sich automatisch an Layout-Änderungen an.
- Unterstützt Unterseiten und Paginierung: Thunderbit folgt Links zu Unterseiten, verarbeitet Paginierung und kann sogar Daten anreichern, indem es jede Produktdetailseite besucht.
- Sofort-Vorlagen: Für bekannte Seiten (Amazon, Zillow, LinkedIn usw.) gibt es 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:in einfach nur Daten will, bekommt mit Thunderbit einen persönlichen Daten-Butler. Wer als Entwickler:in gerne tüftelt, bleibt bei Python – aber auch dann will man manchmal einfach nur Ergebnisse.
Best Practices für ethisches und legales 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 Scrapen von E-Mails, Telefonnummern oder anderen sensiblen Daten (Stichwort DSGVO/CCPA).
- Anti-Bot-Maßnahmen nicht umgehen: Wenn eine Seite CAPTCHAs oder starke Blockaden nutzt, 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 Python Web Scraping Know-how (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 in Aktion 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 jeden Scraping-Bedarf gibt es eine 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 es, jede Website mit wenigen Klicks zu scrapen, Unterseiten und Paginierung zu verarbeiten und die Daten flexibel zu exportieren – ganz ohne Python.
- Ethik und Recht sind wichtig: Immer die Regeln der Seite prüfen, Datenschutz respektieren und verantwortungsvoll scrapen.
Egal 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 bitte fair.
Und wenn du genug von kaputten Skripten hast, probier die aus. Dein zukünftiges Ich (und dein Kaffeekonsum) werden es dir danken.
Mehr dazu? Lies oder für praktische Anleitungen und die neuesten Scraping-Strategien.