"Täglich 3.000 Produkte manuell überprüfen." - Niemand ist in der Lage, diesen Satz zu hören und unbeeindruckt zu bleiben. Tatsächlich automatisieren viele Inlandse-Commerce-Unternehmen diese Aufgabe mit nur einem Python-Crawler, und der Einstieg ist erstaunlich einfach. In diesem Artikel haben wir von den Grundlagen des Web-Scrapings bis hin zu den realen Problemen, die man bei der praktischen Anwendung trifft, alles mit funktionierendem Code zusammengefasst.
Inhaltsverzeichnis
- Was ist Web-Scraping?
- Grundlagen des Python-Scrapings - requests + BeautifulSoup
- Scraping dynamischer Seiten - Selenium und Playwright
- Häufige Probleme beim Scraping
- Scraping und rechtliche Fragen - Was Sie unbedingt wissen müssen
- Die Realität des großangelegten Scrapings - Wartungshölle
- Selbst erstellen oder professionellen Service nutzen - Wann was?
Was ist Web-Scraping?
Web-Scraping (Web Crawling) ist die Technik, bei der Programme automatisch Webseiten besuchen und die gewünschten Daten extrahieren. Es wird auch als Web-Scraping bezeichnet, und in der Praxis werden die beiden Begriffe fast synonym verwendet.
[Grundfluss des Web-Scrapings: HTTP-Anfrage → HTML-Empfang → Parsen → Datenextraktion → Speichern](images/seo1-crawling-flow.png)
Wofür wird es verwendet? Die Anwendungsbereiche sind vielfältig.
- Preisüberwachung - Automatische tägliche Erfassung der Preise von 3.000 Produkten in Wettbewerbsshops zur Verfolgung des niedrigsten Preises.
- Marktforschung - Erfassung von Produktinformationen, Bewertungen und Bewertungen von Websites wie Naver Shopping und Coupang.
- Lead-Generierung - Massenhafte Erfassung von potenziellen Kundenkontakten und Unternehmensinformationen für den Vertrieb.
- Inhaltsüberwachung - Echtzeitverfolgung bestimmter Schlüsselwörter in Nachrichten, sozialen Medien und Communitys.
- Datenanalyse - Aufbau großer Datensätze für Immobilienpreise, Stellenausschreibungen, wissenschaftliche Daten usw.
Der Grund, warum Python am häufigsten für das Scraping verwendet wird, ist offensichtlich. Es gibt reichhaltige Bibliotheken wie BeautifulSoup, Selenium und Playwright, und die Syntax ist intuitiv, was die schnelle Erstellung von Prototypen ermöglicht.
Grundlagen des Python-Scrapings - requests + BeautifulSoup
Dies ist die grundlegendste Kombination. Mit requests wird das HTML abgerufen und mit BeautifulSoup die gewünschten Daten geparst. Für statische HTML-Seiten reicht dies aus.
Installation
pip install requests beautifulsoup4
Grundbeispiel: Erfassung von Nachrichtentiteln
import requests
from bs4 import BeautifulSoup
# 1. 웹 페이지 HTML 가져오기
# requests.get()으로 HTTP GET 요청을 보냅니다
url = "https://news.ycombinator.com/"
# 2. User-Agent 헤더 설정
# 헤더 없이 요청하면 봇으로 판단해 차단하는 사이트가 많습니다
# 실제 브라우저처럼 보이도록 User-Agent를 설정합니다
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}
response = requests.get(url, headers=headers)
# response.raise_for_status() # HTTP 에러 시 예외 발생 (선택)
# 3. BeautifulSoup으로 HTML 파싱
# html.parser는 파이썬 내장 파서 — 별도 설치 불필요
soup = BeautifulSoup(response.text, "html.parser")
# 4. CSS 선택자로 원하는 요소 추출
# .titleline > a → class="titleline" 하위의 <a> 태그 (뉴스 제목 + 링크)
titles = soup.select(".titleline > a")
for i, title in enumerate(titles, 1):
print(f"{i}. {title.text}")
print(f" 링크: {title['href']}")
Mit diesem 20-Zeilen-Code können Sie alle Titel und Links von Hacker News erfassen. Der Grund, warum gesagt wird, dass der Einstieg in das Python-Scraping einfach ist, liegt genau hier.
Scraping mehrerer Seiten (Pagination)
In der Praxis sammelt man selten nur eine Seite. Wenn Sie ein Muster zum Durchlaufen mehrerer Seiten kennen, können Sie es auf die meisten Listenwebsites anwenden.
import requests
from bs4 import BeautifulSoup
import time
# 페이지 번호를 URL에 넣는 패턴 — 대부분의 리스트 페이지가 이 구조
base_url = "https://example-blog.com/posts?page={}"
all_posts = []
for page in range(1, 11): # 1~10페이지 순회
response = requests.get(base_url.format(page), headers=headers)
soup = BeautifulSoup(response.text, "html.parser")
# 각 게시글 카드에서 제목, 날짜, URL 추출
posts = soup.select(".post-item")
for post in posts:
all_posts.append({
"title": post.select_one(".post-title").text.strip(),
"date": post.select_one(".post-date").text.strip(),
"url": post.select_one("a")["href"]
})
# 서버 부하 방지를 위한 요청 간격 설정
# 1초도 짧을 수 있음 — 대상 사이트 robots.txt의 Crawl-delay 확인 권장
time.sleep(1)
print(f"총 {len(all_posts)}개 포스트 수집 완료")
Tipp: Das Einhalten von Zeitintervallen zwischen Anfragen mit
time.sleep()ist eine grundlegende Etikette beim Web-Scraping. Zu schnelle Anfragen belasten den Server und können zu IP-Blockaden führen. Im Allgemeinen sind Intervalle von 1-3 Sekunden sicher.
Scraping dynamischer Seiten - Selenium und Playwright
Heutzutage rendert die Mehrheit der Websites Inhalte mit JavaScript. In SPA (Single Page Application) basierend auf React, Vue, Next.js erhalten Sie mit requests nur ein leeres <div id="root"></div>, da die Daten erst nach der Ausführung von JavaScript geladen werden.
In solchen Fällen benötigen Sie ein Werkzeug für die Browserautomatisierung. Es startet tatsächlich den Browser, führt JavaScript aus und extrahiert Daten aus dem gerenderten Ergebnis.
[Vergleich von statischem Scraping und dynamischem Scraping: requests empfängt nur den Server-HTML, Selenium/Playwright greifen auf den DOM nach der JS-Renderung zu](images/seo1-static-vs-dynamic.png)
Beispiel für Selenium-Scraping
Selenium ist das Urgestein der Browserautomatisierung und verfügt über die umfangreichsten Ressourcen zum Scraping.
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
# 1. 크롬 브라우저를 헤드리스(화면 없이) 모드로 실행
# 서버 환경에서는 화면이 없으므로 헤드리스 모드 필수
options = webdriver.ChromeOptions()
options.add_argument("--headless=new")
driver = webdriver.Chrome(options=options)
try:
# 2. 대상 페이지 접속
driver.get("https://example-spa.com/products")
# 3. JavaScript 렌더링이 끝날 때까지 최대 10초 대기
# WebDriverWait는 요소가 나타나면 즉시 다음 단계로 진행
# 10초 안에 안 나타나면 TimeoutException 발생
WebDriverWait(driver, 10).until(
EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".product-card"))
)
# 4. 렌더링된 DOM에서 데이터 추출
products = driver.find_elements(By.CSS_SELECTOR, ".product-card")
for product in products:
name = product.find_element(By.CSS_SELECTOR, ".product-name").text
price = product.find_element(By.CSS_SELECTOR, ".product-price").text
print(f"{name}: {price}")
finally:
# 5. 브라우저 종료 — 안 닫으면 메모리 누수 발생
driver.quit()
Beispiel für Playwright-Scraping (Empfohlen für 2026)
Playwright ist eine von Microsoft entwickelte Browserautomatisierungsbibliothek der nächsten Generation. Es ist schneller und stabiler als Selenium und verfügt über eine eingebaute automatische Wartezeit (auto-wait), sodass kein Boilerplate-Code wie WebDriverWait erforderlich ist. Ab 2026 wird Playwright für neue Projekte empfohlen.
pip install playwright
playwright install chromium # 브라우저 바이너리 자동 다운로드
from playwright.sync_api import sync_playwright
# Playwright는 컨텍스트 매니저로 리소스를 자동 관리
with sync_playwright() as p:
# 1. Chromium 브라우저를 헤드리스 모드로 실행
browser = p.chromium.launch(headless=True)
page = browser.new_page()
# 2. 대상 페이지 접속
page.goto("https://example-spa.com/products")
# 3. Playwright는 자동으로 요소가 나타날 때까지 대기
# 별도의 WebDriverWait 코드가 필요 없음 — 훨씬 깔끔합니다
cards = page.locator(".product-card").all()
for card in cards:
name = card.locator(".product-name").text_content()
price = card.locator(".product-price").text_content()
print(f"{name}: {price}")
# 4. 브라우저 종료
browser.close()
Selenium vs. Playwright - Was soll ich verwenden?
[Vergleich von Selenium vs. Playwright Infografik](images/seo1-selenium-vs-playwright.png)
| Vergleichspunkt | Selenium | Playwright |
|---|---|---|
| Geschwindigkeit | Normal | In der Regel schneller als Selenium bewertet |
| Automatisches Warten | Manuelle Konfiguration erforderlich | Integriert |
| Browserunterstützung | Chrome, Firefox, Edge, Safari | Chromium, Firefox, WebKit |
| Netzwerkinterception | Begrenzt | Standardmäßig verfügbar |
| Lernmaterial | Sehr umfangreich (über 10 Jahre Geschichte) | Wächst schnell |
| Empfohlene Situationen | Legacy-Projekte, einfache Automatisierung | Neue Projekte, groß angelegtes Scraping |
Häufige Probleme beim Scraping
Wenn Sie bis hierher gelesen haben, könnten Sie denken: "Scraping ist doch nicht so schwer, oder?" Aber wenn Sie in der Praxis Python-Scraping betreiben, werden Sie feststellen, dass es weit kompliziertere Probleme gibt als das Schreiben von Code. Wir haben die fünf Probleme zusammengefasst, die die meisten Entwickler beim ersten Erstellen eines Crawlers erleben.
1. IP-Blockierung
Die meisten Websites blockieren wiederholte Anfragen von derselben IP-Adresse. Die Lösungen sind Proxy-Rotation und die Anpassung der Anfrageintervalle, aber das Problem sind die Kosten. Hochwertige Residential-Proxys kosten je nach Anbieter 5-15 Dollar pro GB, und die monatlichen Grundgebühren liegen zwischen 50 und 500 Dollar. Wenn man die Proxy-Qualitätsüberwachung, den Austausch blockierter IPs usw. hinzufügt, wird schnell klar, dass dies keine geringen Kosten sind.
2. CAPTCHA und Bot-Erkennung
Cloudflare, PerimeterX, Akamai Bot Manager, DataDome - die Bot-Abwehrlösungen werden jedes Jahr raffinierter. reCAPTCHA v3 analysiert Mausbewegungen, Bildlaufmuster und Tastatureingabegeschwindigkeiten. Wenn Sie einen CAPTCHA-Lösungsdienst wie 2Captcha verwenden, kostet dies pro Lösung 1-5 Won (je nach Typ), aber bei 100.000 Lösungen pro Tag können dies mehr als 6 Millionen Won pro Monat sein. Neben den Kosten sind auch die Geschwindigkeit und Erfolgsquote zu berücksichtigen.
3. Dynamisches Rendern und Endloses Scrollen
Die Anzahl der Websites, die JavaScript-Rendering erfordern, nimmt stetig zu. Da Sie Browserinstanzen starten müssen, verbraucht dies pro Seite 300-500 MB Speicher und die Geschwindigkeit ist im Vergleich zum statischen Crawling 5-10 Mal langsamer. Um 50 Browser gleichzeitig auszuführen, sind mindestens 16 GB RAM-Server erforderlich, und die monatlichen Infrastrukturkosten liegen bei 15-30.000 Won in der Cloud.
4. Änderungen in der Seitenstruktur
Wenn die Website, die gecrawlt werden soll, das Design ändert oder die HTML-Struktur ändert, bricht der Crawler sofort zusammen. Aktive Websites ändern ihre Struktur in der Regel alle 2-3 Monate. Sie müssen den Zyklus der Änderungserkennung, Codeanpassung, Tests und Bereitstellung ständig aufrechterhalten, und wenn es 20 Zielwebsites gibt, bedeutet dies 80-120 Wartungsarbeiten pro Jahr.
5. Datenbereinigung
Die Erwartung, dass die gesammelten Daten sauber sind, ist unrealistisch. Jede Website verwendet unterschiedliche Codierungen (UTF-8, EUC-KR), Datumsformate (2026.01.30 vs. 2026-01-30 vs. Jan 30, 2026) und stellt dieselben Informationen auf völlig unterschiedliche Weise dar. Erfahrungsgemäß nimmt die Datenbereinigung 30-50% der gesamten Sammelzeit in Anspruch.
Scraping und rechtliche Fragen - Was Sie unbedingt wissen müssen
Obwohl das technische Scraping einfach ist, ist es rechtlich gesehen ein weites Graubereich. "Es ist möglich zu kratzen" und "Es ist erlaubt zu kratzen" sind völlig unterschiedliche Fragen. Wenn es um das Scraping für geschäftliche Zwecke geht, sollten Sie unbedingt die folgenden drei Punkte überprüfen.
robots.txt - Die Grundregel des Scrapings
robots.txt ist eine Datei, in der der Website-Besitzer "Bitte sammeln Sie diesen Pfad nicht" angibt. Ob dies rechtlich bindend ist, ist umstritten, aber es wird im Grunde als Branchenstandard akzeptiert. Das Ignorieren dieses Verbots kann sich bei rechtlichen Auseinandersetzungen nachteilig auswirken.
# 예시: https://example.com/robots.txt
User-agent: *
Disallow: /private/
Disallow: /api/
Crawl-delay: 2 # 요청 간격 2초 이상 유지 요청
Die Überprüfung ist einfach. Hängen Sie einfach /robots.txt an die Ziel-URL an (z. B. https://naver.com/robots.txt). Pfade, die mit Disallow angegeben sind, sollten aus der Sammlung ausgeschlossen werden, und wenn es Crawl-delay gibt, sollte das Intervall eingehalten werden.
Datenschutzgesetz - Der Bereich, auf den Sie besonders achten sollten
Das koreanische Datenschutzgesetz legt fest, dass die Einwilligung der betroffenen Person das Prinzip bei der Datenerhebung ist. Wenn die von Ihnen gecrawlten Daten personenbezogene Informationen wie Namen, Telefonnummern, E-Mails usw. enthalten, kann bereits das Speichern oder Verwenden dieser Daten rechtswidrig sein.
Dinge, auf die Sie in der Praxis achten sollten:
- Selbst wenn die Webseite öffentlich ist, dürfen personenbezogene Daten nicht ohne Zustimmung gesammelt oder verwendet werden.
- Besondere Vorsicht ist geboten bei Kontaktdaten, SNS-Profilen, Benutzerbewertungen (einschließlich Benutzernamen).
- Wenn der Service auf die EU ausgerichtet ist, gilt die DSGVO - bei Verstoß drohen Geldstrafen von bis zu 4% des weltweiten Umsatzes.
- Auch in Korea verstärkt die Korea Communications Commission (KCC) die Sanktionen zunehmend.
Praktischer Rat: Die sicherste Methode besteht darin, nur nicht personenbezogene Informationen wie Preise, Produktspezifikationen und Marktdaten zu sammeln. Wenn Sie Daten mit personenbezogenen Informationen benötigen, lassen Sie sie unbedingt rechtlich prüfen.
Urheberrechtsgesetz - Die Rechte an den Daten selbst
Texte, Bilder, Videos usw., die auf einer Webseite veröffentlicht werden, sind in der Regel durch das Urheberrecht geschützt. Das Sammeln von Daten an sich ist eine technische Handlung, aber wenn Sie die gesammelten Inhalte eins zu eins erneut veröffentlichen oder kommerziell nutzen, kann dies als Verletzung des Urheberrechts gelten.
Präzedenzfälle und Standards:
- Faktische Informationen (Preise, numerische Daten) sind im Allgemeinen nicht durch das Urheberrecht geschützt.
- Kreative Werke (Artikel, Bewertungen, Bilder) sind urheberrechtlich geschützt.
- Wenn Sie eine Datenbank vollständig replizieren, können Sie gegen das Gesetz gegen unlauteren Wettbewerb verstoßen.
- Im Fall des hiQ Labs v. LinkedIn (2022) in den USA wurde entschieden, dass das Scraping öffentlicher Profile keine Verletzung des CFAA darstellt. LinkedIn hat jedoch später eine separate Klage wegen Verstoßes gegen die Nutzungsbedingungen eingereicht, die schließlich durch eine Einigung beigelegt wurde. Selbst bei öffentlichen Daten können die Nutzungsbedingungen und Vertragsrechtliche Einschränkungen bestehen, daher sollten Sie unbedingt die Gesetze jedes Landes und die ToS der Zielwebsite überprüfen.
[Rechtliche Checkliste für das Scraping: Überprüfung von robots.txt → Überprüfung der Einbeziehung personenbezogener Daten → Möglichkeit der Urheberrechtsverletzung → Überprüfung der Nutzungsbedingungen](images/seo1-legal-checklist.png)
Zusammenfassend: Überprüfen Sie vor Beginn des Scrapings unbedingt die ① robots.txt, ② das Vorhandensein personenbezogener Daten, ③ den Umfang der Datenerfassung, ④ die Nutzungsbedingungen der Zielwebsite. Wenn Sie sich nicht sicher sind, ist die rechtliche Beratung die sicherste Investition im Verhältnis zu den Kosten.
Die Realität des großangelegten Scrapings - Wartungshölle
Für kleine Projekte reicht ein Python-Skript aus. Wenn Sie das Scraping jedoch kontinuierlich betreiben müssen, ändert sich die Situation vollständig.
Um ein groß angelegtes Web-Scraping-System zu betreiben, benötigen Sie Folgendes:
- Infrastruktur - Server, Scheduler (Airflow, Celery usw.), Warteschlangensystem, Datenbank
- Proxy-Management - Kauf, Rotation und Qualitätsüberwachung von Hunderten bis Tausenden von Proxys (50-500 Dollar pro Monat)
- Fehlerbehandlung - Wiederholungslogik, Fehlerbenachrichtigungen, automatische Wiederherstellung
- Datenpipeline - Automatisierung von Erfassung, Bereinigung, Laden und Validierung
- Überwachung - Status des Crawlers, Datenqualität, Erkennung von Änderungen auf der Zielwebsite
- Rechtliche Einhaltung - robots.txt, Datenschutzgesetz, Urheberrechtsgesetz regelmäßig überprüfen
[Architektur des großangelegten Scrapings: Scheduler → Crawler-Pool → Proxy-Rotation → Datenpipeline → Speicher](images/seo1-large-scale-architecture.png)
Für komplexere Projekte können Sie auch Frameworks wie Scrapy in Betracht ziehen, aber unabhängig vom verwendeten Tool wird die Betriebskomplexität nicht verringert.
Wenn Sie die realistischen Kosten betrachten - die Erstellung eines Crawlers dauert etwa 2 Wochen (Personalkosten 300-400 Tausend Won) und danach sind monatlich 40-60 Stunden (Personalkosten 200-300 Tausend Won) für die Wartung erforderlich. Wenn sich die Anzahl der zu crawlenen Ziele auf 10, 20 erhöht, wird das Crawling-Infrastrukturmanagement selbst zu einer Vollzeitbeschäftigung. Wenn Sie Proxy, Server, CAPTCHA-Lösungskosten hinzufügen, können die Kosten für das Crawling allein über 500.000 Won pro Monat betragen.
"Das Erstellen eines Crawlers ist einfach. Ihn am Leben zu erhalten, ist die eigentliche Arbeit




