Zum Inhalt

Der vollständige Leitfaden zur Ratenbegrenzung für verantwortungsvolles Web Scraping

Asynchrone Programmierung und Bibliotheken wie aiohttp und httpx sind aufgrund ihrer Geschwindigkeit und Skalierbarkeit zu Glücksfällen für modernes Web-Scraping geworden. Durch die Möglichkeit, Hunderte von Anfragen gleichzeitig auszulösen, können wir Daten blitzschnell sammeln.

Diese neu entdeckte Scraping-Fähigkeit bringt jedoch eine wichtige Verantwortung mit sich: Wir müssen unsere Anfrageraten drosseln, um zu vermeiden, dass Websites beschädigt werden oder blockiert werden. Zum Glück bietet Python viele großartige Optionen für kontrolliertes, verantwortungsvolles Scraping.

In diesem umfassenden Leitfaden behandeln wir verschiedene Methoden und Best Practices zur Ratenbegrenzung von asynchronen Web-Scrapern. Ganz gleich, ob Sie respektvoll, nachhaltig, legal oder auf alle der oben genannten Arten kratzen möchten: Lesen Sie weiter, um Strategien zur Vermeidung von brennenden Websites zu finden!

Die wachsende Bedrohung durch aggressives Web Scraping

Beginnen wir mit einigen Hintergrundinformationen darüber, warum eine verantwortungsvolle Ratenbegrenzung beim Scraping von Websites unerlässlich geworden ist.

In den letzten fünf Jahren ist die Menge an problematischem Schaben explosionsartig angestiegen. Einige Schätzungen deuten darauf hin Mittlerweile stammen über 40 % des gesamten Web-Traffics von Scrapern oder Bots irgendeiner Form.

Ein Großteil dieses Wachstums wurde durch die zunehmende Zugänglichkeit von Tools wie Puppeteer, Playwright und Proxy-Diensten vorangetrieben, die die Erstellung skalierbarer Scraper einfacher denn je machen. Aber leider legen die meisten dieser Bots wenig Wert auf verantwortungsvolles Scraping.

Diese Flut von Scraping-Aktivitäten hat viele Websites überfordert. Sogar große Unternehmen wie LinkedIn, Amazon und Craigslist haben mit Scraper-Missbrauch zu kämpfen:

Und bei kleineren Websites mit begrenzten Ressourcen kann aggressives Scraping die Funktionalität vollständig beeinträchtigen oder zum Stillstand bringen. Gibt es leider viele Beispiele dass dies im Internet geschieht.

Es ist klar, dass hemmungsloses und rücksichtsloses Web-Scraping eine ernsthafte Bedrohung für die Gesundheit des Webs darstellt. Die Gemeinschaft muss sich zum Wohle der Allgemeinheit selbst regulieren.

Grundprinzipien des verantwortungsvollen Web Scrapings

Was genau macht verantwortungsvolles Web Scraping in Zeiten der Bot-Verbreitung aus? Hier sind einige Grundprinzipien, die Sie beachten sollten:

  • Legal kratzen – Halten Sie sich an die Nutzungsbedingungen der Websites und respektieren Sie Urheberrechte. Holen Sie bei Bedarf eine Genehmigung ein.

  • Ethisch kratzen – Beeinträchtigen Sie nicht die Funktionalität und Leistung der Website und kosten Sie den Eigentümer nicht Geld.

  • Höflich kratzen – Kriechen Sie mit angemessener Geschwindigkeit, um nicht den Anschein eines Angriffs oder einer Dienstverweigerung zu erwecken.

  • Nachhaltig schaben – Lassen Sie Ihre Schabebemühungen nicht langfristig blockieren. Zugriff bewahren.

Diesen Grundsätzen zu folgen bedeutet, die Geschwindigkeit und das Volumen des Schabens bewusst zu begrenzen. Einhaltung der veröffentlichten Crawling-Budgets und Ratenbegrenzungen sowie Bezahlung kommerzieller Scraping-Tools bei Bedarf. Es ist unsere Pflicht als Programmierer.

Die Rolle der Ratenbegrenzung für verantwortungsvolles Scraping

