Wie verhindere ich das Scraping von Websites? [geschlossen]

301

Ich habe eine ziemlich große Musikwebsite mit einer großen Künstlerdatenbank. Ich habe bemerkt, dass andere Musikseiten die Daten unserer Seite kratzen (ich gebe hier und da Dummy-Künstlernamen ein und suche dann bei Google nach ihnen).

Wie kann ich Bildschirmkratzer verhindern? Ist es überhaupt möglich?

Pixel
quelle
9
Haben Sie darüber nachgedacht, ihren Scraper über IP oder ähnliches zu erkennen (überprüfen Sie Ihre Protokolle) und Ihre Daten nur vollständig für diese zu fälschen? Auf diese Weise würden sie Ihre Site "kratzen", aber ihre "Daten" wären nutzlos.
Lasse V. Karlsen
30
Umgedrehte Lolcats und umgekehrter / verschlüsselter Text jemand?
Wayne Werner
2
ähnliche Frage stackoverflow.com/questions/2705394/…
user279521
7
Wird auf Meta
TJ Crowder
2
@ JonasCz es war ironischer Witz. Traurig ist, dass ein ähnlicher Vorschlag in Ihrer Antwort enthalten ist, wenn auch kritisiert.
Tomáš Zato - Wiedereinsetzung Monica

Antworten:

325

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 [email protected], 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 articleIds 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 diveine 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-contentdiv 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-contentetwas wie div.a4c36dda13eaf0werden 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 divin a, divdas nach a h1kommt, 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 divs oder spans. 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.phpZugriff 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 styleAttribut 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:

JonasCz - Monica wieder einsetzen
quelle
11
Das hat mich hierher gebracht. Eine beeindruckende Antwort. Auch eine ziemlich erstaunliche Revisionsgeschichte. Danke für den Beitrag. Du bekommst eine Gegenstimme. Nicht nur wegen des Aufwands, sondern weil es für mich nützlich ist.
DaveTheMinion
1
Gute Antwort! Hier sind ein paar Gedanken. A real browser will (almost always) request and download assets such as images and CSSauch für barrierefreie leser? CAPTCHA ist kaputt, so dass zumindest professionelle Dienstleistungen wahrscheinlich nicht dadurch behindert werden. Die Verwendung von Cookies erfordert eine Benachrichtigung / Zustimmung in der EU. Find a balance between usability for real users and scraper-proofnessBalance zwischen Programmierzeit / Komplexität und finanziellem Nutzen.
Eric J.
5
@ JonH, Wenn sie interessiert sind, werden sie es lesen. Außerdem habe ich es in Absätze mit Überschriften und Unterüberschriften unterteilt, damit die Leute es scannen und die gewünschten Teile lesen können. Es gibt tatsächlich einige ähnlich lange Antworten auf SO, und die Leute lesen sie.
JonasCz
2
@JoshCrozier - Ich denke nur, dass Websites wie diese mit so vielen Informationen nicht gut spielen. Ich sage nicht, dass die Informationen schlecht sind.
JonH
2
PS Mein steganografischer Fingerabdruck der Inhaltsidee könnte möglicherweise vor einem Gericht verwendet werden. Stellen Sie sich den Schock vor, wenn Sie beweisen, dass der Besitzer Ihrer Daten sie von Ihnen erhalten hat, durch die einzigartigen Eigenschaften direkt in den Daten ...
ErikE
241

Ich gehe davon aus, dass Sie eingerichtet haben robots.txt.

Wie andere bereits erwähnt haben, können Schaber fast jeden Aspekt ihrer Aktivitäten vortäuschen, und es ist wahrscheinlich sehr schwierig, die Anfragen zu identifizieren, die von den Bösen kommen.

Ich würde überlegen:

  1. Seite einrichten , /jail.html.
  2. Verbieten Sie den Zugriff auf die Seite in robots.txt(so dass die respektvollen Spinnen niemals besuchen werden).
  3. Platzieren Sie einen Link auf einer Ihrer Seiten und verstecken Sie ihn mit CSS ( display: none).
  4. Notieren Sie die IP-Adressen der Besucher von /jail.html.

Dies kann Ihnen helfen, Anfragen von Schabern schnell zu identifizieren, die Ihre offenkundig ignorieren robots.txt.

Vielleicht wollen Sie auch Ihre macht /jail.htmleine ganze gesamte Website, die die gleichen, genauen Markup wie normale Seiten, aber mit gefälschten Daten ( /jail/album/63ajdka, /jail/track/3aads8usw.). Auf diese Weise werden die fehlerhaften Schaber nicht auf "ungewöhnliche Eingaben" aufmerksam gemacht, bis Sie die Möglichkeit haben, sie vollständig zu blockieren.

Daniel Trebbien
quelle
48
Ich habe diese Technik schon einmal als "Honigtopf" bezeichnet gesehen. Diese Technik wird auch bei der Spam-Filterung verwendet, bei der Sie eine E-Mail-Adresse auf eine Seite setzen, diese jedoch ausblenden oder klarstellen, dass keine legitimen E-Mails an Personen gesendet werden dürfen. Sammeln Sie dann die IP-Adresse eines Mailservers, der Mail an diese Adresse sendet.
Thomasrutter
12
Dies setzt voraus, dass sie Links crawlen. Die meisten Schaber werden versuchen, sich einer Form zu unterwerfen und die zurückgegebenen Daten zu kratzen.
Byron Whitlock
9
Ich habe Perl-basierte Honeypots für E-Mails gesehen, die Links zu anderen "Seiten" enthalten, die vom Perl-Skript generiert werden. Legitime Bots, die robots.txt lesen, sehen es sich nicht an und es ist den Benutzern über CSS verborgen, aber Scraper (oder E-Mail-Harvester) geraten schnell in einen unendlich tiefen Baum von Seiten, die alle schlechte Daten enthalten. Fügen Sie gleich zu Beginn jeder Ihrer Seiten einen Link zum Skript ein.
Stephen P
18
Eine andere großartige Sache, die man für Honigtöpfe einwerfen sollte, ist Teergrubing (oder Tarpitting). Dies ist eine alte Technik, die ich liebe - wenn Sie einen Bösen identifizieren, bringen Sie seinen Spam- / Scraping-Prozess zum Crawlen, indem Sie seine Verbindungen gezielt so lange wie möglich physisch offen halten, ohne sie zeitlich zu steuern. Natürlich kann dies sie darauf aufmerksam machen, dass Sie auch auf sie stehen, aber verdammt noch mal, es macht Spaß. en.wikipedia.org/wiki/Teergrubing
womp
11
Das einzige Problem bei diesem Ansatz ist, wenn ich [img] Ihre Site / jail.html [/ img] in einem beliebten Forum platziere. Sie erhalten Tonnen IP, die in Ihrem System angemeldet sind, und es ist schwierig zu filtern, welche die schlechte sind. Wenn Sie dies verhindern möchten, müssen Sie der URL ein mit IP verknüpftes Token hinzufügen. So etwas wie jail.php? T = hoeyvm und in der Datenbank haben Sie eine Zuordnung von hoeyvm und der IP, die die Seite angefordert hat.
HoLyVieR
48

