User-Agent-Rotation beim Scraping

User-Agent-Rotation beim Scraping cover

User-Agent-Rotation beim Scraping – so hab ich’s gelöst

 

Ausgangspunkt

Bei mehreren Requests auf dieselbe Domain kam es regelmäßig zu Captchas oder 403-Fehlern. Ursache: mein Script sendete bei jedem Request denselben User-Agent – das sieht nach Bot aus. Ziel war, die Header realistischer zu gestalten – vor allem User-Agent rotieren.

⚙️ Ansatz & Setup

Ich wollte keine riesige Browseremulation, sondern einfach in meinem Python-HTTP-Client (httpx) zufällig rotierende User-Agents einbauen.
Ich habe ein Set gängiger Desktop- und Mobile-Strings genommen, gemischt nach realer Verteilung.

Beispielhafte Liste

user_agents = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64)...",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)...",
    "Mozilla/5.0 (Linux; Android 11; SM-G991B)...",
    "Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X)...",
    ...
]

Python: User-Agent bei jedem Request wechseln

import httpx
import random

url = "https://zielseite.de/"

headers = {
    "User-Agent": random.choice(user_agents),
    "Accept": "text/html,application/xhtml+xml",
    "Accept-Language": "de-DE,de;q=0.9",
}

response = httpx.get(url, headers=headers)
print(response.status_code)

Wichtige Erkenntnisse

  • Nur User-Agent rotieren bringt wenig – wichtig ist der ganze Header-Block
  • Mobile-User-Agents wirken oft glaubwürdiger (viele Sites mobil zuerst)
  • Immer mit Accept-Language, Accept, evtl. Referer kombinieren

Optional: Ganze Header-Presets rotieren

header_presets = [
    {
        "User-Agent": "...Windows...",
        "Accept": "text/html,application/xhtml+xml",
        "Accept-Language": "de-DE,de;q=0.9"
    },
    {
        "User-Agent": "...iPhone...",
        "Accept": "text/html,application/xhtml+xml",
        "Accept-Language": "de-DE,de;q=0.9"
    },
    ...
]

headers = random.choice(header_presets)

Bonus: Was ich vermeiden würde

  • Fiktive oder falsch formatierte User-Agents (z. B. von alten Generatoren)
  • Gleichzeitiges Rotieren von Proxy + User-Agent ohne Grund
  • User-Agent ohne andere passende Header – fällt auf

Fazit

User-Agent-Rotation ist kein Wundermittel – aber ein sinnvoller Baustein gegen triviale Blockaden. Wichtig ist nicht nur der String selbst, sondern dass das ganze Header-Set zusammenpasst.

Stand: 04/2025 – funktioniert zuverlässig bei typischen Scraping-Zielen.

Mein Name ist Kadek und ich bin ein Student aus Indonesien und studiere derzeit Informatik in Deutschland. Dieser Blog dient als Plattform, auf der ich mein Wissen zu Themen wie Web Scraping, Screen Scraping, Web Data Mining, Web Harvesting, Web Data Extraction und Web Data Parsing teilen kann.