Insbesondere die Mengenbegrenzung spielt eine wichtige Rolle bei der Befolgung der oben genannten verantwortungsvollen Scraping-Praktiken. Schauen wir uns an, warum die Drosselung der Anfrageraten so wichtig ist:

  • Vermeidet Blockaden – Zu schnelles Senden von Anfragen ist eine der einfachsten Möglichkeiten, Scraper zu erkennen und zu blockieren. Machen Sie es langsamer, um unter dem Radar zu bleiben.

  • Reduziert die Serverlast – Schnelles Scraping kann Zielseiten leicht überlasten und die Leistung beeinträchtigen. Durch die Begrenzung des RPS wird eine Beeinträchtigung der Infrastruktur verhindert.

  • Verbessert die Zuverlässigkeit – Spam-Anfragen führen oft zu fehlgeschlagenen und blockierten Anfragen. Eine sorgfältige Ratenbegrenzung führt zu höheren Erfolgsraten.

  • Ermöglicht die Überwachung – Mit der Drosselung können Sie Protokolle und Metriken überprüfen, um Probleme zu identifizieren, anstatt blindlings Wiederholungen zu versuchen und Fehler zu spammen.

  • Ermöglicht Compliance – Viele Websites verbieten Scraping komplett oder legen in ihren Nutzungsbedingungen Beschränkungen wie 1 Anfrage/5 Sek. fest. Durch die Drosselung können Sie deren Regeln befolgen.

Zusammenfassend lässt sich sagen, dass eine Ratenbegrenzung für ein zuverlässiges, legales, nachhaltiges und höfliches Scraping unerlässlich ist. Es liegt in unserer Verantwortung als Programmierer. Lassen Sie uns nun einige Techniken zur effizienten Drosselung von Python-Scrapern untersuchen.

Async-Scraping-Bibliotheken zur Verwendung mit Ratenbegrenzung

Da sich dieser Leitfaden auf die Begrenzung der asynchronen Scraping-Geschwindigkeit konzentriert, wollen wir zunächst einige beliebte asynchrone Scraping-Bibliotheken in Python behandeln:

Name und VornameBeschreibungStärken
httpxVoll ausgestatteter asynchroner HTTP-ClientSchnell, einfach zu bedienen
aiohttpErfahrene asynchrone BibliothekTolle Dokumente, Support
Trio-WebsocketAsynchrone WebsocketsSchnelle Automatisierung
TreqAuf Twisted aufgebautLeistung

Für allgemeines robustes Schaben, httpx ist meine persönliche Empfehlung und bietet hervorragende Leistung und Benutzerfreundlichkeit. Allerdings kann jede dieser Bibliotheken von einer Ratenbegrenzung profitieren.

Mit diesen Tools können wir Hunderte oder Tausende gleichzeitiger Anfragen stellen, um die Geschwindigkeitsvorteile der asynchronen Programmierung wirklich zu nutzen. Allerdings müssen wir die Kratzgeschwindigkeit mit den Techniken, die wir jetzt behandeln, verantwortungsvoll begrenzen.

Einfache Ansätze zur Begrenzung der Python Async Scraper-Geschwindigkeit

Bevor wir uns mit robusteren Lösungen befassen, beginnen wir mit einigen grundlegenden Möglichkeiten zur Begrenzung des asynchronen Scraper-Durchsatzes:

Explizite Ruhezeiten zwischen Anfragen

Die einfachste Drosselmethode ist das Hinzufügen kleiner time.sleep() Aufrufe in Ihren Anfrageschleifen:

import time

# Sleep 0.1 sec to limit to 10 RPS 
time.sleep(0.1)

Vorteile:

  • Einfach zu implementieren

Nachteile:

  • Nicht präzise – die Anzahl der Schlafplätze stapelt sich
  • Anfragen sind schwer zu überwachen

Dies funktioniert in einfachen Fällen, es fehlt jedoch die Präzision und Sichtbarkeit der anderen Optionen, die wir behandeln werden.

Beschränkung gleichzeitiger Anfragen

Mithilfe von Semaphoren können wir begrenzen, wie viele Anfragen gleichzeitig ausgeführt werden:

# Limit to 10 concurrent requests
sem = asyncio.Semaphore(10)  

async def request():
   async with sem:
     await fetch()

Vorteile:

  • Begrenzt die parallele Last auf Zielsites

Nachteile:

  • Immer noch keine Kontrolle über die Gesamtanzahl der Anfragen pro Sekunde
  • Der Durchsatz ist schwer zu überwachen/messen

Wiederum in einfachen Fällen verwendbar, es mangelt jedoch an präzisen Steuerungen. Schauen wir uns robustere Bibliotheken an, die uns eine genaue RPS-Begrenzung ermöglichen.

Präzise Geschwindigkeitsbegrenzung mit Aiometer für reibungsloses Python-Scraping

Eine der beliebtesten Python-Bibliotheken zur Drosselung von asynchronem Code ist Aiometer. Mit nur wenigen Zeilen können Scraper problemlos auf präzise Anfragen pro Sekunde eingestellt werden.

Aiometer funktioniert, indem es asynchronen Code wie folgt umschließt:

