JavaScript und Maßnahmen gegen Scraping
Verwenden Sie Playwright/Selenium für JS-gerenderte Inhalte und Rate-Limiting.
JavaScript und Maßnahmen gegen Scraping ist eine kostenlose Python Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Python Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.
Warum JavaScript wichtig ist
Moderne Websites rendern Inhalte nach dem Laden der Seite mit JavaScript. Statische HTML-Scraper wie requests+BS4 sehen das Gerüst, nicht das gerenderte DOM.
# Static scraper sees:
# <div id="app"></div>
# Rendered page has:
# <div id="app">
# <h1>Product List</h1>
# <ul>... dynamically loaded items ...</ul>
# </div>Playwright für Python
Playwright steuert einen echten Browser (Chromium, Firefox, WebKit) programmatisch. Vor dem Extrahieren von Inhalten wartet es, bis JavaScript ausgeführt wurde.
# pip install playwright
# playwright install
import asyncio
from playwright.async_api import async_playwright
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.goto("https://example.com")
title = await page.inner_text("h1")
print(title)
await browser.close()
asyncio.run(main())Auf Elemente warten
Verwenden Sie page.wait_for_selector(), um zu warten, bis ein Element im DOM erscheint, bevor Sie Daten extrahieren.
from playwright.async_api import async_playwright
import asyncio
async def scrape():
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.goto("https://spa-example.com")
await page.wait_for_selector(".product-list")
items = await page.query_selector_all(".product-item")
texts = [await i.inner_text() for i in items]Selenium
Selenium ist eine ältere Bibliothek zur Browserautomatisierung. Für neue Projekte wird Playwright wegen der besseren asynchronen Unterstützung und höheren Geschwindigkeit bevorzugt.
# pip install selenium
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("https://example.com")
elem = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "h1"))
)
print(elem.text)
driver.quit()Headless-Modus
Führen Sie Browser im Headless-Modus (ohne sichtbares Fenster) für serverseitiges Scraping aus.
from playwright.async_api import async_playwright
import asyncio
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch(headless=True) # no window
page = await browser.new_page()
await page.goto("https://example.com")
html = await page.content()
await browser.close()Netzwerkanfragen abfangen
Playwright kann Netzwerkanfragen abfangen und mocken. Das ist nützlich, um Werbung und Tracker zu blockieren oder API-Antworten direkt aufzuzeichnen.
from playwright.async_api import async_playwright
import asyncio
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.route("**/*.{png,jpg,css}", lambda route: route.abort())
await page.goto("https://example.com") # loads 3x fasterRatenbegrenzung und Verzögerungen
Simulieren Sie menschliches Verhalten: Fügen Sie zufällige Verzögerungen zwischen Anfragen hinzu und begrenzen Sie die Rate, um keine Anti-Bot-Systeme auszulösen.
import time, random
def polite_scrape(urls):
for url in urls:
fetch(url)
time.sleep(random.uniform(1, 3)) # 1-3 s random delayUser-Agent-Rotation
Rotieren Sie User-Agent-Strings, damit Sie nicht aufgrund des standardmäßigen Scraper-UA blockiert werden.
import requests, random
USER_AGENTS = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) ...",
]
def fetch(url):
return requests.get(url, headers={"User-Agent": random.choice(USER_AGENTS)})Cookies und Sessions
Behalten Sie Sitzungscookies bei, um über mehrere Anfragen hinweg angemeldet zu bleiben. Sowohl requests Session als auch Playwright verarbeiten Cookies automatisch.
import requests
with requests.Session() as s:
s.post("https://example.com/login", data={"user":"me","pass":"pw"})
# session cookie kept automatically:
dashboard = s.get("https://example.com/dashboard")CAPTCHA und rechtliche Aspekte
CAPTCHAs sind Maßnahmen gegen Bots. Sie programmgesteuert zu lösen ist technisch möglich (2captcha, anti-captcha), wirft jedoch ethische und rechtliche Fragen auf. Prüfen Sie vor dem Scraping immer die robots.txt und die Nutzungsbedingungen der Website.
# Before scraping:
# 1. Check robots.txt: https://example.com/robots.txt
# 2. Review the Terms of Service for "scraping" or "automated access" clauses
# 3. Only scrape public data
# 4. Honour Crawl-delay directives
# 5. Cache responses to avoid repeated hitsPlaywright-Screenshots und PDF
Playwright kann Seiten als Screenshot aufnehmen oder als PDF ausgeben – nützlich für visuelle Tests und die Archivierung.
from playwright.async_api import async_playwright
import asyncio
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.goto("https://example.com")
await page.screenshot(path="page.png", full_page=True)
await page.pdf(path="page.pdf")
await browser.close()Schnelltest
Warum scheitert requests + BeautifulSoup bei vielen modernen Websites?
Zusammenfassung
Verwenden Sie Playwright oder Selenium für JavaScript-gerenderte Seiten. Führen Sie sie auf Servern im Headless-Modus aus. Fügen Sie Verzögerungen hinzu und rotieren Sie User-Agents, um Blockierungen zu vermeiden. Fangen Sie Netzwerkanfragen ab, um Tracker zu blockieren. Respektieren Sie immer robots.txt und die Nutzungsbedingungen.
Häufig gestellte Fragen
Ist die Lektion „JavaScript und Maßnahmen gegen Scraping“ kostenlos?
Ja — der vollständige Text von „JavaScript und Maßnahmen gegen Scraping“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Python Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „JavaScript und Maßnahmen gegen Scraping“?
Verwenden Sie Playwright/Selenium für JS-gerenderte Inhalte und Rate-Limiting. Du übst Python Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Python Academy zu starten?
Keine Vorkenntnisse erforderlich. Python Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „JavaScript und Maßnahmen gegen Scraping“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Python Academy-Lektion Code schreiben und ausführen?
Ja. Jede Python Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- HTTP-Anfragen mit requests und httpx
- HTML mit BeautifulSoup parsen
- Einen Scrapy-Spider erstellen
- JavaScript und Maßnahmen gegen Scraping