Sue sie.

Im Ernst: Wenn Sie etwas Geld haben, sprechen Sie mit einem guten, netten, jungen Anwalt, der sich im Internet auskennt. Hier könnte man wirklich etwas tun können. Je nachdem, wo sich die Websites befinden, kann ein Anwalt in Ihrem Land eine Unterlassungsverfügung oder eine gleichwertige Vereinbarung treffen. Möglicherweise können Sie die Bastarde zumindest erschrecken.

Dokumentieren Sie das Einfügen Ihrer Dummy-Werte. Fügen Sie Dummy-Werte ein, die deutlich (aber dunkel) auf Sie verweisen. Ich denke, dass dies bei Telefonbuchfirmen üblich ist, und hier in Deutschland gab es mehrere Fälle, in denen Nachahmer durch gefälschte Einträge, die sie 1: 1 kopierten, in die Knie gezwungen wurden.

Es wäre eine Schande, wenn dies Sie dazu bringen würde, Ihren HTML-Code durcheinander zu bringen, SEO, Gültigkeit und andere Dinge zu beeinträchtigen (obwohl ein Template-System, das bei jeder Anfrage nach identischen Seiten eine etwas andere HTML-Struktur verwendet, möglicherweise bereits viel dagegen hilft Scraper, die sich immer auf HTML-Strukturen und Klassen- / ID-Namen stützen, um den Inhalt herauszuholen.)

Für solche Fälle sind Urheberrechte gut. Die ehrliche Arbeit anderer Leute abzureißen, um damit Geld zu verdienen, ist etwas, gegen das man kämpfen sollte.

Unicron
quelle
9
funktioniert nur in Ländern mit soliden rechtlichen Rahmenbedingungen.
TomL
3
Anwälte leben von Konflikten - und profitieren davon. In seltenen Fällen wird Ihnen ein Anwalt raten, nicht vor Gericht zu gehen. Jeder, der dies getan hat, wird Ihnen sagen, dass Gewinnen und Verlieren nichts mit guten Konzepten von „Gerechtigkeit“ zu tun hat, sondern mit den Argumenten, Stimmungen und Vorurteilen des Tages. Denken Sie daran, wenn es schief geht, können Sie nicht nur für die Kosten Ihres Anwalts, sondern auch für die anderen Parteien haften, und wenn sie sich entscheiden, eine Gegenklage zu erheben - na ja. Sie könnten leicht Ihr Zuhause und andere Vermögenswerte in Ihrem Leben verlieren. Kein Glücksspiel, würde ich vorschlagen. Ich empfehle Ihnen, die Gerichte um jeden Preis zu meiden.
Frankie
3
Ich stimme @TomL zu. Wenn sie im Westen sind, ist das etwas plausibel. Aber wenn sie in Indien / China / Russland / Ukraine / was auch immer sind - dann im Ernst, Minimum bis keine Chance. Ich kann über russische Gerichte sagen: Sie werden sich nicht einmal die Mühe machen, mit Ihren Forderungen zu arbeiten.
Highstaker
35

Es gibt wirklich nichts, was Sie tun können, um dies vollständig zu verhindern. Scraper können ihren Benutzeragenten fälschen, mehrere IP-Adressen verwenden usw. und als normaler Benutzer angezeigt werden. Das einzige, was Sie tun können, ist, den Text zum Zeitpunkt des Ladens der Seite nicht verfügbar zu machen - erstellen Sie ihn mit Bild, Flash oder laden Sie ihn mit JavaScript. Die ersten beiden sind jedoch schlechte Ideen, und die letzte wäre ein Problem mit der Barrierefreiheit, wenn JavaScript für einige Ihrer regulären Benutzer nicht aktiviert ist.

Wenn sie Ihre Website absolut zuschlagen und alle Ihre Seiten durchsuchen, können Sie eine Art Ratenbegrenzung vornehmen.

Es gibt jedoch einige Hoffnung. Scraper verlassen sich darauf, dass die Daten Ihrer Site in einem konsistenten Format vorliegen. Wenn Sie es irgendwie randomisieren könnten, könnte es ihren Schaber brechen. Dinge wie das Ändern der ID oder der Klassennamen von Seitenelementen bei jedem Laden usw. Aber das ist eine Menge Arbeit und ich bin mir nicht sicher, ob es sich lohnt. Und selbst dann könnten sie es wahrscheinlich mit genügend Engagement umgehen.

Ryeguy
quelle
14
Das Erstellen eines Systems, das die Anzahl der Seiten begrenzt, die eine IP pro Minute anzeigen kann, ist ein guter Hack, da Bildschirmschaber die Site viel schneller als jede normale Person durchsuchen.
TravisO
Einverstanden. IPs kosten Geld und werden von den meisten Hosting-Unternehmen begrenzt.
Tal Weiss
Betreff: "Dinge wie das Ändern der ID oder der Klassennamen von Seitenelementen bei jedem Laden usw." Das ist nicht so schlimm, wenn Sie einen Klassennamen über PHP erstellen und dann einfach <div class = "<? Php echo $ myPHPGeneratedClassName;?>"> Verwenden. Sie könnten sogar zufällige Zeichenfolgen verwenden, um ihn vollständig eindeutig zu machen. Alles, was sie davon abhält, Muster zu finden, erschwert das Parsen aus dem DOM erheblich.
Niggles
Es ist nicht schwer, eine IP zu finden. Es gibt viele Proxies, Freunde Computer,
Incognito
@ user257493: Stimmt, aber wir sprechen von jemandem, der hier Daten kratzt. Die Chancen sind sie nicht gehen zu diesem nur viel Aufwand zu Erntedaten. Und wenn doch, werden Sie irgendwann ihre IP-Versorgung erschöpfen.
Ryeguy
31