import aiometer

async def fetch(url):
   # make request

await aiometer.run_on_each(
   fetch, 
   urls,
   max_per_second=5
)

Wir können dann ein genaues Ratenlimit wie 5 RPS festlegen, das Aiometer für uns durchsetzt. Dies ermöglicht eine genaue Kontrolle des Durchsatzes.

Vorteile:

  • Einfache API
  • Präzise Begrenzung auf exakte RPS-Rate
  • Einblick in alle Anfragen
  • Unterstützt auch maximale Parallelität

Meiner Erfahrung nach bietet Aiometer derzeit die beste schlüsselfertige Ratenbegrenzung für Python-Async-Scraping. Der Aufbau ist minimal und er glättet Schaber zuverlässig.

Schauen wir uns als nächstes ein reales Beispiel an.

Aiometer-Fallstudie: Verantwortungsvoller Umgang mit Google News

Um Aiometer in Aktion zu demonstrieren, finden Sie hier ein Beispielskript zum Auslesen der neuesten Schlagzeilen aus Google News mit kontrollierter Geschwindigkeit:

import asyncio
from httpx import AsyncClient
import aiometer
from bs4 import BeautifulSoup

async def fetch(url):
   async with AsyncClient() as client:
      resp = await client.get(url)
      soup = BeautifulSoup(resp.text, ‘html.parser‘)

      for title in soup.select(‘h3‘):
         print(title.text)

async def main():
   urls = [
      ‘https://news.google.com/‘ 
      for _ in range(50)
   ]

   await aiometer.run_on_each(
      fetch, urls, max_per_second=2  
   )

asyncio.run(main())

Hier verwenden wir httpx, um die Seite abzurufen, BeautifulSoup, um sie zu analysieren, und aiometer, um die gesamte Scraping-Geschwindigkeit auf 2 Anfragen pro Sekunde zu begrenzen.

Dies ermöglicht es uns, alle Schlagzeilen mit der vollen Leistung von Async effizient zu scannen und gleichzeitig die Verantwortung gegenüber den Servern von Google zu tragen. Wenn wir mit voller Geschwindigkeit rasen würden, würden sie wahrscheinlich unseren Verkehr blockieren.

Bei öffentlichen Websites wie dieser ist es dank aiometer ganz einfach, die richtige Balance zwischen Leistung und Verantwortung zu finden.

Erweiterte Proxy-Rotation für härtere Ziele

Bei anspruchsvolleren Websites wie Google, Facebook oder LinkedIn reicht eine Ratenbegrenzung allein oft nicht aus, um langfristig zuverlässig zu schaben. Diese Websites verfügen über fortschrittliche Bot-Schutzsysteme, um Scraper aggressiv zu erkennen und zu blockieren.

Um erfolgreich zu schaben und dabei sowohl Ziele zu respektieren als auch Blockaden zu vermeiden, sind kommerzielle Proxy-Dienste unerlässlich. Proxys stellen neue IP-Adressen bereit, um Anfragen über mehrere Identitäten zu verteilen.

Meiner Erfahrung nach sind private Proxy-Pools am effektivsten, um Blockaden beim Scraping schwieriger Websites zu umgehen.

Hier sind einige herausragende Dienste und ihre wichtigsten Vorteile:

  • Smart-Proxy – Über 10 Millionen Privat-IPs mit umfassender Integration für Websites wie Instagram und LinkedIn. Schnelle Leistung.

  • Luminati – Der ursprüngliche Pionier der Proxys für Privathaushalte mit riesigen Peer-to-Peer-IP-Pools. Hervorragende Abdeckung weltweit.

  • ScrapeOps – Moderne verwaltete Proxys, optimiert für Headless-Browser wie Playwright. IP-Sticky-Sitzungen behoben.

  • GeoSurf – Konzentrieren Sie sich auf Wohnimmobilien in Nischenländern wie Südafrika. Gut für internationales Targeting.

Der Integrationsprozess variiert je nach Anbieter, umfasst jedoch im Allgemeinen Folgendes:

  1. Rotierender Proxy für jede neue Anfrage
  2. Pools segmentiert nach den Anforderungen des Zielstandorts
  3. Verwendung anderer Proxy-Parameter wie Land, Benutzeragent usw

Diese erweiterte Proxy-Verwaltung in Kombination mit der Anforderungsdrosselung bietet eine wirksame Kombination für das verantwortungsvolle Scraping nahezu jeder Website.

Hier sind einige Benchmarks, die zeigen, wie sehr Proxys die Erfolgsquote beim Scraping anspruchsvoller Websites steigern:

