返回技能列表

rotate-scraping-proxies

pjt222
更新于 2 days ago
4 次查看
17
2
17
在 GitHub 上查看
开发api

关于

This skill provides proxy rotation for web scraping when basic stealth techniques fail. It lets developers choose and integrate different proxy types (datacenter, residential, mobile) with session management and cost monitoring. Use it for legitimate traffic after exhausting client-side evasion methods.

快速安装

Claude Code

推荐
主要方式
npx skills add pjt222/agent-almanac -a claude-code
插件命令备选方式
/plugin add https://github.com/pjt222/agent-almanac
Git 克隆备选方式
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/rotate-scraping-proxies

在 Claude Code 中复制并粘贴此命令以安装该技能

技能文档

Scraping-Proxys rotieren

Eskalation auf Netzwerkebene für Scraping-Kampagnen, bei denen die clientseitige Tarnung bereits ausgeschöpft ist. Proxy-Rotation ist ein letztes Mittel, keine Standardlösung — sie ist teuer, ethisch aufgeladen und leicht missbrauchbar. Dieser Skill lehrt ebenso, wann er nicht einzusetzen ist, wie er richtig anzuwenden ist.

Wann verwenden

  • headless-web-scraping (Fetcher → StealthyFetcher → DynamicFetcher) wurde bereits versucht und das Ziel liefert weiterhin 403/429/Geo-Blocks
  • Die Ratenbegrenzung liegt bereits bei Intervallen von mindestens 3 Sekunden und robots.txt erlaubt den Pfad
  • Der User-Agent und der TLS-Fingerabdruck sind bereits realistisch (nicht das Standard-python-requests)
  • Ihr Scraping ist legitim: öffentliche Daten, keine Umgehung von Authentifizierung, keine Paywall-Umgehung, keine personenbezogenen Daten ohne rechtliche Grundlage
  • Sie können den Proxy-Datenverkehr budgetieren und die operative Komplexität akzeptieren

Nicht verwenden, wenn: eine öffentliche API existiert (dann diese nutzen), die AGB der Website automatisierten Zugriff verbieten, Sie Geo-Lizenzierung umgehen würden oder das Ziel Betrug / Credential Stuffing / Sneaker-Bots / Content-Piraterie ist.

Eingaben

  • Erforderlich: Ziel-URLs und die rechtliche Grundlage für deren Scraping
  • Erforderlich: Zugangsdaten für den Proxy-Pool (aus der Umgebung gelesen, niemals fest einkodiert)
  • Erforderlich: Pool-Typ — Rechenzentrum (Datacenter), Residential oder Mobile
  • Optional: Geografische Ausrichtung (Land / Region / Stadt)
  • Optional: Rotations-Granularität — pro Anfrage (Standard) oder Sticky Session
  • Optional: Tägliches Traffic-/Ausgabenlimit
  • Optional: Ratenbegrenzungs-Verzögerung in Sekunden (Standard: 1, auch bei Rotation)

Vorgehen

Schritt 1: Vorab-Prüfung der Rechtmäßigkeit und Ethik

Machen Sie den gesamten Arbeitsablauf von einer dokumentierten rechtlichen und ethischen Prüfung abhängig. Das Überspringen dieses Schritts ist die mit Abstand größte Schadensquelle.

# Vor dem Schreiben jeglichen Codes zu bestätigende Eingaben:
# 1. Sind die Daten öffentlich (kein Login erforderlich)?
# 2. Erlaubt robots.txt den Pfad?
# 3. Verbieten die AGB der Website automatisierten Zugriff? (lesen!)
# 4. Würden beim Scraping personenbezogene Daten verarbeitet? Wenn ja, welche rechtliche Grundlage?
# 5. Könnte dieser Zugriff Geo-Lizenzierung, Paywalls oder Authentifizierung umgehen?
# 6. Gibt es eine öffentliche API oder einen Daten-Dump, der Scraping überflüssig macht?
# 7. Haben Sie den Website-Betreiber kontaktiert, falls der Umfang groß ist?

Expected: Jede Frage hat eine verteidigungsfähige schriftliche Antwort. Das erste „Nein" oder „Unbekannt" stoppt das Vorgehen, bis es geklärt ist.

On failure:

  • AGB verbieten automatisierten Zugriff — nicht fortfahren; stattdessen den Website-Betreiber kontaktieren oder eine offizielle API bzw. einen lizenzierten Datensatz verwenden
  • Personenbezogene Daten ohne Rechtsgrundlage — nicht fortfahren; Datenschutzbeauftragte einbeziehen
  • Umgeht Authentifizierung oder Geo-Lizenzierung — unter keinen Umständen fortfahren