Stellen Sie eine XML-API bereit, um auf Ihre Daten zuzugreifen. auf eine Weise, die einfach zu bedienen ist. Wenn die Leute Ihre Daten wollen, bekommen sie sie, Sie können genauso gut alles geben.

Auf diese Weise können Sie eine Teilmenge der Funktionen auf effektive Weise bereitstellen und sicherstellen, dass zumindest die Scraper keine HTTP-Anforderungen und keine große Bandbreite verschlingen.

Dann müssen Sie nur noch die Personen überzeugen, die möchten, dass Ihre Daten die API verwenden. ;)

Williham Totland
quelle
3
Das scheint sehr vernünftig. Screen Scraping ist verdammt schwer zu verhindern. Wenn Sie eine API bereitstellen, können Sie einige Einschränkungen festlegen, Hinweise hinzufügen ("Inhalt von ----.com") und im Grunde steuern, welche Daten angegeben werden.
Alecwh
6
@alecwh: und Gebühr für den Zugang!
André Caron
3
Ich habe Ihnen das Kopfgeld verliehen, auch weil das Web so viel besser wäre, wenn jede Website dies tun würde. Hoffen wir, dass es häufiger wird.
JonasCz
1
Sobald Sie sie für den Dienst registrieren lassen, kehren sie zur normalen Site zurück
mplungjan
Ich bin eine solche Person auf der anderen Seite dieses Gesprächs. Ich baue Modelle für Broadway-Shows und muss alle meine Daten kratzen, anstatt ordentlich darauf zuzugreifen.
Yaakov Bressler
22

Entschuldigung, das ist wirklich ziemlich schwer ...

Ich würde vorschlagen, dass Sie sie höflich bitten, Ihre Inhalte nicht zu verwenden (wenn Ihre Inhalte urheberrechtlich geschützt sind).

Wenn sie ist , und sie nehmen es nicht nach unten, dann können Sie furthur Maßnahmen ergreifen und ihnen eine schicke Unterlassungserklärung .

Im Allgemeinen wird alles, was Sie tun, um ein Schaben zu verhindern, wahrscheinlich einen negativeren Effekt haben, z. B. Zugänglichkeit, Bots / Spinnen usw.

Eidechse
quelle
12

Okay, wie alle Beiträge sagen, wenn Sie es suchmaschinenfreundlich machen wollen, können Bots sicher kratzen.

Aber Sie können noch ein paar Dinge tun, und es kann für 60-70% Scraping-Bots von Bedeutung sein.

Erstellen Sie ein Überprüfungsskript wie unten.

Wenn eine bestimmte IP-Adresse sehr schnell besucht wird, geben Sie nach einigen Besuchen (5-10) ihre IP-Adresse + Browserinformationen in eine Datei oder Datenbank ein.

Der nächste Schritt

(Dies wäre ein Hintergrundprozess, der ständig ausgeführt oder nach einigen Minuten geplant wird.) Erstellen Sie ein anderes Skript, das diese verdächtigen IP-Adressen weiterhin überprüft.

Fall 1. Wenn der Benutzeragent einer bekannten Suchmaschine wie Google, Bing oder Yahoo angehört (weitere Informationen zu Benutzeragenten finden Sie, indem Sie ihn googeln). Dann müssen Sie http://www.iplists.com/ sehen . Diese Liste und versuchen, Muster abzugleichen. Und wenn es wie ein gefälschter User-Agent aussieht, bitten Sie beim nächsten Besuch, ein CAPTCHA auszufüllen . (Sie müssen etwas mehr über Bots-IP-Adressen recherchieren. Ich weiß, dass dies erreichbar ist, und versuchen Sie auch, die IP-Adresse zu ermitteln. Dies kann hilfreich sein.)

Fall 2. Kein Benutzeragent eines Suchbot: Bitten Sie einfach darum, beim nächsten Besuch ein CAPTCHA auszufüllen.

Arshdeep
quelle
+1 Die Verwendung von iplists.com ist eine ausgezeichnete Idee
Daniel Trebbien
10

Späte Antwort - und auch diese Antwort ist wahrscheinlich nicht die, die Sie hören möchten ...

Ich selbst habe bereits viele (viele zehn) verschiedene spezialisierte Data-Mining-Schaber geschrieben. (nur weil ich die "Open Data" -Philosophie mag).

Hier sind bereits viele Ratschläge in anderen Antworten - jetzt werde ich die Fürsprecherrolle des Teufels spielen und ihre Wirksamkeit erweitern und / oder korrigieren.

Zuerst:

  • wenn jemand wirklich Ihre Daten will
  • Sie können Ihre Daten nicht effektiv (technisch) verbergen
  • ob die Daten für Ihre "regulären Benutzer" öffentlich zugänglich sein sollen

Der Versuch, einige technische Barrieren zu nutzen, ist die folgenden Probleme nicht wert:

  • an Ihre regulären Benutzer, indem Sie deren Benutzererfahrung verschlechtern
  • zu regulären und willkommenen Bots (Suchmaschinen)
  • etc...

Einfaches HMTL - Der einfachste Weg ist das Analysieren der einfachen HTML-Seiten mit genau definierten Struktur- und CSS-Klassen. Zum Beispiel reicht es aus, das Element mit Firebug zu untersuchen und die richtigen Xpaths und / oder CSS-Pfade in meinem Scraper zu verwenden.

Sie können die HTML-Struktur dynamisch generieren und auch die CSS-Klassennamen (und auch das CSS selbst) dynamisch generieren (z. B. mithilfe einiger zufälliger Klassennamen) - aber

  • Sie möchten die Informationen Ihren regulären Benutzern auf konsistente Weise präsentieren
  • zB nochmal - es reicht aus, die Seitenstruktur noch einmal zu analysieren, um den Scraper einzurichten.
  • und es kann automatisch durchgeführt werden, indem einige "bereits bekannte Inhalte" analysiert werden.
    • sobald jemand schon weiß (durch früheres kratzen), zB:
    • Was enthält die Informationen über "Phil Collins"
    • genug die Seite "phil collins" anzeigen und (automatisch) analysieren, wie die Seite "heute" aufgebaut ist :)

Sie können die Struktur nicht für jede Antwort ändern, da Ihre regulären Benutzer Sie hassen werden. Dies verursacht auch mehr Probleme für Sie (Wartung), nicht für den Schaber. Der XPath- oder CSS-Pfad wird vom Scraping-Skript automatisch anhand des bekannten Inhalts bestimmt.

Ajax - am Anfang etwas schwieriger, beschleunigt aber oft den Schabeprozess :) - warum?

Bei der Analyse der Anfragen und Antworten richte ich einfach meinen eigenen Proxyserver (in Perl geschrieben) ein und mein Firefox verwendet ihn. Da es sich um meinen eigenen Proxy handelt - er ist vollständig verborgen -, sieht der Zielserver ihn natürlich als normalen Browser an. (Also kein X-Forwarded-For und solche Header). Basierend auf den Proxy-Protokollen ist es meistens möglich, die "Logik" der Ajax-Anforderungen zu bestimmen, z. B. könnte ich den größten Teil des HTML-Scrapings überspringen und nur die gut strukturierten Ajax-Antworten verwenden (meistens im JSON-Format).

Der Ajax hilft also nicht viel ...

Einige komplizierter sind Seiten, die viel gepackte Javascript-Funktionen verwenden .

Hier können zwei grundlegende Methoden verwendet werden:

  • entpacke und verstehe das JS und erstelle einen Scraper, der der Javascript-Logik folgt (auf die harte Tour)
  • oder (vorzugsweise von mir selbst) - nur Mozilla mit Mozrepl zum Kratzen verwenden. Zum Beispiel wird das eigentliche Scraping in einem voll funktionsfähigen Javascript-fähigen Browser durchgeführt, der so programmiert ist, dass er auf die richtigen Elemente klickt und einfach die "dekodierten" Antworten direkt aus dem Browserfenster abruft.

Ein solches Scraping ist langsam (das Scraping erfolgt wie im normalen Browser), ist es aber

  • sehr einfach einzurichten und zu verwenden
  • und es ist fast unmöglich, dem entgegenzuwirken :)
  • und die "Langsamkeit" wird sowieso benötigt, um dem "Blockieren der schnellen gleichen IP-basierten Anforderungen" entgegenzuwirken.

Die User-Agent- basierte Filterung hilft überhaupt nicht. Jeder ernsthafte Data Miner wird es auf einen korrekten Wert in seinem Scraper einstellen.

Login erforderlich - hilft nicht. Der einfachste Weg, dies zu übertreffen (ohne das Anmeldeprotokoll zu analysieren und / oder zu skripten), besteht darin, sich als regulärer Benutzer mit Mozilla bei der Site anzumelden und anschließend den Mozrepl-basierten Scraper auszuführen ...

Denken Sie daran, dass die erforderliche Anmeldung für anonyme Bots hilfreich ist, jedoch nicht gegen jemanden, der Ihre Daten kratzen möchte. Er registriert sich einfach auf Ihrer Website als regulärer Benutzer.

Die Verwendung von Frames ist ebenfalls nicht sehr effektiv. Dies wird von vielen Live-Filmdiensten verwendet und ist nicht sehr schwer zu übertreffen. Die Frames sind einfach eine weitere HTML / Javascript-Seite, die zur Analyse benötigt wird ... Wenn die Daten die Probleme wert sind, führt der Data Miner die erforderliche Analyse durch.

IP-basierte Begrenzung ist überhaupt nicht effektiv - hier gibt es zu viele öffentliche Proxyserver und auch hier ist der TOR ... :) Es verlangsamt das Scraping nicht (für jemanden, der Ihre Daten wirklich will).

Sehr schwer ist es, Daten in Bildern zu kratzen. (zB einfach die Daten serverseitig in Bilder konvertieren). Der Einsatz von "Tesseract" (OCR) hilft oft - aber ehrlich gesagt - die Daten müssen die Probleme für den Schaber wert sein. (was oft nicht wert ist).

Auf der anderen Seite werden Ihre Benutzer Sie dafür hassen. Ich selbst (auch wenn ich nicht kratzt) hasse Websites, die es nicht erlauben, den Seiteninhalt in die Zwischenablage zu kopieren (weil die Informationen in den Bildern enthalten sind, oder (die dummen) versuchen, mit der rechten Maustaste auf ein benutzerdefiniertes Javascript-Ereignis zu klicken .: )

Am schwierigsten sind die Websites, die Java-Applets oder Flash verwenden , und das Applet verwendet intern sichere https- Anforderungen . Aber überlegen Sie es sich zweimal - wie glücklich werden Ihre iPhone-Nutzer sein ...;). Daher verwenden derzeit nur sehr wenige Websites diese. Ich selbst blockiere alle Flash-Inhalte in meinem Browser (in regulären Browsersitzungen) - und verwende niemals Websites, die von Flash abhängen.

Ihre Meilensteine ​​könnten ... sein, also können Sie diese Methode ausprobieren - denken Sie daran - Sie werden wahrscheinlich einige Ihrer Benutzer verlieren. Denken Sie auch daran, dass einige SWF-Dateien dekompilierbar sind. ;)

Captcha (die guten - wie reCaptcha) hilft sehr - aber Ihre Benutzer werden Sie hassen ... - Stellen Sie sich vor, wie Ihre Benutzer Sie lieben werden, wenn sie auf allen Seiten einige Captchas lösen müssen, die Informationen über die Musikkünstler enthalten.

Wahrscheinlich müssen Sie nicht fortfahren - Sie sind bereits ins Bild gekommen.

Was sollten Sie jetzt tun:

Denken Sie daran: Es ist fast unmöglich, Ihre Daten zu verbergen, wenn Sie sie auf der anderen Seite (auf freundliche Weise) für Ihre regulären Benutzer veröffentlichen möchten.

So,

  • Machen Sie Ihre Daten leicht zugänglich - über eine API
    • Dies ermöglicht den einfachen Datenzugriff
    • zB Ihren Server vom Scraping entlasten - gut für Sie
  • Richten Sie die richtigen Nutzungsrechte ein (z. B. muss beispielsweise die Quelle angegeben werden).
  • Denken Sie daran, dass viele Daten nicht urheberrechtlich geschützt sind - und schwer zu schützen sind
  • Fügen Sie einige gefälschte Daten hinzu (wie Sie es bereits getan haben) und verwenden Sie rechtliche Tools
    • Senden Sie, wie andere bereits sagten, einen "Unterlassungsbescheid".
    • Andere rechtliche Schritte (Klage und ähnliches) sind wahrscheinlich zu kostspielig und schwer zu gewinnen (insbesondere gegen Websites außerhalb der USA).

Überlegen Sie zweimal, bevor Sie versuchen, einige technische Hindernisse zu überwinden.