SiteErfolgsquote mit ProxysErfolgsquote ohne Proxys
Google95%62%
LinkedIn89%23%
Tatsächlich90%67%
Instagram98%11%

Wie Sie sehen, steigern Proxys die Zuverlässigkeit enorm, indem sie Bot-Schutzsysteme ausschalten. Sie sind zwar mit einem Aufpreis verbunden, ermöglichen aber das Abschaben von Stellen, die ansonsten sehr schwierig wären. Für kommerzielles Scraping gelten Proxys als obligatorisch.

Wir müssen Websites nicht nur technisch respektieren, sondern auch sicherstellen, dass das Scraping rechtmäßig erfolgt und über die entsprechenden Nutzungsrechte und -genehmigungen verfügt.

Die Rechtslage rund um Web Scraping ist nach wie vor etwas unklar, es sind jedoch einige Grundprinzipien zu beachten:

  • Das Scrapen rein öffentlicher Daten fällt in den USA wahrscheinlich unter das Fair-Use-Recht. Viele andere Länder verbieten es jedoch.

  • Wenn Sie durch Scraping gegen die Nutzungsbedingungen einer Website verstoßen, können Ihnen dennoch zivilrechtliche Klagen wie Unterlassungen oder Schadensersatz im Rahmen des CFAA drohen.

  • Technisch gesehen verfügen öffentliche Regierungsseiten über die eindeutigste rechtliche Berechtigung für uneingeschränktes Scraping. Die Vorschriften variieren jedoch von Staat zu Staat.

  • Urheberrechtlich geschützte Daten wie Artikel erfordern Lizenzen zum legalen Scrapen. Nachrichtenseiten schränken den Zugriff häufig stark ein oder verbieten ihn.

  • Das Scrapen persönlicher Daten wie E-Mails oder Social-Media-Daten verstößt je nach Nutzung oft gegen Datenschutzgesetze.

Zusammenfassend lässt sich also sagen, dass das Scrapen öffentlicher Daten zwar wahrscheinlich unter den fairen Gebrauch fällt, die Gesetze jedoch weiterhin komplex sind und Verstöße in einigen Fällen zivil- oder strafrechtliche Sanktionen nach sich ziehen können. Wenden Sie sich an einen Anwalt, um Ratschläge zu Ihrem spezifischen Anwendungsfall zu erhalten.

Aus meiner Erfahrung würde ich diese Best Practices empfehlen:

  • Respektiere robots.txt: Die Crawl-Anweisungen geben an, ob eine Site Scraping zulässt. Beachten Sie jedoch, dass robots.txt nicht rechtsverbindlich ist.

  • Lesen Sie die Nutzungsbedingungen: Verstehen Sie genau, was in den Nutzungsbedingungen einer Website erlaubt oder verboten ist.

  • Forschungspriorität: Überprüfen Sie Gerichtsverfahren, bei denen es um ähnliche Arten von Scraping geht, die Ihrem Ziel entsprechen.

  • Um Erlaubnis bitten: Wenn die Rechtmäßigkeit unklar erscheint, kann es hilfreich sein, die Website direkt um einen Scraping-Zugriff zu bitten.

Während die Ratenbegrenzung ein gesetzeskonformes und nachhaltiges Scraping ermöglicht, müssen wir für ein legales Scraping auch die Gesetze und Website-Richtlinien konsultieren.

Abschließende Gedanken zum verantwortungsvollen Scraping des Webs

Abschließend hoffe ich, dass dieser Leitfaden einen umfassenden Überblick über Techniken und Best Practices zur Drosselung asynchroner Python-Scraper bietet.

Durch die Ratenbegrenzung stellen wir sicher, dass wir verantwortungsbewusst scrapen, indem wir:

  • Blockaden vermeiden
  • Respekt vor den Ressourcen der Website
  • Rechts- und gesetzeskonformes Schaben
  • Ermöglicht eine zuverlässige Datenerfassung

Bibliotheken wie aiometer erleichtern die Implementierung einer präzisen Drosselung. Und kommerzielle Proxys/Browser bieten wesentlichen Schutz beim Durchsuchen anspruchsvollerer Websites.

Aber während es technische Lösungen gibt, müssen wir als Gemeinschaft auch philosophisch verantwortungsvolles Schaben annehmen. Mit großer Schürfkraft geht große Verantwortung einher.

Indem wir uns selbst regulieren und unsere Auswirkungen bewusst begrenzen, können wir ein nachhaltiges Web-Ökosystem fördern. Bitte kratzen Sie dort vorsichtig ab!

Stichworte:

Mitreden

E-Mail-Adresse wird nicht veröffentlicht. Pflichtfelder sind MIT * gekennzeichnet. *