Ich betreibe eine Website für einen Kunden, wo sie eine große Datenbank mit Informationen anzeigen, die sie im Laufe der Jahre genau und langsam gesammelt haben. Sie finden ihre Daten an verschiedenen Stellen im Internet. Mehr als wahrscheinlich, weil ein Scraper ihre Seite Seite für Seite durchsucht und die benötigten Informationen in eine eigene Datenbank extrahiert. Und falls Sie sich fragen, wissen sie, dass es ihre Daten sind, weil in jeder Kategorie auf ihrer Website ein einziges Datenelement vorhanden ist.
Ich habe in den letzten Tagen viel recherchiert, und ich kann Ihnen sagen, dass es keine perfekte Lösung gibt. Ich habe einige Dinge gefunden, die ich tun kann, um das für sie etwas schwieriger zu machen. Dies habe ich für den Kunden implementiert.
Ajaxified paginierte Daten
Wenn Sie viele paginierte Daten haben und Ihre Daten paginieren, indem Sie einfach eine andere Nummer an das Ende Ihrer URL anhängen, z. B. http://www.domain.com/category/programming/2 - Dann machen Sie die Arbeit des Crawlers viel einfacher. Das erste Problem ist, dass es sich in einem leicht erkennbaren Muster befindet, so dass es leicht ist, auf diesen Seiten einen Kratzer frei zu legen. Das zweite Problem, unabhängig von der URL der nachfolgenden Seiten in der Kategorie, würde höchstwahrscheinlich eine nächste und vorherige Verbindung sein, an die sie sich anlocken könnten.
Durch das Laden der paginierten Daten über JavaScript ohne Seiten-Reload wird der Job für viele Scraper auf dem Markt erheblich erschwert. Google hat erst vor kurzem selbst begonnen, Javascript auf der Seite zu analysieren. Es hat wenig Nachteil, die Daten so neu zu laden. Sie stellen ein paar weniger Seiten bereit, die Google indizieren kann, aber technisch gesehen sollten paginierte Daten alle über die Kanonisierung auf die Stammkategorieseite verweisen. Ajaxifizieren Sie Ihre ausgelagerten Datenseiten.
Randomize Vorlagenausgabe
Scraper werden oft speziell für Ihre Daten angepasst. Sie werden sich an eine bestimmte div-ID oder Klasse für den Titel, die dritte Zelle in jeder Zeile für Ihre Beschreibung usw. anhängen. Es gibt ein leicht identifizierbares Muster für die meisten Scraper, mit dem die meisten Daten arbeiten, die aus derselben Tabelle kommen. wird von der gleichen Vorlage angezeigt. Sortieren Sie Ihre Div-IDs und Klassennamen zufällig, fügen Sie leere Tabellenspalten mit der Breite 0 ein. Zeigen Sie Ihre Daten in einer Tabelle auf einer Seite, in formatierten divs und einer Kombination in einer anderen Vorlage. Indem Sie Ihre Daten vorhersagbar darstellen, können sie vorhersagbar und genau abgekratzt werden.
Honigtopf
Das ist ziemlich einfach in seiner Einfachheit. Ich bin auf mehreren Seiten auf diese Methode gestoßen, um das Scraping von Websites zu verhindern.
- Erstellen Sie eine neue Datei auf Ihrem Server namens gotcha.html.
- Fügen Sie in Ihrer robots.txt-Datei Folgendes hinzu:
User-Agent: *
Disallow: /gotcha.html
Dies teilt allen Robotern und Spidern mit, die Ihre Site indexieren, um die Datei gotcha.html nicht zu indexieren. Jeder normale Web-Crawler respektiert die Wünsche Ihrer robots.txt-Datei und greift nicht auf diese Datei zu. dh Google und Bing. Sie können diesen Schritt tatsächlich implementieren und 24 Stunden warten, bevor Sie mit dem nächsten Schritt fortfahren. Dadurch wird sichergestellt, dass ein Crawler nicht versehentlich von Ihnen blockiert wird, da er bereits in der Mitte der Crawlersuche war, als Sie Ihre robots.txt-Datei aktualisiert haben. - Platzieren Sie einen Link zu Gotcha.html irgendwo auf Ihrer Website. Egal wo. Ich würde empfehlen, in der Fußzeile, stellen Sie jedoch sicher, dass dieser Link nicht sichtbar ist, in CSS, display: none;
- Protokollieren Sie nun die IP / allgemeinen Informationen der Täter, die diese Seite besucht haben und blockieren Sie diese. Alternativ könnten Sie ein Skript erstellen, um ihnen falsche und fehlerhafte Daten zur Verfügung zu stellen. Oder vielleicht eine nette persönliche Nachricht von Ihnen an sie.
Regelmäßige Web-Viewer können den Link nicht sehen, sodass er nicht versehentlich angeklickt wird. Seriöse Crawler (Google zum Beispiel) respektieren die Wünsche Ihrer robots.txt und besuchen die Datei nicht. Also, die einzigen Computer, die über diese Seite stolpern sollten, sind diejenigen mit böswilligen Absichten oder jemand, der sich Ihren Quellcode anschaut und wahllos herumklickt (und gut, wenn das passiert).
Es gibt ein paar Gründe, warum dies nicht immer funktioniert. Erstens funktionieren viele Scraper nicht wie normale Web-Crawler und entdecken nicht nur die Daten, indem sie jedem Link von jeder Seite Ihrer Site folgen. Schaber sind oft gebaut, um bestimmte Seiten zu fixieren und nur bestimmten Strukturen zu folgen. Zum Beispiel könnte ein Scraper auf einer Kategorieseite gestartet werden und dann nur dazu aufgefordert werden, URLs mit dem Wort / Daten im Slug zu besuchen. Zweitens, wenn jemand seinen Scraper im selben Netzwerk wie andere ausführt und eine gemeinsame IP verwendet wird, haben Sie das gesamte Netzwerk gesperrt. Sie müssten eine sehr beliebte Website in der Tat haben, damit dies ein Problem ist.
Schreibe Daten in Bilder im laufenden Betrieb
Suchen Sie ein kleineres Datenfeld, nicht unbedingt lange Textzeichenfolgen, da dies das Aussehen der Seite etwas erschweren kann. Geben Sie diese Daten innerhalb eines Bildes aus, ich bin ziemlich sicher, dass es Methoden in fast jeder Programmiersprache gibt, um Text dynamisch in ein Bild zu schreiben (in php, imagettftext). Dies ist wahrscheinlich am effektivsten mit numerischen Werten, da Zahlen einen viel unbedeutenderen SEO-Vorteil bieten.
Alternative
Dies war für dieses Projekt keine Option. Erfordert eine Anmeldung nach einer bestimmten Anzahl von Seitenaufrufen oder die Anzeige einer begrenzten Anzahl von Daten ohne angemeldet zu sein, dh wenn Sie 10 Spalten haben, zeigen Sie nur 5 für nicht angemeldete Benutzer an.
Mach diesen Fehler nicht
Versuchen Sie nicht, eine Lösung zu finden, die auf dem User-Agent des Bot basiert. Diese Information kann leicht durch einen Schaber verfälscht werden, der weiß, was sie tun. Der Google Bot kann zum Beispiel problemlos emuliert werden. Sie möchten Google wahrscheinlich nicht verbieten.