Anstatt zu versuchen, die Data Miner zu blockieren, erhöhen Sie einfach die Benutzerfreundlichkeit Ihrer Website. Ihr Benutzer wird Sie lieben. Die Zeit (und Energie), die in technische Barrieren investiert wird, ist normalerweise nicht wert - verbringen Sie die Zeit besser damit, eine noch bessere Website zu erstellen ...

Außerdem sind Datendiebe nicht wie normale Diebe.

Wenn Sie einen preiswerten Hausalarm kaufen und eine Warnung hinzufügen: "Dieses Haus ist mit der Polizei verbunden", werden viele Diebe nicht einmal versuchen, einzubrechen. Weil eine falsche Bewegung von ihm - und er ins Gefängnis geht ...

Sie investieren also nur wenig Geld, aber der Dieb investiert und riskiert viel.

Aber der Datendieb hat solche Risiken nicht. Im Gegenteil - wenn Sie einen falschen Schritt machen (z. B. wenn Sie aufgrund technischer Hindernisse einen Fehler einführen), verlieren Sie Ihre Benutzer. Wenn der Scraping-Bot zum ersten Mal nicht funktioniert, passiert nichts - der Data Miner versucht nur einen anderen Ansatz und / oder debuggt das Skript.

In diesem Fall müssen Sie viel mehr investieren - und der Schaber viel weniger.

Denken Sie nur daran, wo Sie Ihre Zeit und Energie investieren möchten ...

Ps: Englisch ist nicht meine Muttersprache - also vergib mir mein gebrochenes Englisch ...

jm666
quelle
@Parapluie Sie sollten wirklich über den kostenlosen Inhalt und / oder über das Open Source-Modell lesen - über die Daten, die Geschichte, die Ziele und die Ethik. Und vor allem über die Open Data - für die ich die meisten meiner Scraper erstellt habe ...
jm666
Ich verstehe das Konzept, obwohl ich Ihnen für Ihre gelehrten Empfehlungen danke. Wir könnten ein interessantes Gespräch darüber geführt haben; aber es scheint, dass mein ursprünglicher Kommentar von einem Dritten gelöscht wurde. Sind wir also wirklich frei?
Parapluie
8

Aus technischer Sicht: Modellieren Sie einfach, was Google tut, wenn Sie zu viele Anfragen gleichzeitig stellen. Das sollte vieles zum Erliegen bringen.

Aus rechtlicher Sicht: Es scheint, dass die von Ihnen veröffentlichten Daten nicht urheberrechtlich geschützt sind. Das heißt, Sie veröffentlichen Namen, Statistiken und andere Informationen, die nicht urheberrechtlich geschützt sind.

In diesem Fall verletzen die Schaber nicht das Urheberrecht, indem sie Ihre Informationen über den Künstlernamen usw. weitergeben. Sie verletzen jedoch möglicherweise das Urheberrecht, wenn sie Ihre Site in den Speicher laden, da Ihre Site Elemente enthält, die urheberrechtlich geschützt sind (wie Layout usw.).

Ich empfehle, über Facebook v. Power.com zu lesen und die Argumente zu sehen, mit denen Facebook das Scraping des Bildschirms gestoppt hat. Es gibt viele legale Möglichkeiten, wie Sie versuchen können, jemanden davon abzuhalten, Ihre Website zu kratzen. Sie können weitreichend und einfallsreich sein. Manchmal kaufen die Gerichte die Argumente. Manchmal tun sie es nicht.

Angenommen, Sie veröffentlichen gemeinfreie Informationen, die nicht urheberrechtlich geschützt sind, wie Namen und grundlegende Statistiken. Sie sollten sie einfach im Namen der Redefreiheit und der offenen Daten loslassen. Darum geht es im Web.

Dengeltrees
quelle
1
Auch wenn Sie möglicherweise nicht in der Lage sind, die Informationen urheberrechtlich zu schützen, können Sie in den Nutzungsbedingungen definitiv eine Klausel gegen das Abschaben einfügen. Senden Sie dann ein Unterlassungsschreiben wegen Verstoßes gegen die Nutzungsbedingungen.
André Caron
1
Redefreiheit und offene Daten sind in der Tat der Geist des Internets!
Ciara
Ja, Redefreiheit und all das. Die Scraper verschwenden jedoch möglicherweise einen erheblichen Teil des OP-Budgets oder der Bandbreite und kopieren nicht urheberrechtlich geschützte Daten.
Jpaugh
8

Dinge, die gegen Anfängerschaber wirken könnten:

  • IP-Blockierung
  • Verwenden Sie viel Ajax
  • Überprüfen Sie den Referer Request Header
  • Login erforderlich

Dinge, die im Allgemeinen helfen:

  • Ändern Sie Ihr Layout jede Woche
  • robots.txt

Dinge, die helfen, aber Ihre Benutzer dazu bringen, Sie zu hassen:

  • Captcha
pguardiario
quelle
8

Ich habe viel Web-Scraping durchgeführt und einige Techniken zusammengefasst, um Web-Scraper in meinem Blog zu stoppen, basierend auf dem, was ich als störend empfinde.

Es ist ein Kompromiss zwischen Ihren Benutzern und Schabern. Wenn Sie IPs einschränken, CAPTCHAs verwenden, sich anmelden usw., machen Sie es den Schabern schwer. Dies kann aber auch Ihre echten Benutzer vertreiben.

hoju
quelle
8

Ihre beste Option ist leider ziemlich manuell: Suchen Sie nach Verkehrsmustern, von denen Sie glauben, dass sie auf Scraping hinweisen, und verbieten Sie deren IP-Adressen.

Da es sich um eine öffentliche Site handelt, wird die Site durch Scrapen der Site auch suchmaschinenfreundlich. Wenn eine Suchmaschine Ihre Website crawlen und kratzen kann, kann dies auch ein böswilliger Scraper. Es ist eine feine Linie zu gehen.

STW
quelle
4
IP-Blockierung verlangsamt einen Scraper, ist aber auch eine Menge Arbeit für Ihren Server. Nehmen wir an, ich kratzte Sie mit 1000 Proxys, ich habe immer noch die gewünschten Daten und jetzt ist Ihre Firewall ein Chaos.
pguardiario
1
Wenn Sie das tun, werden sie horizontal auf Sie gehen. 100000 Adressen kosten heute nichts für sie, verlangsamen aber Ihre Website, wenn Sie versuchen, sie alle zu verbieten - und sie werden die IPs drehen, um nicht mehr als ein- oder zweimal zu besuchen
mplungjan
6

