Hinweis: Da die vollständige Version dieser Antwort das Längenlimit von Stack Overflow überschreitet, müssen Sie zu GitHub gehen , um die erweiterte Version mit weiteren Tipps und Details zu lesen.
Um das Scraping zu verhindern (auch als Webscraping , Screenscraping , Web Data Mining , Web Harvesting oder Web Data Extraction bezeichnet ), ist es hilfreich zu wissen, wie diese Scraper funktionieren und was sie im weiteren Sinne daran hindert , gut zu funktionieren.
Es gibt verschiedene Arten von Schabern, und jeder funktioniert anders:
Spinnen wie Googles Bot oder Website-Kopierer wie HTtrack folgen rekursiv Links zu anderen Seiten, um Daten abzurufen . Diese werden manchmal zum gezielten Scraping verwendet, um bestimmte Daten abzurufen, häufig in Kombination mit einem HTML-Parser, um die gewünschten Daten von jeder Seite zu extrahieren.
Shell-Skripte: Manchmal werden gängige Unix-Tools zum Scraping verwendet: Wget oder Curl zum Herunterladen von Seiten und Grep (Regex) zum Extrahieren der Daten.
HTML-Parser, z. B. auf Jsoup, Scrapy und anderen. Ähnlich wie bei Regex-basierten Shell-Skripten werden bei diesen Daten Daten aus Seiten extrahiert, die auf Mustern in HTML basieren, wobei normalerweise alles andere ignoriert wird.
Beispiel: Wenn Ihre Website über eine Suchfunktion verfügt, sendet ein solcher Scraper möglicherweise eine Suchanforderung und ruft dann alle Ergebnislinks und ihre Titel von der HTML-Ergebnisseite ab, um speziell nur Suchergebnislinks und deren Titel abzurufen . Dies sind die häufigsten.
Bildschirmkratzer, basierend auf z. Selenium oder PhantomJS , die Ihre Website in einem echten Browser öffnen, führen JavaScript, AJAX usw. aus und rufen dann den gewünschten Text von der Webseite ab, normalerweise von:
Abrufen des HTML-Codes aus dem Browser, nachdem Ihre Seite geladen und JavaScript ausgeführt wurde, und Verwenden eines HTML-Parsers zum Extrahieren der gewünschten Daten. Dies sind die häufigsten, und so viele der Methoden zum Brechen von HTML-Parsern / Scrapern funktionieren auch hier.
Machen Sie einen Screenshot der gerenderten Seiten und extrahieren Sie dann mit OCR den gewünschten Text aus dem Screenshot. Dies sind seltene Fälle, und nur dedizierte Scraper, die Ihre Daten wirklich wollen, werden dies einrichten.
Webscraping-Dienste wie ScrapingHub oder Kimono . Tatsächlich gibt es Leute, deren Aufgabe es ist, herauszufinden, wie Sie Ihre Website kratzen und den Inhalt für andere herausholen können.
Es ist nicht überraschend, dass professionelle Scraping-Services am schwierigsten abzuschrecken sind. Wenn Sie es jedoch schwierig und zeitaufwändig machen, herauszufinden, wie Sie Ihre Website kratzen, müssen sich diese (und die Personen, die sie dafür bezahlen) möglicherweise nicht die Mühe machen, Ihre Website zu kratzen.
Einbetten Ihrer Website in die Seiten anderer Websites mit Frames und Einbetten Ihrer Website in mobile Apps.
Mobile Apps (Android und iOS) können Websites einbetten und benutzerdefiniertes CSS und JavaScript einfügen, wodurch das Erscheinungsbild Ihrer Seiten vollständig verändert wird.
Menschliches Kopieren - Einfügen: Die Benutzer kopieren und fügen Ihre Inhalte ein, um sie an anderer Stelle zu verwenden.
Es gibt viele Überschneidungen zwischen diesen verschiedenen Arten von Abstreifern, und viele Abstreifer verhalten sich ähnlich, selbst wenn sie unterschiedliche Technologien und Methoden verwenden.
Diese Tipps sind hauptsächlich meine eigenen Ideen, verschiedene Schwierigkeiten, auf die ich beim Schreiben von Schabern gestoßen bin, sowie Informationen und Ideen aus den Interwebs.
Wie man aufhört zu kratzen
Sie können es nicht vollständig verhindern , da entschlossene Schaber, was auch immer Sie tun, immer noch herausfinden können, wie man kratzt. Sie können jedoch viel Kratzen stoppen, indem Sie einige Dinge tun:
Überwachen Sie Ihre Protokolle und Verkehrsmuster. Beschränken Sie den Zugriff, wenn Sie ungewöhnliche Aktivitäten sehen:
Überprüfen Sie Ihre Protokolle regelmäßig. Bei ungewöhnlichen Aktivitäten, die auf einen automatisierten Zugriff (Scraper) hinweisen, z. B. bei vielen ähnlichen Aktionen von derselben IP-Adresse, können Sie den Zugriff blockieren oder einschränken.
Insbesondere einige Ideen:
Ratenbegrenzung:
Erlauben Sie Benutzern (und Scrapern) nur, eine begrenzte Anzahl von Aktionen in einer bestimmten Zeit auszuführen. Lassen Sie beispielsweise nur wenige Suchvorgänge pro Sekunde von einer bestimmten IP-Adresse oder einem bestimmten Benutzer aus zu. Dies verlangsamt die Schaber und macht sie unwirksam. Sie können auch ein Captcha anzeigen, wenn Aktionen zu schnell oder schneller ausgeführt werden als ein echter Benutzer.
Ungewöhnliche Aktivitäten erkennen:
Wenn Sie ungewöhnliche Aktivitäten feststellen, z. B. viele ähnliche Anforderungen von einer bestimmten IP-Adresse, eine übermäßige Anzahl von Seiten oder eine ungewöhnliche Anzahl von Suchvorgängen, können Sie den Zugriff verhindern oder ein Captcha für nachfolgende Anforderungen anzeigen.
Überwachen und bewerten Sie das Limit nicht nur anhand der IP-Adresse, sondern verwenden Sie auch andere Indikatoren:
Wenn Sie ein Block- oder Ratenlimit verwenden, tun Sie dies nicht nur auf der Basis einer IP-Adresse. Sie können andere Indikatoren und Methoden verwenden, um bestimmte Benutzer oder Schaber zu identifizieren. Einige Indikatoren, mit denen Sie bestimmte Benutzer / Abstreifer identifizieren können, sind:
Wie schnell Benutzer Formulare ausfüllen und wo sie auf eine Schaltfläche klicken;
Mit JavaScript können Sie viele Informationen sammeln, z. B. Bildschirmgröße / Auflösung, Zeitzone, installierte Schriftarten usw.; Sie können dies verwenden, um Benutzer zu identifizieren.
HTTP-Header und deren Reihenfolge, insbesondere User-Agent.
Wenn Sie beispielsweise viele Anfragen von einer einzigen IP-Adresse erhalten, die alle denselben Benutzeragenten verwenden, klicken Bildschirmgröße (in diesem Fall mit JavaScript festgelegt) und Benutzer (in diesem Fall Scraper) immer auf dieselbe Weise und unter auf die Schaltfläche In regelmäßigen Abständen handelt es sich wahrscheinlich um einen Bildschirmschaber. und Sie können ähnliche Anforderungen vorübergehend blockieren (z. B. alle Anforderungen mit diesem Benutzeragenten und der Bildschirmgröße blockieren, die von dieser bestimmten IP-Adresse stammen), und auf diese Weise werden Sie echten Benutzern diese IP-Adresse nicht stören, z. im Falle einer gemeinsamen Internetverbindung.
Sie können dies auch weiter verfolgen, da Sie ähnliche Anforderungen identifizieren können, auch wenn diese von unterschiedlichen IP-Adressen stammen, was auf verteiltes Scraping hinweist (ein Scraper, der ein Botnetz oder ein Netzwerk von Proxys verwendet). Wenn Sie viele ansonsten identische Anforderungen erhalten, diese jedoch von unterschiedlichen IP-Adressen stammen, können Sie diese blockieren. Beachten Sie auch hier, dass Sie echte Benutzer nicht versehentlich blockieren.
Dies kann gegen Bildschirmschaber wirksam sein, auf denen JavaScript ausgeführt wird, da Sie viele Informationen von ihnen erhalten können.
Verwandte Fragen zu Security Stack Exchange:
Verwenden Sie ein Captcha, anstatt den Zugriff vorübergehend zu blockieren:
Die einfache Möglichkeit, eine Ratenbegrenzung zu implementieren, besteht darin, den Zugriff für eine bestimmte Zeit vorübergehend zu blockieren. Die Verwendung eines Captcha ist jedoch möglicherweise besser, siehe den Abschnitt über Captchas weiter unten.
Registrierung & Login erforderlich
Erstellen Sie ein Konto, um Ihre Inhalte anzuzeigen, sofern dies für Ihre Website möglich ist. Dies ist eine gute Abschreckung für Schaber, aber auch eine gute Abschreckung für echte Benutzer.
- Wenn Sie ein Konto erstellen und sich anmelden müssen, können Sie Benutzer- und Scraper-Aktionen genau verfolgen. Auf diese Weise können Sie leicht erkennen, wann ein bestimmtes Konto zum Scraping verwendet wird, und es sperren. Dinge wie Ratenbegrenzung oder das Erkennen von Missbrauch (wie eine große Anzahl von Suchvorgängen in kurzer Zeit) werden einfacher, da Sie bestimmte Scraper anstelle von nur IP-Adressen identifizieren können.
Um zu vermeiden, dass Skripte viele Konten erstellen, sollten Sie:
Fordern Sie eine E-Mail-Adresse für die Registrierung an und überprüfen Sie diese E-Mail-Adresse, indem Sie einen Link senden, der geöffnet werden muss, um das Konto zu aktivieren. Erlaube nur ein Konto pro E-Mail-Adresse.
Bei der Registrierung / Kontoerstellung muss ein Captcha gelöst werden.
Wenn zum Anzeigen von Inhalten eine Kontoerstellung erforderlich ist, werden Benutzer und Suchmaschinen vertrieben. Wenn Sie zum Anzeigen eines Artikels eine Kontoerstellung benötigen, werden Benutzer an eine andere Stelle verschoben.
Blockieren Sie den Zugriff von IP-Adressen des Cloud-Hosting- und Scraping-Dienstes
Manchmal werden Scraper von Webhosting-Diensten wie Amazon Web Services oder GAE oder VPSes ausgeführt. Beschränken Sie den Zugriff auf Ihre Website (oder zeigen Sie ein Captcha an) für Anfragen, die von den IP-Adressen stammen, die von solchen Cloud-Hosting-Diensten verwendet werden.
In ähnlicher Weise können Sie auch den Zugriff von IP-Adressen einschränken, die von Proxy- oder VPN-Anbietern verwendet werden, da Scraper möglicherweise solche Proxyserver verwenden, um zu verhindern, dass viele Anforderungen erkannt werden.
Beachten Sie, dass Sie durch Blockieren des Zugriffs von Proxyservern und VPNs echte Benutzer negativ beeinflussen.
Machen Sie Ihre Fehlermeldung unscheinbar, wenn Sie blockieren
Wenn Sie den Zugriff blockieren / einschränken, sollten Sie sicherstellen, dass Sie dem Schaber nicht mitteilen, was den Block verursacht hat, und ihm dadurch Hinweise geben, wie der Schaber repariert werden kann. Eine schlechte Idee wäre es also, Fehlerseiten mit folgendem Text anzuzeigen:
Zu viele Anfragen von Ihrer IP-Adresse, versuchen Sie es später erneut.
Fehler, User Agent Header nicht vorhanden!
Zeigen Sie stattdessen eine freundliche Fehlermeldung an, die dem Schaber nicht mitteilt, was ihn verursacht hat. So etwas ist viel besser:
- Entschuldigung, etwas ist schief gelaufen. Sie können den Support über kontaktieren
helpdesk@example.com
, falls das Problem weiterhin besteht.
Dies ist auch für echte Benutzer viel benutzerfreundlicher, falls sie jemals eine solche Fehlerseite sehen sollten. Sie sollten auch in Betracht ziehen, ein Captcha für nachfolgende Anforderungen anstelle eines harten Blocks anzuzeigen, falls ein realer Benutzer die Fehlermeldung sieht, damit Sie nicht blockieren und legitime Benutzer Sie kontaktieren.
Verwenden Sie Captchas, wenn Sie den Verdacht haben, dass ein Scraper auf Ihre Website zugreift.
Captchas ("Vollständig automatisierter Test, um Computer und Menschen voneinander zu unterscheiden") sind sehr effektiv gegen das Stoppen von Schabern. Leider sind sie auch sehr effektiv bei der Irritation von Benutzern.
Als solche sind sie nützlich, wenn Sie einen möglichen Schaber vermuten und das Schaben stoppen möchten, ohne auch den Zugriff zu blockieren, falls es sich nicht um einen Schaber, sondern um einen echten Benutzer handelt. Wenn Sie einen Scraper vermuten, sollten Sie ein Captcha anzeigen, bevor Sie den Zugriff auf den Inhalt zulassen.
Dinge, die Sie bei der Verwendung von Captchas beachten sollten:
Rollen Sie nicht Ihre eigenen, verwenden Sie etwas wie Googles reCaptcha : Es ist viel einfacher als das Implementieren eines Captchas selbst. Es ist benutzerfreundlicher als eine verschwommene und verzerrte Textlösung , die Sie sich möglicherweise selbst einfallen lassen (Benutzer müssen häufig nur ein Kästchen ankreuzen) ), und es ist für einen Scripter auch viel schwieriger zu lösen als ein einfaches Bild, das von Ihrer Site bereitgestellt wird
Nehmen Sie die Lösung für das Captcha nicht in das HTML-Markup auf: Ich habe tatsächlich eine Website gesehen, die die Lösung für das Captcha auf der Seite selbst hatte (obwohl sie ziemlich gut versteckt ist), was sie ziemlich nutzlos macht. Mach so etwas nicht. Verwenden Sie wieder einen Dienst wie reCaptcha, und Sie werden diese Art von Problem nicht haben (wenn Sie ihn richtig verwenden).
Captchas können in großen Mengen gelöst werden: Es gibt Captcha-Lösungsdienste, bei denen tatsächliche, schlecht bezahlte Menschen Captchas in großen Mengen lösen. Auch hier ist die Verwendung von reCaptcha eine gute Idee, da sie über Schutzfunktionen verfügen (z. B. die relativ kurze Zeit, die der Benutzer hat, um das Captcha zu lösen). Es ist unwahrscheinlich, dass diese Art von Service verwendet wird, es sei denn, Ihre Daten sind wirklich wertvoll.
Servieren Sie Ihren Textinhalt als Bild
Sie können Text auf einer Bildserverseite rendern und zur Anzeige bereitstellen, wodurch einfache Schaber beim Extrahieren von Text behindert werden.
Dies ist jedoch schlecht für Bildschirmleser, Suchmaschinen, Leistung und so ziemlich alles andere. Es ist auch an einigen Orten illegal (aufgrund der Zugänglichkeit, z. B. dem Gesetz über Amerikaner mit Behinderungen), und es ist auch leicht, es mit einer OCR zu umgehen, also tun Sie es nicht.
Sie können mit CSS-Sprites etwas Ähnliches tun, aber das hat die gleichen Probleme.
Machen Sie nicht Ihren gesamten Datensatz verfügbar:
Wenn möglich, bieten Sie einem Skript / Bot keine Möglichkeit, Ihren gesamten Datensatz abzurufen. Als Beispiel: Sie haben eine Nachrichtenseite mit vielen einzelnen Artikeln. Sie können diese Artikel nur zugänglich machen, indem Sie über die On-Site-Suche nach ihnen suchen. Wenn Sie nicht über eine Liste aller Artikel auf der Site und ihrer URLs verfügen, können Sie auf diese Artikel nur über die Suche zugreifen Feature. Dies bedeutet, dass ein Skript, das alle Artikel von Ihrer Website entfernen möchte, nach allen möglichen Phrasen suchen muss, die in Ihren Artikeln erscheinen können, um sie alle zu finden. Dies ist zeitaufwändig, schrecklich ineffizient und wird hoffentlich funktionieren Der Schaber gibt auf.
Dies ist unwirksam, wenn:
- Der Bot / das Skript möchte / benötigt ohnehin nicht den vollständigen Datensatz.
- Ihre Artikel werden über eine URL bereitgestellt, die ungefähr so aussieht
example.com/article.php?articleId=12345
. Dies (und ähnliche Dinge) ermöglicht es Schabern, einfach alle articleId
s zu durchlaufen und alle Artikel auf diese Weise anzufordern.
- Es gibt andere Möglichkeiten, um eventuell alle Artikel zu finden, z. B. indem Sie ein Skript schreiben, um Links in Artikeln zu folgen, die zu anderen Artikeln führen.
- Die Suche nach etwas wie "und" oder "das" kann fast alles enthüllen, das ist also etwas, das man beachten muss. (Sie können dies vermeiden, indem Sie nur die Top 10 oder 20 Ergebnisse zurückgeben.)
- Sie benötigen Suchmaschinen, um Ihre Inhalte zu finden.
Stellen Sie Ihre APIs, Endpunkte und ähnliche Dinge nicht offen:
Stellen Sie sicher, dass Sie auch unbeabsichtigt keine APIs verfügbar machen. Wenn Sie beispielsweise AJAX- oder Netzwerkanforderungen in Adobe Flash oder Java Applets verwenden (Gott bewahre!), Um Ihre Daten zu laden, ist es trivial, die Netzwerkanforderungen auf der Seite zu überprüfen und herauszufinden, wohin diese Anforderungen gehen, und Führen Sie dann ein Reverse Engineering durch und verwenden Sie diese Endpunkte in einem Scraper-Programm. Stellen Sie sicher, dass Sie Ihre Endpunkte verschleiern und sie anderen wie beschrieben schwer zugänglich machen.
So verhindern Sie HTML-Parser und Scraper:
Da HTML-Parser Inhalte aus Seiten extrahieren, die auf identifizierbaren Mustern im HTML basieren, können wir diese Muster absichtlich ändern, um diese Schaber zu beschädigen oder sogar mit ihnen zu verschrauben. Die meisten dieser Tipps gelten auch für andere Schaber wie Spinnen und Bildschirmschaber.
Ändern Sie häufig Ihren HTML-Code
Scraper, die HTML direkt verarbeiten, extrahieren dazu Inhalte aus bestimmten, identifizierbaren Teilen Ihrer HTML-Seite. Beispiel: Wenn alle Seiten Ihrer Website div
eine ID mit der ID haben article-content
, die den Text des Artikels enthält, ist es trivial, ein Skript zu schreiben, um alle Artikelseiten Ihrer Website zu besuchen und den Inhaltstext des article-content
div zu extrahieren Auf jeder Artikelseite und voilà hat der Scraper alle Artikel von Ihrer Site in einem Format, das an anderer Stelle wiederverwendet werden kann.
Wenn Sie den HTML-Code und die Struktur Ihrer Seiten häufig ändern, funktionieren solche Scraper nicht mehr.
Sie können die IDs und Elementklassen in Ihrem HTML-Code häufig ändern, möglicherweise sogar automatisch. Wenn Sie also so div.article-content
etwas wie div.a4c36dda13eaf0
werden und sich jede Woche ändern, funktioniert der Schaber zunächst einwandfrei, bricht jedoch nach einer Woche ab. Stellen Sie sicher, dass Sie auch die Länge Ihrer IDs / Klassen ändern, da sonst der div.[any-14-characters]
Scraper stattdessen das gewünschte Div findet. Achten Sie auch auf andere ähnliche Löcher.
Wenn es nicht möglich ist, den gewünschten Inhalt aus dem Markup zu finden, wird der Scraper dies anhand der Struktur des HTML-Codes tun. Wenn also alle Ihre Artikelseiten dahingehend ähnlich sind, dass jedes div
in a, div
das nach a h1
kommt, der Artikelinhalt ist, erhalten Schaber den Artikelinhalt basierend darauf. Um dies zu verhindern, können Sie Ihrem HTML-Code regelmäßig und zufällig zusätzliches Markup hinzufügen / entfernen, z. Hinzufügen von zusätzlichen div
s oder span
s. Bei der modernen serverseitigen HTML-Verarbeitung sollte dies nicht zu schwierig sein.
Dinge, die Sie beachten sollten:
Es wird mühsam und schwierig zu implementieren, zu warten und zu debuggen sein.
Sie werden das Caching behindern. Insbesondere wenn Sie IDs oder Klassen Ihrer HTML-Elemente ändern, sind entsprechende Änderungen an Ihren CSS- und JavaScript-Dateien erforderlich. Dies bedeutet, dass diese bei jeder Änderung vom Browser erneut heruntergeladen werden müssen. Dies führt zu längeren Ladezeiten für wiederkehrende Besucher und einer erhöhten Serverlast. Wenn Sie es nur einmal pro Woche ändern, wird es kein großes Problem sein.
Clevere Schaber können Ihren Inhalt weiterhin abrufen, indem sie ableiten, wo sich der tatsächliche Inhalt befindet, z. durch das Wissen, dass ein großer einzelner Textblock auf der Seite wahrscheinlich der eigentliche Artikel ist. Dies ermöglicht es, die gewünschten Daten weiterhin auf der Seite zu finden und zu extrahieren. Boilerpipe macht genau das.
Stellen Sie im Wesentlichen sicher, dass es für ein Skript nicht einfach ist, den tatsächlichen gewünschten Inhalt für jede ähnliche Seite zu finden.
Weitere Informationen dazu, wie dies in PHP implementiert werden kann, finden Sie unter Verhindern, dass Crawler in Abhängigkeit von XPath Seiteninhalte abrufen.
Ändern Sie Ihren HTML-Code basierend auf dem Standort des Benutzers
Dies ähnelt dem vorherigen Tipp. Wenn Sie je nach Standort / Land Ihres Benutzers (bestimmt durch die IP-Adresse) unterschiedlichen HTML-Code bereitstellen, können die an Benutzer gelieferten Scraper beschädigt werden. Wenn zum Beispiel jemand eine mobile App schreibt, die Daten von Ihrer Website entfernt, funktioniert dies zunächst einwandfrei, bricht jedoch ab, wenn sie tatsächlich an Benutzer verteilt wird, da sich diese Benutzer möglicherweise in einem anderen Land befinden, und erhält daher einen anderen HTML-Code, den die Der eingebettete Schaber wurde nicht zum Verzehr entwickelt.
Ändern Sie häufig Ihren HTML-Code und schrauben Sie dabei aktiv mit den Schabern!
Ein Beispiel: Sie haben eine Suchfunktion auf Ihrer Website unter example.com/search?query=somesearchquery
, die den folgenden HTML-Code zurückgibt:
<div class="search-result">
<h3 class="search-result-title">Stack Overflow has become the world's most popular programming Q & A website</h3>
<p class="search-result-excerpt">The website Stack Overflow has now become the most popular programming Q & A website, with 10 million questions and many users, which...</p>
<a class"search-result-link" href="/stories/story-link">Read more</a>
</div>
(And so on, lots more identically structured divs with search results)
Wie Sie vielleicht vermutet haben, ist dies leicht zu kratzen: Ein Scraper muss lediglich die Such-URL mit einer Abfrage treffen und die gewünschten Daten aus dem zurückgegebenen HTML-Code extrahieren. Sie können den HTML-Code nicht nur wie oben beschrieben regelmäßig ändern , sondern auch das alte Markup mit den alten IDs und Klassen belassen, es mit CSS ausblenden und mit gefälschten Daten füllen, wodurch der Scraper vergiftet wird. So könnte die Suchergebnisseite geändert werden:
<div class="the-real-search-result">
<h3 class="the-real-search-result-title">Stack Overflow has become the world's most popular programming Q & A website</h3>
<p class="the-real-search-result-excerpt">The website Stack Overflow has now become the most popular programming Q & A website, with 10 million questions and many users, which...</p>
<a class"the-real-search-result-link" href="/stories/story-link">Read more</a>
</div>
<div class="search-result" style="display:none">
<h3 class="search-result-title">Visit Example.com now, for all the latest Stack Overflow related news !</h3>
<p class="search-result-excerpt">Example.com is so awesome, visit now !</p>
<a class"search-result-link" href="http://example.com/">Visit Now !</a>
</div>
(More real search results follow)
Dies bedeutet, dass Scraper, die zum Extrahieren von Daten aus dem HTML-Code basierend auf Klassen oder IDs geschrieben wurden, scheinbar weiterhin funktionieren, aber gefälschte Daten oder sogar Anzeigen erhalten, Daten, die echte Benutzer niemals sehen werden, da sie mit CSS versteckt sind.
Schrauben Sie mit dem Schaber: Fügen Sie gefälschte, unsichtbare Honeypot-Daten in Ihre Seite ein
Wenn Sie das vorherige Beispiel ergänzen, können Sie Ihrem HTML-Code unsichtbare Honeypot-Elemente hinzufügen, um Schaber zu fangen. Ein Beispiel, das der zuvor beschriebenen Suchergebnisseite hinzugefügt werden könnte:
<div class="search-result" style="display:none">
<h3 class="search-result-title">This search result is here to prevent scraping</h3>
<p class="search-result-excerpt">If you're a human and see this, please ignore it. If you're a scraper, please click the link below :-)
Note that clicking the link below will block access to this site for 24 hours.</p>
<a class"search-result-link" href="/scrapertrap/scrapertrap.php">I'm a scraper !</a>
</div>
(The actual, real, search results follow.)
Ein Scraper, der geschrieben wurde, um alle Suchergebnisse zu erhalten, nimmt dies auf, genau wie alle anderen echten Suchergebnisse auf der Seite, und besucht den Link, um nach dem gewünschten Inhalt zu suchen. Ein echter Mensch wird es niemals sehen (da es mit CSS versteckt ist) und den Link nicht besuchen. Eine echte und begehrenswerte Spinne wie die von Google wird den Link ebenfalls nicht besuchen, da Sie dies /scrapertrap/
in Ihrer robots.txt nicht zugelassen haben.
Sie können beispielsweise den scrapertrap.php
Zugriff für die IP-Adresse blockieren, die sie besucht hat, oder ein Captcha für alle nachfolgenden Anforderungen von dieser IP erzwingen.
Vergessen Sie nicht, Ihr honeypot ( /scrapertrap/
) in Ihrer robots.txt-Datei zu verbieten , damit Suchmaschinen-Bots nicht hineinfallen.
Sie können / sollten dies mit dem vorherigen Tipp kombinieren, Ihr HTML häufig zu ändern.
Ändern Sie dies auch häufig, da Schaber irgendwann lernen werden, dies zu vermeiden. Ändern Sie die Honeypot-URL und den Text. Sie sollten auch in Betracht ziehen, das zum Ausblenden verwendete Inline-CSS zu ändern und stattdessen ein ID-Attribut und externes CSS zu verwenden, da Scraper lernen, alles zu vermeiden, was ein style
Attribut mit CSS zum Ausblenden des Inhalts enthält. Versuchen Sie auch, es nur manchmal zu aktivieren, damit der Schaber zunächst funktioniert, aber nach einer Weile kaputt geht. Dies gilt auch für den vorherigen Tipp.
Böswillige Personen können den Zugriff für echte Benutzer verhindern, indem sie einen Link zu Ihrem Honeypot freigeben oder diesen Link sogar irgendwo als Bild einbetten (z. B. in einem Forum). Ändern Sie die URL häufig und verkürzen Sie die Sperrzeiten relativ.
Stellen Sie gefälschte und nutzlose Daten bereit, wenn Sie einen Schaber entdecken
Wenn Sie feststellen, was offensichtlich ein Schaber ist, können Sie gefälschte und nutzlose Daten bereitstellen. Dadurch werden die Daten beschädigt, die der Scraper von Ihrer Website erhält. Sie sollten es auch unmöglich machen, solche gefälschten Daten von realen Daten zu unterscheiden, damit die Schaber nicht wissen, dass sie verschraubt werden.
Als Beispiel: Sie haben eine Nachrichten-Website; Wenn Sie einen Schaber entdecken, anstatt den Zugriff zu blockieren, servieren Sie gefälschte, zufällig generierte Artikel. Dadurch werden die Daten vergiftet, die der Schaber erhält. Wenn Sie Ihre gefälschten Daten nicht von der realen Sache unterscheiden, wird es für Schaber schwierig, das zu bekommen, was sie wollen, nämlich die tatsächlichen, realen Daten.
Akzeptieren Sie keine Anfragen, wenn der User Agent leer ist / fehlt
Faul geschriebene Scraper senden häufig keinen User Agent-Header mit ihrer Anfrage, wohingegen alle Browser sowie Suchmaschinenspinnen dies tun.
Wenn Sie eine Anfrage erhalten, bei der der User Agent-Header nicht vorhanden ist, können Sie ein Captcha anzeigen oder den Zugriff einfach blockieren oder einschränken. (Oder liefern Sie gefälschte Daten wie oben beschrieben oder etwas anderes ..)
Es ist trivial zu fälschen, aber als Maßnahme gegen schlecht geschriebene Schaber lohnt es sich, sie zu implementieren.
Akzeptieren Sie keine Anfragen, wenn der User Agent ein gewöhnlicher Scraper ist. schwarze Liste von Schabern verwendet
In einigen Fällen verwenden Scraper einen User Agent, den kein echter Browser oder Suchmaschinen-Spider verwendet, wie z.
- "Mozilla" (Nur das, sonst nichts. Ich habe ein paar Fragen zum Scraping hier gesehen. Ein echter Browser wird niemals nur das verwenden.)
- "Java 1.7.43_u43" (Standardmäßig verwendet Javas HttpUrlConnection so etwas.)
- "BIZCO EasyScraping Studio 2.0"
- "wget", "curl", "libcurl", .. (Wget und cURL werden manchmal für das grundlegende Scraping verwendet)
Wenn Sie feststellen, dass eine bestimmte User Agent-Zeichenfolge von Scrapern auf Ihrer Website verwendet wird und nicht von echten Browsern oder legitimen Spinnen verwendet wird, können Sie sie auch Ihrer Blacklist hinzufügen.
Wenn keine Assets (CSS, Bilder) angefordert werden, handelt es sich nicht um einen echten Browser.
Ein echter Browser fordert (fast immer) Assets wie Bilder und CSS an und lädt sie herunter. HTML-Parser und Scraper werden dies nicht tun, da sie nur an den tatsächlichen Seiten und deren Inhalten interessiert sind.
Sie können Anforderungen in Ihren Assets protokollieren. Wenn Sie nur für HTML viele Anforderungen sehen, handelt es sich möglicherweise um einen Scraper.
Beachten Sie, dass Suchmaschinen-Bots, alte mobile Geräte, Bildschirmleser und falsch konfigurierte Geräte möglicherweise auch keine Assets anfordern.
Cookies verwenden und benötigen; Verwenden Sie sie, um Benutzer- und Schaberaktionen zu verfolgen.
Sie können die Aktivierung von Cookies verlangen, um Ihre Website anzeigen zu können. Dies wird unerfahrene und unerfahrene Schaberautoren abschrecken, es ist jedoch für einen Schaber einfach, Cookies zu senden. Wenn Sie sie verwenden und benötigen, können Sie Benutzer- und Scraper-Aktionen mit ihnen verfolgen und so Ratenbegrenzungen, Blockierungen oder Anzeigen von Captchas pro Benutzer anstelle einer IP-Basis implementieren.
Beispiel: Wenn der Benutzer eine Suche durchführt, setzen Sie ein eindeutiges identifizierendes Cookie. Überprüfen Sie dieses Cookie, wenn die Ergebnisseiten angezeigt werden. Wenn der Benutzer alle Suchergebnisse öffnet (das können Sie dem Cookie entnehmen), handelt es sich wahrscheinlich um einen Schaber.
Die Verwendung von Cookies kann unwirksam sein, da Schaber die Cookies auch mit ihren Anforderungen senden und bei Bedarf verwerfen können. Sie verhindern auch den Zugriff für echte Benutzer, bei denen Cookies deaktiviert sind, wenn Ihre Website nur mit Cookies funktioniert.
Beachten Sie, dass Sie, wenn Sie JavaScript zum Setzen und Abrufen des Cookies verwenden, Scraper blockieren, auf denen kein JavaScript ausgeführt wird, da sie das Cookie nicht mit ihrer Anforderung abrufen und senden können.
Verwenden Sie JavaScript + Ajax, um Ihre Inhalte zu laden
Sie können JavaScript + AJAX verwenden, um Ihren Inhalt zu laden, nachdem die Seite selbst geladen wurde. Dadurch wird der Inhalt für HTML-Parser, auf denen kein JavaScript ausgeführt wird, unzugänglich. Dies ist oft eine wirksame Abschreckung für Neulinge und unerfahrene Programmierer, die Schaber schreiben.
Sich bewusst sein:
Die Verwendung von JavaScript zum Laden des eigentlichen Inhalts beeinträchtigt die Benutzererfahrung und -leistung
Suchmaschinen führen möglicherweise auch kein JavaScript aus, sodass sie Ihre Inhalte nicht indizieren können. Dies ist möglicherweise kein Problem für Suchergebnisseiten, aber möglicherweise auch für andere Dinge, z. B. Artikelseiten.
Verschleiern Sie Ihr Markup, Netzwerkanforderungen von Skripten und alles andere.
Wenn Sie Ajax und JavaScript zum Laden Ihrer Daten verwenden, verschleiern Sie die übertragenen Daten. Beispielsweise könnten Sie Ihre Daten auf dem Server codieren (mit etwas so Einfachem wie base64 oder komplexer) und sie dann nach dem Abrufen über Ajax dekodieren und auf dem Client anzeigen. Dies bedeutet, dass jemand, der den Netzwerkverkehr überprüft, nicht sofort sieht, wie Ihre Seite funktioniert und Daten lädt, und es für jemanden schwieriger ist, Anforderungsdaten direkt von Ihren Endpunkten anzufordern, da er Ihren Entschlüsselungsalgorithmus rückentwickeln muss.
Wenn Sie Ajax zum Laden der Daten verwenden, sollten Sie es schwierig machen, die Endpunkte zu verwenden, ohne zuerst die Seite zu laden, z. B. indem Sie einen Sitzungsschlüssel als Parameter benötigen, den Sie in Ihr JavaScript oder Ihren HTML-Code einbetten können.
Sie können Ihre verschleierten Daten auch direkt in die ursprüngliche HTML-Seite einbetten und sie mit JavaScript deobfuscieren und anzeigen, wodurch zusätzliche Netzwerkanforderungen vermieden werden. Dadurch wird es erheblich schwieriger, die Daten mit einem Nur-HTML-Parser zu extrahieren, auf dem kein JavaScript ausgeführt wird, da derjenige, der den Scraper schreibt, Ihr JavaScript rückentwickeln muss (was Sie auch verschleiern sollten).
Möglicherweise möchten Sie Ihre Verschleierungsmethoden regelmäßig ändern, um Schaber zu beschädigen, die es herausgefunden haben.
Dies zu tun hat jedoch mehrere Nachteile:
Es wird mühsam und schwierig zu implementieren, zu warten und zu debuggen sein.
Es ist unwirksam gegen Scraper und Screenscraper, die tatsächlich JavaScript ausführen und dann die Daten extrahieren. (Die meisten einfachen HTML-Parser führen jedoch kein JavaScript aus.)
Dadurch wird Ihre Website für echte Benutzer funktionsunfähig, wenn JavaScript deaktiviert ist.
Die Leistung und die Ladezeiten der Seiten leiden darunter.
Nicht technisch:
Sagen Sie den Leuten, sie sollen nicht kratzen, und einige werden es respektieren
Finde einen Anwalt
Stellen Sie Ihre Daten zur Verfügung und stellen Sie eine API bereit:
Sie könnten Ihre Daten leicht verfügbar machen und eine Zuordnung und einen Link zurück zu Ihrer Site benötigen. Vielleicht $$$ dafür verlangen.
Verschiedenes:
Es gibt auch kommerzielle Scraping-Schutzdienste, wie das Anti-Scraping von Cloudflare oder Distill Networks (Details zur Funktionsweise hier ), die diese Dinge tun, und vieles mehr für Sie.
Finden Sie ein Gleichgewicht zwischen Benutzerfreundlichkeit für echte Benutzer und Abstreifsicherheit: Alles, was Sie tun, wirkt sich auf die eine oder andere Weise negativ auf die Benutzererfahrung aus. Finden Sie Kompromisse.
Vergessen Sie nicht Ihre mobile Website und Apps. Wenn Sie über eine mobile App verfügen, kann diese ebenfalls gescreent werden, und der Netzwerkverkehr kann überprüft werden, um die verwendeten REST-Endpunkte zu ermitteln.
Schaber können andere Schaber kratzen: Wenn es eine Website gibt, auf der Inhalte von Ihrer abgekratzt wurden, können andere Schaber von der Website dieses Schabers kratzen.
Weiterführende Literatur: