Wie kann man beim Crawlen von Websites ein guter Bürger sein?


83

Ich werde einige Funktionen entwickeln, die verschiedene öffentliche Websites crawlen und die darauf enthaltenen Daten verarbeiten / aggregieren. Nichts ist so unheimlich wie das Suchen nach E-Mail-Adressen - in der Tat ist es etwas, das zusätzlichen Datenverkehr auf ihre Websites lenken könnte. Aber ich schweife ab.

Gibt es robots.txt, abgesehen von der Ehrung , irgendwelche Regeln oder Richtlinien, die ich befolgen sollte, um (a) zu vermeiden, böswillig zu wirken und möglicherweise gesperrt zu werden, und (b) den Websitebesitzern / Webmastern keine Probleme zu bereiten?

Einige Beispiele, an die ich denken kann, mögen wichtig sein oder auch nicht:

  • Anzahl paralleler Anfragen
  • Zeit zwischen Anfragen
  • Zeit zwischen ganzen Crawls
  • Vermeiden potenziell destruktiver Verbindungen (ich möchte nicht die Spinne des Schicksals sein - aber wer weiß, ob dies überhaupt praktikabel ist)

Das ist aber wirklich nur Spucken. Gibt es eine erprobte Weisheit, die auf jeden anwendbar ist, der beabsichtigt, eine Spinne zu schreiben oder zu benutzen?


1
Die folgenden Antworten geben Ihnen zwar eine gute Antwort auf das respektvolle Crawlen von Inhalten. Denken Sie jedoch daran, dass Sie diese Inhalte nach dem Crawlen akzeptabel verwenden können. Die vollständige oder teilweise Neuveröffentlichung kann eine Verletzung des Urheberrechts des Eigentümers darstellen.
Gavin Coates

Antworten:


85

Neben robots.txt gehorchen, gehorchen nofollowund noindexin <meta>Elementen und Links:

  • Viele glauben, dass robots.txt nicht der richtige Weg ist, um die Indizierung zu blockieren, und haben aus diesem Grund viele Websitebesitzer angewiesen, sich auf das <meta name="robots" content="noindex">Tag zu verlassen, um Webcrawlern mitzuteilen, dass sie eine Seite nicht indizieren sollen.

  • Wenn Sie versuchen, ein Diagramm der Verbindungen zwischen Websites (ähnlich wie PageRank) zu erstellen, soll (und <meta name="robots" content="nofollow">) bedeuten, dass die Quellwebsite der Zielwebsite nicht genug vertraut, um sie ordnungsgemäß zu unterstützen. Während Sie die Zielsite indizieren können, sollten Sie die Beziehung zwischen den beiden Sites nicht speichern.

SEO ist eher eine Kunst als eine echte Wissenschaft und wird von vielen Menschen praktiziert, die wissen, was sie tun, und von vielen Menschen, die die Executive Summaries von Menschen lesen, die wissen, was sie tun. Sie werden auf Probleme stoßen, bei denen Sie von Websites blockiert werden, wenn Sie Dinge tun, die für andere Websites aufgrund einer Regel, die jemand belauscht oder in einem Blog-Post auf SEOmoz gelesen hat, die möglicherweise richtig interpretiert wird oder nicht.

Aufgrund dieses menschlichen Elements gelten Sie, sofern Sie nicht Google, Microsoft oder Yahoo! sind, als böswillig, sofern nichts anderes nachgewiesen wurde. Sie müssen besonders vorsichtig sein, um so zu handeln, als ob Sie keine Bedrohung für einen Websitebesitzer darstellen, und entsprechend der Vorgehensweise eines potenziell böswilligen (aber hoffentlich harmlosen) Crawlers vorgehen:

  • Stoppen Sie das Crawlen einer Website, sobald Sie feststellen, dass Sie blockiert sind: 403 / 401s auf Seiten, von denen Sie wissen, dass sie funktionieren, Throttling, Timeouts usw.
  • Vermeiden Sie erschöpfende Crawls in relativ kurzen Zeiträumen: Crawlen Sie einen Teil der Site und kehren Sie später (einige Tage später) zurück, um einen anderen Teil zu crawlen. Mach keine parallelen Anfragen.
  • Vermeiden Sie das Crawlen von potenziell sensiblen Bereichen /admin/, z. B. URLs mit darin.

Selbst dann wird es ein harter Kampf, wenn Sie nicht auf Black-Hat-Techniken wie UA-Spoofing oder absichtliches Maskieren Ihrer Crawling-Muster zurückgreifen: Viele Websitebesitzer blockieren aus den oben genannten Gründen einen unbekannten Crawler auf Sicht, anstatt ihn zu übernehmen die Chance, dass es jemanden gibt, der nicht versucht, seine Website zu "hacken". Bereite dich auf eine Menge Fehler vor.

Eine Möglichkeit, das negative Image eines unbekannten Crawlers zu bekämpfen, besteht darin, in Ihrem User-Agent-String zu verdeutlichen, wer Sie sind:

Aarobot Crawler 0.9 created by John Doe. See http://example.com/aarobot.html for more information.

Wo http://example.com/aarobot.htmlerklärt, was Sie erreichen wollen und warum Sie keine Bedrohung sind. Diese Seite sollte ein paar Dinge haben:

  • Informationen zur direkten Kontaktaufnahme
  • Informationen darüber, was der Crawler sammelt und warum er es sammelt
  • Informationen zum Deaktivieren und Löschen von erhobenen Daten

Letzteres ist der Schlüssel: Ein gutes Opt-out ist wie eine Geld-zurück-Garantie ™ und führt zu einem unzumutbaren Goodwill. Es sollte menschlich sein: ein einfacher Schritt (entweder eine E-Mail-Adresse oder im Idealfall ein Formular) und umfassend (es sollte keine "Fallstricke" geben: Deaktivieren bedeutet, dass Sie ausnahmslos aufhören zu crawlen).


18
Riesige +1 für den Vorschlag, eindeutige Informationen in den User-Agent einzufügen. Ich hatte die Aufgabe, Webserver-Protokolle zu durchsuchen, um herauszufinden, wer eine große Site entdeckt hat, und es macht keinen Spaß, herauszufinden, wer alle obskuren Spinnen entdeckt.
Carson63000

4
Es ist durchaus üblich, die URL in das Formular einzutragen (+http://example.com/aarobot.html). Ich weiß nicht, wozu das +Zeichen da ist, aber ich habe es oft gesehen. Web-Sniffer macht das, und viele andere auch.
TRiG

Dies sind großartige Informationen, aber ich bin in einer Sache verwirrt: Sie erwähnen, rel="noindex"dass es sich um ein <a>Attribut handelt, aber die Seite, auf die Sie verlinken, beschreibt es als Teil des Attributs des <meta>Tags content. Ist es beides oder war das ein Tippfehler in der Antwort?
Aaronaught

1
"SEO ist mehr eine Kunst als eine echte Wissenschaft" - nicht wahr. Wenn Sie ein statistischer Programmierer sind, ist SEO weniger eine Kunst als eine mathematische Erkennungsfähigkeit. Mathematikabsolventen mit Programmierkenntnissen oder Programmierer mit Fachkenntnissen in Mathematik sind in der Branche der Webdatenprofilerstellung sehr gefragt.
שישתיא אבישגנת


32

Dies beantwortet zwar nicht alle Ihre Fragen, aber ich glaube, es wird Ihnen und den Websites, die Sie durchsuchen, hilfreich sein.

Ähnlich wie beim Brute Force-Verfahren, bei dem Websites ohne Aufmerksamkeit erzwungen werden. Wenn Sie über einen ausreichenden Pool von Websites verfügen, die Sie crawlen müssen, crawlen Sie die nächste Seite der Website erst, nachdem Sie die nächste Seite aller anderen Websites gecrawlt haben . Nun, moderne Server erlauben die Wiederverwendung von HTTP-Verbindungen. Möglicherweise möchten Sie mehr als einen Server verwenden, um den Overhead zu minimieren, aber die Idee bleibt bestehen. Durchforsten Sie eine Site nicht bis zur Erschöpfung, bis Sie zur nächsten wechseln . Teile die Liebe.

Am Ende eines Tages können Sie noch genauso viele Seiten gecrawlt haben, aber die durchschnittliche Bandbreitennutzung auf einer einzelnen Site ist viel geringer.

Wenn Sie vermeiden möchten, die Spinne des Untergangs zu sein, gibt es keine sichere Methode. Wenn jemand Bohnen in die Nase stecken will, tut er dies wahrscheinlich auf eine Art und Weise, die man niemals vorhersagen könnte. Wenn es Ihnen nichts ausmacht, die gelegentlich gültige Seite zu verpassen, sollten Sie eine schwarze Liste mit Wörtern für einen Link haben, der Sie daran hindert, dieser zu folgen. Zum Beispiel:

  • Löschen
  • Entfernen
  • Aktualisieren
  • Bearbeiten
  • Ändern

Nicht narrensicher, aber manchmal kann man einfach nicht verhindern, dass die Leute auf die harte Tour lernen müssen;)


3
Gute Ratschläge zum "Teilen der Liebe" - hatten das überhaupt nicht in Betracht gezogen, obwohl es natürlich im Nachhinein offensichtlich erscheint.
Aaronaught

Ihre Antwort wird fast perfekt sein, wenn Sie robots.txt erwähnen;)
deadalnix

7
@deadalnix, wird aber robots.txtschon in der Frage erwähnt und kann als angenommen angesehen werden.
TRiG

20

Mein einziger Rat ist, zuzuhören , was die Website, die Sie crawlen, Ihnen sagt, und als Reaktion darauf Ihren Crawl dynamisch zu ändern.

  • Ist die Seite langsam? Kriechen Sie langsamer, damit Sie DDOS nicht ausführen. Ist es schnell Dann krieche ein bisschen mehr!

  • Ist die Site fehlerhaft? Kriechen Sie weniger, damit Sie eine Website, die bereits unter Druck steht, nicht unnötig belasten. Verwenden Sie exponentiell zunehmende Wiederholungszeiten, damit Sie es weniger wiederholen, je länger die Site fehlerhaft ist. Denken Sie jedoch daran, es später noch einmal zu versuchen, damit Sie alles sehen können, was Sie beispielsweise aufgrund eines einwöchigen Fehlers in einem bestimmten URL-Pfad vermissen.

  • Immer viele 404s? (Denken Sie daran, dass unsere fantastischen 404-Seiten auch Serverzeit in Anspruch nehmen!) Vermeiden Sie es, vorerst weitere URLs mit diesem Pfad zu crawlen, da möglicherweise alles fehlt. Wenn file001.html- file005.htmlist nicht da, ich wette, Sie Dollar zu Donuts file999.htmlist es auch nicht! Oder reduzieren Sie den Prozentsatz der Zeit, in der Sie etwas auf diesem Pfad abrufen.

Ich denke, das ist der Punkt, an dem viele naive Crawler völlig daneben gehen, indem sie eine Robotikstrategie verfolgen, die sie unabhängig von den Signalen, die sie vom Zielstandort zurückerhalten, gleich ausführen.

Ein intelligenter Crawler reagiert auf die Zielwebsites , die er berührt.


19

Andere erwähnten einige der Mantras, aber lassen Sie mich einige hinzufügen.

Achten Sie auf Dateityp und -größe. Ziehen Sie nicht diese riesigen Binärdateien.

Optimieren Sie für einige typische Webserver "Verzeichnislisten" -Seiten. Insbesondere können Sie nach Größe, Datum, Name, Berechtigungen usw. sortieren. Behandeln Sie nicht jede Sortiermethode als separaten Stamm für das Crawlen.

Fragen Sie nach gzip (Komprimierung im laufenden Betrieb), sofern verfügbar.

Tiefe begrenzen oder Rekursion erkennen (oder beides).

Seitengröße begrenzen. Einige Seiten implementieren Tarpits, um E-Mail-Scrapping-Bots zu vereiteln. Es ist eine Seite, die mit Schneckengeschwindigkeit geladen wird und Terabyte lang ist.

Indizieren Sie keine 404-Seiten. Motoren mit den größten Indizes tun dies und erhalten dafür den wohlverdienten Hass.

Dies kann schwierig sein, aber versuchen Sie, Lastausgleichsfarmen zu erkennen. Wenn v329.host.com/pages/icle.php?99999 dasselbe wie v132.host.com/pages/article.php?99999 zurückgibt, kratzen Sie nicht die vollständige Liste der Server von v001.host.com bis v999. host.com


Wichtige Eckfälle!
M. Dudley

Heutzutage können Sie häufig absichtlich doppelte Inhalte erkennen (z. B. Lastausgleichsfarmen), indem Sie nach kanonischen Tags suchen.
Brian

4

Ich werde nur eine kleine Sache hinzufügen.

Urheberrecht und andere rechtliche Aspekte: Ich weiß, dass Sie schreiben, dass es sich um öffentliche Websites handelt, sodass möglicherweise kein Urheberrecht besteht, die Speicherung der Daten jedoch möglicherweise andere rechtliche Aspekte aufweist.

Dies hängt natürlich davon ab, in welchem ​​Land Sie Daten speichern (und wo Sie sie speichern). Ein typisches Beispiel sind die Probleme mit dem US Patriot Act im Vergleich zur EU-Datenschutzrichtlinie. Eine Zusammenfassung des Problems ist, dass US-Unternehmen ihre Daten z. das FBI, wenn es darum gebeten wird, ohne die Benutzer darüber zu informieren, wenn die Datenschutzrichtlinie vorsieht, dass die Benutzer darüber informiert werden müssen. Siehe http://www.itworld.com/government/179977/eu-upset-microsoft-warning-about-us-access-eu-cloud


2
"Ich weiß, dass Sie schreiben, dass es sich um öffentliche Websites handelt, daher gibt es möglicherweise kein Urheberrecht." Jede Website im Internet ist öffentlich und jede Website ist urheberrechtlich geschützt, sofern nicht ausdrücklich anders angegeben.
Gavin Coates

3

Nennen Sie Ihren Webcrawler entweder das oder die Spinne, die Ihrem Namen zugeordnet ist. Das ist wichtig. Analytics-Engines und dergleichen suchen nach solchen, die Sie als ... Spinne identifizieren können. ;)

Wie ich gesehen habe, geschieht dies über den Anforderungsheader User-Agent


Ich dachte, es wäre normalerweise ein "Bot" oder "Roboter" - ich weiß, dass Google Googlebot ist.
Aaronaught

Guter Punkt. Solange es unterschieden werden kann. Es gibt wahrscheinlich einen Beitrag über SO, in dem diese Themen behandelt werden.
Jcolebrand

2
  • Bewahren Sie Cookies bei Bedarf auf, um zu verhindern, dass die Website unnötige Sitzungen erstellt.
  • Implementieren Sie ein Link-Parsing-Verhalten, das dem des Browsers am nächsten kommt. Unsere Live-Site meldet eine Menge '404s', weil Bot-Anfragen nach fehlenden Dateien vorliegen.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.