Sicher ist es möglich. Schalten Sie Ihre Website für 100% Erfolg offline.

In Wirklichkeit können Sie einige Dinge tun , die das Schaben etwas erschweren. Google führt Browserprüfungen durch, um sicherzustellen, dass Sie kein Roboter sind, der Suchergebnisse abkratzt (obwohl dies, wie fast alles andere, gefälscht werden kann).

Sie können beispielsweise einige Sekunden zwischen der ersten Verbindung zu Ihrer Site und nachfolgenden Klicks benötigen. Ich bin mir nicht sicher, was der ideale Zeitpunkt wäre oder wie ich es genau machen soll, aber das ist eine andere Idee.

Ich bin sicher, dass es einige andere Leute gibt, die viel mehr Erfahrung haben, aber ich hoffe, dass diese Ideen zumindest etwas hilfreich sind.

Wayne Werner
quelle
6

Es gibt einige Dinge, die Sie tun können, um Bildschirmkratzer zu verhindern. Einige sind nicht sehr effektiv, andere (ein CAPTCHA), behindern jedoch die Benutzerfreundlichkeit. Sie müssen auch bedenken, dass dies legitime Site-Scraper wie Suchmaschinenindizes behindern kann.

Ich gehe jedoch davon aus, dass wenn Sie nicht möchten, dass es verschrottet wird, dies bedeutet, dass Sie nicht möchten, dass Suchmaschinen es auch indizieren.

Hier sind einige Dinge, die Sie ausprobieren können:

  • Zeigen Sie den Text in einem Bild. Dies ist ziemlich zuverlässig und für den Benutzer weniger schmerzhaft als ein CAPTCHA, bedeutet jedoch, dass er nicht ausschneiden und einfügen kann und nicht schön skaliert oder zugänglich ist.
  • Verwenden Sie ein CAPTCHA und verlangen Sie, dass es ausgefüllt wird, bevor Sie die Seite zurücksenden. Dies ist eine zuverlässige Methode, aber auch der größte Schmerz, der einem Benutzer auferlegt werden muss.
  • Fordern Sie den Benutzer auf, sich vor dem Anzeigen der Seiten für ein Konto anzumelden und seine E-Mail-Adresse zu bestätigen. Dies ist ziemlich effektiv, aber nicht vollständig - ein Bildschirmschaber kann ein Konto einrichten und sein Skript geschickt programmieren, um sich für sie anzumelden.
  • Wenn die Benutzeragentenzeichenfolge des Clients leer ist, blockieren Sie den Zugriff. Ein Site-Scraping-Skript wird häufig träge programmiert und legt keine Benutzeragentenzeichenfolge fest, während dies bei allen Webbrowsern der Fall ist.
  • Sie können eine schwarze Liste bekannter Screen-Scraper-Benutzeragentenzeichenfolgen einrichten, sobald Sie diese entdecken. Auch dies wird nur den träge codierten helfen; Ein Programmierer, der weiß, was er tut, kann eine Benutzeragentenzeichenfolge festlegen, um sich als Webbrowser auszugeben.
  • Ändern Sie den URL-Pfad häufig. Wenn Sie es ändern, stellen Sie sicher, dass das alte weiterhin funktioniert, jedoch nur so lange, wie ein Benutzer wahrscheinlich seinen Browser geöffnet hat. Machen Sie es schwierig, den neuen URL-Pfad vorherzusagen. Dies macht es für Skripte schwierig, sie abzurufen, wenn ihre URL fest codiert ist. Es wäre am besten, dies mit einer Art Skript zu tun.

Wenn ich dies tun müsste, würde ich wahrscheinlich eine Kombination der letzten drei verwenden, da diese die Unannehmlichkeiten für legitime Benutzer minimieren. Sie müssten jedoch akzeptieren, dass Sie nicht alle auf diese Weise blockieren können, und wenn jemand herausfindet, wie er es umgehen kann, kann er es für immer kratzen. Sie könnten dann einfach versuchen, ihre IP-Adressen zu blockieren, wenn Sie sie entdecken, denke ich.

thomasrutter
quelle
6
  1. Nein, es ist nicht möglich aufzuhören (in irgendeiner Weise)
  2. Umarme es. Warum nicht als RDFa veröffentlichen und super suchmaschinenfreundlich werden und die Wiederverwendung von Daten fördern? Die Leute werden sich bei Ihnen bedanken und bei Bedarf Kredit geben (siehe musicbrainz als Beispiel).

Es ist nicht die Antwort, die Sie wahrscheinlich wollen, aber warum sollten Sie verbergen, was Sie veröffentlichen möchten?

Nathan
quelle
5

Methode 1 (nur kleine Sites):
Verschlüsselte / verschlüsselte Daten bereitstellen.
Ich habe das Web mit Python (urllib, Anfragen, beautifulSoup usw.) gestaltet und viele Websites gefunden, die verschlüsselte / verschlüsselte Daten bereitstellen, die in keiner Programmiersprache entschlüsselt werden können, nur weil die Verschlüsselungsmethode nicht existiert.

Ich habe dies auf einer PHP-Website erreicht, indem ich die Ausgabe verschlüsselt und minimiert habe (WARNUNG: Dies ist keine gute Idee für große Websites). Die Antwort war immer durcheinandergebrachter Inhalt.

Beispiel für die Minimierung der Ausgabe in PHP ( Wie minimiere ich die HTML-Ausgabe von PHP-Seiten? ):

<?php
  function sanitize_output($buffer) {
    $search = array(
      '/\>[^\S ]+/s', // strip whitespaces after tags, except space
      '/[^\S ]+\</s', // strip whitespaces before tags, except space
      '/(\s)+/s'      // shorten multiple whitespace sequences
    );
    $replace = array('>', '<', '\\1');
    $buffer = preg_replace($search, $replace, $buffer);
    return $buffer;
  }
  ob_start("sanitize_output");
?>

Methode 2:
Wenn Sie sie nicht aufhalten können, schrauben Sie sie über und liefern Sie gefälschte / nutzlose Daten als Antwort.

Methode 3:
Blockieren Sie häufig verwendete Scraping-Benutzeragenten. Dies wird auf großen / großen Websites angezeigt, da es unmöglich ist, sie mit "python3.4" als User-Agent zu scrapen.

Methode 4:
Stellen Sie sicher, dass alle Benutzer-Header gültig sind. Manchmal stelle ich so viele Header wie möglich bereit, damit mein Scraper wie ein authentischer Benutzer erscheint. Einige davon sind nicht einmal wahr oder gültig wie en-FU :).
Hier ist eine Liste einiger der Header, die ich normalerweise zur Verfügung stelle.