Schritt 2: Einen Pool-Typ auswählen

Unterschiedliche Pool-Typen haben unterschiedliche Kosten-, Erkennbarkeits- und Ethikprofile. Wählen Sie die günstigste Stufe, die Ihre Blockade tatsächlich löst.

Pool-TypErkennbarkeitKostenGeeignet für
DatacenterHoch (leicht durch Cloudflare/Akamai blockiert)$Websites ohne echten Anti-Bot-Schutz, nur für Geo-Verlagerung
ResidentialNiedrig (echte ISP-IPs)$$$Websites, die Rechenzentrums-ASNs blockieren
MobileSehr niedrig (Carrier-Grade NAT, mit Tausenden geteilt)$$$$Websites, die sogar Residential blockieren (selten)

Ethischer Vorbehalt für Residential und Mobile: Diese Pools leiten Ihren Datenverkehr durch echte Privatanschlüsse. Das Einwilligungsmodell der Pool-Betreiber variiert — einige bezahlen Nutzer, andere bündeln die Exit-Node-Zustimmung in AGB von „kostenlosen VPNs", die Nutzer nicht lesen. Bevorzugen Sie Anbieter mit auditierter, explizit erteilter Einwilligung (Opt-in). Wenn Sie selbst nicht möchten, dass ein Fremder Scraping-Traffic durch Ihren Heimrouter schickt, dann schicken Sie Ihren auch nicht durch deren.

Expected: Eine dokumentierte Auswahl der günstigsten tragfähigen Stufe mit einer kurzen Begründung, warum höhere Stufen abgelehnt wurden (oder warum eine höhere Stufe nötig ist).

On failure:

  • Datacenter ist blockiert, aber Residential sprengt das Budget — Scraping- Umfang reduzieren (weniger URLs, langsamere Kadenz), bevor die Stufe hochgestuft wird
  • Kein Anbieter mit dokumentierter Opt-in-Einwilligung auffindbar — grundsätzlich überdenken, ob das Scraping überhaupt notwendig ist

Schritt 3: Rotation in Scrapling integrieren

Verdrahten Sie den Proxy mit den scrapling-Fetchern. Lesen Sie Zugangsdaten aus Umgebungsvariablen — niemals fest einkodieren, niemals eine .env in Git einchecken.

import os
import random
from scrapling import Fetcher, StealthyFetcher

# Muster A: anbietergesteuerter rotierender Endpoint (eine URL, Anbieter rotiert pro Anfrage)
PROXY_URL = os.environ["SCRAPING_PROXY_URL"]  # http://user:[email protected]:7777

fetcher = StealthyFetcher()
fetcher.configure(
    headless=True,
    timeout=60,
    network_idle=True,
    proxy=PROXY_URL,
)

# Muster B: expliziter Pool, Rotation selbst durchführen
POOL = os.environ["SCRAPING_PROXY_POOL"].split(",")  # kommagetrennte URLs

def fetch_with_rotation(url):
    proxy = random.choice(POOL)
    fetcher = StealthyFetcher()
    fetcher.configure(headless=True, timeout=60, proxy=proxy)
    return fetcher.get(url)