headers = {
  "Requested-URI": "/example",
  "Request-Method": "GET",
  "Remote-IP-Address": "656.787.909.121",
  "Remote-IP-Port": "69696",
  "Protocol-version": "HTTP/1.1",
  "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
  "Accept-Encoding": "gzip,deflate",
  "Accept-Language": "en-FU,en;q=0.8",
  "Cache-Control": "max-age=0",
  "Connection": "keep-alive",
  "Dnt": "1",  
  "Host": "http://example.com",
  "Referer": "http://example.com",
  "Upgrade-Insecure-Requests": "1",
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36"
}
Gemeinschaft
quelle
2

Anstatt Bots auf die schwarze Liste zu setzen, sollten Sie sie vielleicht auf die Whitelist setzen. Wenn Sie Ihre Suchergebnisse für die wenigen Top-Engines nicht löschen möchten, können Sie deren User-Agent-Zeichenfolgen auf die Whitelist setzen, die im Allgemeinen gut bekannt sind. Die weniger ethischen Bots neigen dazu, User-Agent-Strings beliebter Webbrowser zu fälschen. Die wenigen Top-Suchmaschinen sollten mehr als 95% Ihres Datenverkehrs erreichen.

Die Identifizierung der Bots selbst sollte unter Verwendung der von anderen Postern vorgeschlagenen Techniken recht einfach sein.

Chris
quelle
2

Ein schneller Ansatz wäre, eine Spreng- / Bot-Falle zu stellen.

  1. Erstellen Sie eine Seite, die bestimmte Informationen wie die IP-Adresse und so weiter erfasst, wenn sie eine bestimmte Anzahl von Malen oder gar nicht geöffnet wird (Sie können auch Unregelmäßigkeiten oder Muster berücksichtigen, aber diese Seite sollte überhaupt nicht geöffnet werden müssen).

  2. Erstellen Sie auf Ihrer Seite einen Link dazu, der mit der CSS-Anzeige ausgeblendet ist: keine; oder links: -9999px; Position: absolut; Versuchen Sie, es an Stellen zu platzieren, an denen es weniger unwahrscheinlich ist, dass es ignoriert wird, z. B. an Stellen, an denen Ihr Inhalt unterliegt, und nicht an Ihrer Fußzeile, da Bots manchmal bestimmte Teile einer Seite vergessen können.

  3. Legen Sie in Ihrer robots.txt-Datei eine ganze Reihe von Verbotsregeln für Seiten fest, auf denen keine freundlichen Bots (LOL, als hätten sie glückliche Gesichter!) Informationen sammeln und diese Seite als eine davon festlegen sollen.

  4. Wenn nun ein freundlicher Bot durchkommt, sollte er diese Seite ignorieren. Richtig, aber das ist immer noch nicht gut genug. Machen Sie noch ein paar dieser Seiten oder leiten Sie eine Seite irgendwie um, um andere Namen zu akzeptieren. Fügen Sie diesen Trap-Seiten in Ihrer robots.txt-Datei neben den Seiten, die Sie ignorieren möchten, weitere Verbotsregeln hinzu.

  5. Sammeln Sie die IP-Adresse dieser Bots oder aller Personen, die diese Seiten betreten. Verbieten Sie sie nicht, sondern verwenden Sie eine Funktion, um Nudeltexte in Ihren Inhalten anzuzeigen, z. B. Zufallszahlen, Copyright-Hinweise, bestimmte Textzeichenfolgen, unheimliche Bilder, im Grunde alles, was Sie behindert guter Inhalt. Sie können auch Links festlegen, die auf eine Seite verweisen, deren Laden ewig dauert. in PHP können Sie die Funktion sleep () verwenden. Dies wird den Crawler zurückschlagen, wenn er eine Art Erkennung hat, um Seiten zu umgehen, deren Laden viel zu lange dauert, da einige gut geschriebene Bots so eingestellt sind, dass sie jeweils X Links verarbeiten.

  6. Wenn Sie bestimmte Textzeichenfolgen / -sätze erstellt haben, gehen Sie zu Ihrer bevorzugten Suchmaschine und suchen Sie nach diesen. Möglicherweise wird Ihnen angezeigt, wo Ihr Inhalt landet.

Wenn Sie taktisch und kreativ denken, könnte dies ein guter Ausgangspunkt sein. Am besten lernen Sie, wie ein Bot funktioniert.

Ich würde auch darüber nachdenken, einige IDs zu verschlüsseln oder wie Attribute auf dem Seitenelement angezeigt werden:

<a class="someclass" href="../xyz/abc" rel="nofollow" title="sometitle"> 

Dies ändert seine Form jedes Mal, wenn einige Bots so eingestellt sind, dass sie nach bestimmten Mustern auf Ihren Seiten oder nach bestimmten Elementen suchen.

<a title="sometitle" href="../xyz/abc" rel="nofollow" class="someclass"> 

id="p-12802" > id="p-00392"
Steve Chan
quelle
1
Du willst sie nicht nur verbieten, du willst sie komplett verarschen ... ICH LIEBE ES!
Zoidberg
Stealth Banning ist genau das, woran ich gedacht habe (auch bekannt als Shadowbanning, Hell Banning).
ErikE
1

Sie können das normale Scraping des Bildschirms nicht stoppen. Ob gut oder schlecht, es liegt in der Natur des Webs.

Sie können festlegen, dass niemand auf bestimmte Dinge (einschließlich Musikdateien) zugreifen kann , es sei denn, er ist als registrierter Benutzer angemeldet. In Apache ist das nicht allzu schwierig . Ich gehe davon aus, dass dies auch in IIS nicht allzu schwierig wäre.

Dinah
quelle
1