Expected: Anfragen gelingen und die Ausgangs-IP variiert zwischen den Aufrufen. Bestätigen Sie dies, indem Sie vor dem eigentlichen Scrape einen IP-Echo-Endpoint (z. B. https://api.ipify.org) aufrufen.

On failure:

  • 407 Proxy Authentication Required — Zugangsdaten sind falsch oder die URL-Kodierung des Passworts ist defekt (Sonderzeichen neu kodieren)
  • Gleiche IP bei jedem Aufruf — der Anbieter-Endpoint ist möglicherweise standardmäßig sticky; Dokumentation auf ein -rotating- oder Pro-Anfrage- Flag prüfen
  • Massiver Latenzanstieg — zu erwarten; Rotation fügt 200–2000 ms pro Anfrage hinzu

Schritt 4: Sticky Sessions und Pool-Zustand

Entscheiden Sie die Rotations-Granularität je nach Arbeitslast und halten Sie den Pool dann gesund.

# Sticky Session für zustandsbehaftete Abläufe (Login, mehrseitige Checkout-ähnliche Crawls)
# Die meisten Anbieter stellen eine Session-ID über den Benutzernamen bereit:
#   user-session-abc123:[email protected]:7777
# Alle Anfragen mit derselben Session-ID verlassen das Netz über dieselbe IP für ca. 10 Min.

# Rotation pro Anfrage für anonymes Massen-Scraping (Standard)

# Pool-Zustandsprüfung — vor dem Massendurchlauf aufrufen
def check_pool(pool, sample_size=5):
    sample = random.sample(pool, min(sample_size, len(pool)))
    alive = []
    for proxy in sample:
        try:
            r = StealthyFetcher().configure(proxy=proxy, timeout=10).get(
                "https://api.ipify.org"
            )
            if r.status == 200:
                alive.append(proxy)
        except Exception:
            pass
    return alive

# Backoff bei transienten Proxy-Fehlern
def fetch_with_backoff(url, max_attempts=3):
    for attempt in range(max_attempts):
        try:
            r = fetch_with_rotation(url)
            if r.status not in (407, 502, 503):
                return r
        except Exception:
            pass
        time.sleep(2 ** attempt)
    return None

Expected: Zustandsbehaftete Abläufe behalten Cookies über Anfragen hinweg; anonymes Massen-Scraping zeigt IP-Varianz zwischen den Anfragen; tote Proxys werden übersprungen statt in Schleifen zu laufen.

On failure:

  • Login bricht mitten im Ablauf ab — die Rotation erfolgt innerhalb der Sitzung; auf Sticky-Session-Zugangsdaten umstellen
  • Alle Proxys in der Stichprobe scheitern an der Zustandsprüfung — Pool ist erschöpft oder Zugangsdaten abgelaufen; Zugangsdaten rotieren oder Anbieter kontaktieren

Schritt 5: Monitoring, Kostenkontrolle und Not-Aus

Proxy-Datenverkehr hat Kosten pro GB und Kosten pro Anfrage. Außer Kontrolle geratene Scraper erzeugen außer Kontrolle geratene Rechnungen. Bauen Sie stets Limits und einen Abbruch ein.

import time

class ScrapeBudget:
    def __init__(self, max_requests, max_duration_seconds, max_failures):
        self.max_requests = max_requests
        self.max_duration = max_duration_seconds
        self.max_failures = max_failures
        self.requests = 0
        self.failures = 0
        self.start = time.monotonic()

    def allow(self):
        if self.requests >= self.max_requests:
            return False, "request cap reached"
        if time.monotonic() - self.start >= self.max_duration:
            return False, "time cap reached"
        if self.failures >= self.max_failures:
            return False, "failure cap reached (circuit breaker)"
        return True, None

    def record(self, success):
        self.requests += 1
        if not success:
            self.failures += 1

budget = ScrapeBudget(max_requests=1000, max_duration_seconds=3600, max_failures=20)

for url in target_urls:
    ok, reason = budget.allow()
    if not ok:
        print(f"Aborting: {reason}")
        break
    response = fetch_with_backoff(url)
    budget.record(success=response is not None)
    time.sleep(1)  # Ratenbegrenzung gilt weiterhin, auch bei Rotation

Expected: Budget-Obergrenzen greifen, bevor Kosten außer Kontrolle geraten. Logs zeigen Erfolgsraten pro Proxy, sodass eine schlechte Ausgangs-IP identifiziert und ausgeschlossen werden kann.

On failure:

  • Fehlerrate steigt über 20 % — pausieren; die Website hat das Rotations- muster erkannt (z. B. teilen sich alle Ihre IPs ein Subnetz); Pool-Typ wechseln oder stoppen
  • Kosten pro Datensatz übersteigen die Erwartung um das Fünffache — aggressiv cachen, URLs deduplizieren, wo möglich bündeln

Validierung

  • Die Rechtmäßigkeitsprüfung aus Schritt 1 ist schriftlich dokumentiert, bevor irgendein Code läuft
  • Keine Proxy-Zugangsdaten, Pool-URLs oder Session-IDs erscheinen in versionierten Dateien (mit grep nach gateway., proxy=, dem Anbieter-Hostnamen suchen)
  • .env (oder Äquivalent) steht in .gitignore
  • Die Pool-Wahl ist begründet: günstigste tragfähige Stufe, für Residential/Mobile mit geprüftem Einwilligungsmodell
  • Die IP-Varianz ist vor dem eigentlichen Durchlauf gegen einen Echo-Endpoint bestätigt
  • Zustandsbehaftete Abläufe nutzen Sticky Sessions; anonymes Massen- Scraping nutzt Rotation pro Anfrage
  • Budget-Obergrenzen (Anfragen, Dauer, Fehler) sind verdrahtet und getestet
  • Die Ratenbegrenzung (≥ 1 s) bleibt erhalten — Rotation ist kein Freibrief zum Fluten
  • robots.txt wird weiterhin respektiert — Rotation setzt es nicht außer Kraft

Häufige Fallstricke

  • Rotieren, bevor die Tarnung ausgeschöpft ist: Die Website braucht oft keine neue IP — sie braucht einen realistischen User-Agent, einen TLS-Fingerabdruck und eine langsamere Kadenz. Probieren Sie zuerst StealthyFetcher und Ratenbegrenzung; Rotation ist teuer und unnötig einzusetzen ist unethisch.
  • Fest einkodierte Zugangsdaten: Das Einfügen der Proxy-URL in die Quelldatei leakt sie in Git, Container-Images und Stack-Traces. Immer aus Umgebungsvariablen oder einem Secrets-Manager lesen.
  • Rotation mitten in der Sitzung: Rotation pro Anfrage zerstört jeden Ablauf, der auf Cookies, CSRF-Tokens oder den Zustand eines Warenkorbs angewiesen ist. Verwenden Sie Sticky Sessions für zustandsbehaftete Arbeit.
  • Rotation als „ethische Anonymität" missverstehen: Rotation verbirgt Sie vor dem Ziel, macht aber schädliches Scraping nicht ethisch. AGB, Urheberrecht, Datenschutzrecht und die Ethik der Ratenbegrenzung gelten unverändert weiter.
  • Residential-Proxys für hochriskante Aktivitäten einsetzen: Credential Stuffing, Sneaker-Botting, Geo-Piraterie von Streaming-Inhalten, Betrug — explizit außerhalb des Geltungsbereichs dieses Skills. Wenn Ihr Anwendungsfall so aussieht, hören Sie auf.
  • robots.txt ignorieren, weil „wir haben ja jetzt Rotation": Rotation erteilt keine Erlaubnis. Die Direktive ist die Direktive.
  • Kein Not-Aus: Eine unbeaufsichtigte Schleife auf einem abgerechneten Proxy-Pool wird über Nacht zu einer vierstelligen Rechnung. Begrenzen Sie stets Anfragen, Dauer und Fehler.
  • Einen Residential-Pool mit intransparenter Einwilligung wählen: Manche Anbieter beziehen Exit-Nodes aus „kostenlosen VPN"-AGB, die echte Nutzer nie lesen. Zahlen Sie den Aufpreis für ein auditiertes, explizit erteiltes (Opt-in) Einwilligungsmodell.

Verwandte Skills

  • headless-web-scraping — übergeordneter Skill; immer dort beginnen. Diesen Skill nur zur Eskalation verwenden.
  • use-graphql-api — offizielle APIs gegenüber Scraping bevorzugen, sofern verfügbar.
  • deploy-searxng — selbst gehostete Suche vermeidet das Scrapen von Suchmaschinen vollständig.
  • configure-reverse-proxy — entgegen- gesetzte Netzwerkrichtung (Bereitstellen statt Abrufen), nützlicher Nachbar-Verweis.
  • security-audit-codebase — nach der Integration von Zugangsdaten durchführen, um zu bestätigen, dass keine in das Repository geleakt sind.
<!-- Keep under 500 lines. Extract large examples to references/EXAMPLES.md if needed. -->

GitHub 仓库

pjt222/agent-almanac
路径: i18n/de/skills/rotate-scraping-proxies
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

相关推荐技能

qmd

开发

这是一个本地搜索和索引的CLI工具,支持BM25、向量搜索和重排序功能。开发者可以用它快速索引本地文件(如Markdown文档)并进行混合搜索,特别适合代码库或文档的本地检索。它还提供MCP模式,能轻松集成到Claude开发环境中使用。

查看技能

subagent-driven-development

开发

该Skill用于在当前会话中执行包含独立任务的实施计划,它会为每个任务分派一个全新的子代理并在任务间进行代码审查。这种"全新子代理+任务间审查"的模式既能保障代码质量,又能实现快速迭代。适合需要在当前会话中连续执行独立任务,并希望在每个任务后都有质量把关的开发场景。

查看技能

mcporter

开发

mcporter Skill 让开发者能在Claude中直接管理和调用MCP服务器。它支持列出可用服务器、调用工具、处理OAuth认证以及管理服务器守护进程。开发者可以通过命令行式交互快速执行`mcporter list`查看服务器,或使用`mcporter call`直接调用工具,简化了MCP工作流程。

查看技能

adk-deployment-specialist

开发

这是一个用于部署和编排Google Vertex AI ADK智能体的Claude Skill,专为构建生产级多智能体系统而设计。它支持通过A2A协议进行智能体通信,提供代码执行沙箱和记忆库功能,并能处理智能体发现与任务提交。当开发者需要部署ADK智能体或编排多智能体协作时,可使用此Skill来简化Vertex AI Agent Engine的部署流程。

查看技能