Eine Möglichkeit besteht darin, den Inhalt als XML-Attribute, URL-codierte Zeichenfolgen, vorformatierten Text mit HTML-codiertem JSON oder Daten-URIs bereitzustellen und ihn dann auf dem Client in HTML umzuwandeln. Hier sind einige Websites, die dies tun:

  • Skechers : XML

    <document 
     filename="" 
     height="" 
     width="" 
     title="SKECHERS" 
     linkType="" 
     linkUrl="" 
     imageMap="" 
     href=&quot;http://www.bobsfromskechers.com&quot; 
     alt=&quot;BOBS from Skechers&quot; 
     title=&quot;BOBS from Skechers&quot; 
    />
  • Chrome Web Store : JSON

    <script type="text/javascript" src="https://apis.google.com/js/plusone.js">{"lang": "en", "parsetags": "explicit"}</script>
  • Bing News : Daten-URL

    <script type="text/javascript">
      //<![CDATA[
      (function()
        {
        var x;x=_ge('emb7');
        if(x)
          {
          x.src='data:image/jpeg;base64,/*...*/';
          } 
        }() )
  • Protopage : URL-codierte Zeichenfolgen

    unescape('Rolling%20Stone%20%3a%20Rock%20and%20Roll%20Daily')
  • TiddlyWiki : HTML-Entitäten + vorformatiertes JSON

       <pre>
       {&quot;tiddlers&quot;: 
        {
        &quot;GettingStarted&quot;: 
          {
          &quot;title&quot;: &quot;GettingStarted&quot;,
          &quot;text&quot;: &quot;Welcome to TiddlyWiki,
          }
        }
       }
       </pre>
  • Amazon : Faules Laden

    amzn.copilot.jQuery=i;amzn.copilot.jQuery(document).ready(function(){d(b);f(c,function() {amzn.copilot.setup({serviceEndPoint:h.vipUrl,isContinuedSession:true})})})},f=function(i,h){var j=document.createElement("script");j.type="text/javascript";j.src=i;j.async=true;j.onload=h;a.appendChild(j)},d=function(h){var i=document.createElement("link");i.type="text/css";i.rel="stylesheet";i.href=h;a.appendChild(i)}})();
    amzn.copilot.checkCoPilotSession({jsUrl : 'http://z-ecx.images-amazon.com/images/G/01/browser-scripts/cs-copilot-customer-js/cs-copilot-customer-js-min-1875890922._V1_.js', cssUrl : 'http://z-ecx.images-amazon.com/images/G/01/browser-scripts/cs-copilot-customer-css/cs-copilot-customer-css-min-2367001420._V1_.css', vipUrl : 'https://copilot.amazon.com'
  • XMLCalabash : Namespaced XML + Benutzerdefinierter MIME-Typ + Benutzerdefinierte Dateierweiterung

       <p:declare-step type="pxp:zip">
            <p:input port="source" sequence="true" primary="true"/>
            <p:input port="manifest"/>
            <p:output port="result"/>
            <p:option name="href" required="true" cx:type="xsd:anyURI"/>
            <p:option name="compression-method" cx:type="stored|deflated"/>
            <p:option name="compression-level" cx:type="smallest|fastest|default|huffman|none"/>
            <p:option name="command" select="'update'" cx:type="update|freshen|create|delete"/>
       </p:declare-step>

Wenn Sie die Quelle in einem der oben genannten Bereiche anzeigen, werden beim Scraping lediglich Metadaten und Navigation zurückgegeben.

Paul Sweatte
quelle
Also ... dieser Ansatz macht das Scraping noch einfacher, da der Inhalt jetzt in einem einheitlichen Format vorliegt. Tatsächlich würde es nicht mehr als Scraping bezeichnet werden: Es wird als Parsing bezeichnet und ist wirklich sehr einfach, programmgesteuert durchzuführen.
Jpaugh
1

Die meisten wurden bereits gesagt, aber haben Sie den CloudFlare-Schutz in Betracht gezogen? Ich meine das:

Bildbeschreibung

Wahrscheinlich tun dies auch andere Unternehmen. CloudFlare ist das einzige, das ich kenne.

Ich bin mir ziemlich sicher, dass dies ihre Arbeit erschweren würde. Ich habe auch einmal IP für 4 Monate automatisch gesperrt bekommen, als ich versucht habe, Daten einer Site, die durch CloudFlare geschützt ist, aufgrund eines Ratenlimits zu verschrotten (ich habe eine einfache AJAX-Anforderungsschleife verwendet).

Tomáš Zato - Monica wieder einsetzen
quelle
1

Ich stimme den meisten der oben genannten Beiträge zu und möchte hinzufügen, dass Ihre Website umso kratzfester ist, je suchmaschinenfreundlicher Ihre Website ist. Sie könnten versuchen, ein paar Dinge zu tun, die es für Schaber sehr schwierig machen, aber es könnte auch Ihre Suchfähigkeit beeinträchtigen ... Es hängt natürlich davon ab, wie gut Ihre Website in Suchmaschinen rangieren soll.

sjobe
quelle
0

Wenn Sie Ihre Inhalte hinter ein Captcha stellen, fällt es Robotern schwer, auf Ihre Inhalte zuzugreifen. Menschen wären jedoch unangenehm, so dass dies unerwünscht sein könnte.

SorcyCat
quelle
0

Wenn Sie ein gutes Beispiel sehen möchten, besuchen Sie http://www.bkstr.com/ . Sie verwenden einen Aj / S-Algorithmus, um ein Cookie zu setzen, und laden dann die Seite neu, damit das Cookie verwendet werden kann, um zu überprüfen, ob die Anforderung in einem Browser ausgeführt wird. Eine Desktop-App, die zum Scrapen entwickelt wurde, könnte dies definitiv erreichen, aber sie würde das Scraping der meisten CURL-Typen stoppen.

blacktie24
quelle
0

Bildschirmschaber verarbeiten HTML. Und wenn sie entschlossen sind, Ihre Daten zu erhalten, können Sie technisch nicht viel tun, da der menschliche Augapfel alles verarbeitet. Rechtlich wurde bereits darauf hingewiesen, dass Sie möglicherweise Rückgriff haben, und das wäre meine Empfehlung.

Sie können den kritischen Teil Ihrer Daten jedoch mithilfe einer nicht HTML-basierten Präsentationslogik ausblenden

  • Generieren Sie eine Flash- Datei für jeden Künstler / jedes Album usw.
  • Generieren Sie ein Bild für jeden Künstlerinhalt. Vielleicht würde nur ein Bild für den Künstlernamen usw. ausreichen. Rendern Sie dazu den Text in eine JPEG / PNG- Datei auf dem Server und verknüpfen Sie ihn mit diesem Bild.

Denken Sie daran, dass dies wahrscheinlich Ihre Suchrankings beeinflussen würde.

James Westgate
quelle
0

Generieren Sie HTML, CSS und JavaScript. Es ist einfacher, Generatoren als Parser zu schreiben, sodass Sie jede bereitgestellte Seite anders generieren können. Sie können dann keinen Cache oder statischen Inhalt mehr verwenden.

Stephan Eggermont
quelle