it-swarm.dev

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

Ich werde einige Funktionen entwickeln, die verschiedene öffentliche Websites crawlen und die Daten auf ihnen verarbeiten/aggregieren. Nichts ist so unheimlich wie die Suche nach E-Mail-Adressen - tatsächlich kann dies zu zusätzlichem Datenverkehr auf ihren Websites führen. Aber ich schweife ab.

Abgesehen von der Einhaltung von robots.txt Gibt es schriftliche oder ungeschriebene Regeln oder Richtlinien, die ich befolgen sollte, um (a) zu vermeiden, böswillig zu erscheinen und möglicherweise verboten zu werden, und (b) keine Probleme zu verursachen die Websitebesitzer/Webmaster?

Einige Beispiele, die mir einfallen, können von Bedeutung sein oder auch nicht:

  • Anzahl paralleler Anfragen
  • Zeit zwischen Anfragen
  • Zeit zwischen ganzen Crawls
  • Vermeiden potenziell zerstörerischer Verbindungen (möchte nicht die Spider of Doom sein - aber wer weiß, ob dies überhaupt praktikabel ist)

Das ist aber wirklich nur Spucknapf; Gibt es bewährte Weisheiten, die allgemein für jeden gelten, der beabsichtigt, eine Spinne zu schreiben oder zu benutzen?

83
Aaronaught

Befolgen Sie neben dem Befolgen von robots.txt auch nofollow und noindex in <meta> - Elementen und Links:

  • Es gibt viele, die glauben, dass robots.txt nicht der richtige Weg ist, um die Indizierung zu blockieren , und aus diesem Grund viele Websitebesitzer angewiesen haben, sich auf die <meta name="robots" content="noindex"> -Tag, um Webcrawler anzuweisen, eine Seite nicht zu indizieren.

  • Wenn Sie versuchen, ein Diagramm der Verbindungen zwischen Websites (ähnlich wie PageRank) zu erstellen, (und <meta name="robots" content="nofollow">) Soll dies darauf hinweisen, dass die Quellwebsite der Zielwebsite nicht genug vertraut, um eine ordnungsgemäße Bestätigung zu geben . 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, weil Sie Dinge getan haben, die andere Websites aufgrund einer Regel, die jemand belauscht oder in einem Blog-Beitrag auf SEOmoz gelesen hat, der möglicherweise richtig interpretiert wurde oder nicht, als vollkommen akzeptabel empfunden haben.

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

  • beenden Sie das Crawlen einer Site, sobald Sie feststellen, dass Sie blockiert sind: 403/401s auf Seiten, von denen Sie wissen, dass sie funktionieren, drosseln, Zeitüberschreitungen usw.
  • vermeiden Sie erschöpfende Crawls in relativ kurzer Zeit: Crawlen Sie einen Teil der Site und kehren Sie später (einige Tage später) zurück, um einen anderen Teil zu crawlen. Stellen Sie keine parallelen Anfragen.
  • vermeiden Sie das Crawlen potenziell sensibler Bereiche: URLs mit /admin/ zum Beispiel.

Selbst dann wird es ein harter Kampf, wenn Sie nicht auf Black-Hat-Techniken wie UA-Spoofing oder absichtliche Maskierung Ihrer Crawling-Muster zurückgreifen: Viele Websitebesitzer blockieren aus den oben genannten Gründen einen unbekannten Crawler auf Sicht, anstatt ihn zu nehmen die Chance, dass jemand nicht versucht, "seine Website zu hacken". Bereiten Sie sich auf viele Fehler vor.

Eine Sache, die Sie tun können, um das negative Image eines unbekannten Crawlers zu bekämpfen, ist, in Ihrer User-Agent-Zeichenfolge deutlich zu machen, 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.html Erklärt, was Sie erreichen wollen und warum Sie keine Bedrohung sind. Diese Seite sollte ein paar Dinge haben:

  • Informationen, wie Sie direkt kontaktiert werden können
  • Informationen darüber, was der Crawler sammelt und warum er es sammelt
  • Informationen zum Deaktivieren und Löschen von Daten

Letzteres ist der Schlüssel: Ein gutes Opt-out ist wie eine Geld-zurück-Garantie ™ und führt zu einem unangemessenen 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: Opt-out bedeutet, dass Sie ausnahmslos aufhören zu crawlen).

85
user8

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

Ähnlich wie bei Brute-Force-Websites, ohne die Aufmerksamkeit auf sich zu ziehen, sollten Sie die nächste Seite der Website erst crawlen, wenn Sie die nächste Seite aller anderen Websites gecrawlt haben, wenn Sie über einen ausreichend großen Pool von Websites verfügen, die Sie crawlen müssen . Nun, moderne Server erlauben Wiederverwendung von HTTP-Verbindungen , daher möchten Sie möglicherweise mehr als eine tun, um den Overhead zu minimieren, aber die Idee bleibt bestehen. Crawlen Sie eine Site nicht bis zur Erschöpfung, bis Sie zur nächsten wechseln . Teile die Liebe.

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

Wenn Sie vermeiden möchten, die Spinne von Doom zu sein, gibt es keine sichere Methode. Wenn jemand Bohnen in die Nase stecken will, wird er dies wahrscheinlich auf eine Weise tun, die Sie niemals vorhersagen könnten. Wenn es Ihnen jedoch nichts ausmacht, die gelegentlich gültige Seite zu verpassen, haben Sie eine schwarze Liste mit Wörtern für einen Link, 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 Menschen auf die harte Tour lernen müssen;)

32
Dan McGrath

Mein einziger Rat ist, zuhören zu hören, was die Website, die Sie crawlen, Ihnen sagt, und Ihr Crawlen als Reaktion darauf dynamisch zu ändern.

  • Ist die Seite langsam? Kriechen Sie langsamer, damit Sie es nicht DDOS. Ist es schnell Dann noch ein bisschen kriechen!

  • Ist die Website fehlerhaft? Kriechen Sie weniger, damit Sie eine Website, die bereits unter Zwang steht, nicht belasten. Verwenden Sie exponentiell zunehmende Wiederholungszeiten, damit Sie 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.

  • Viele 404er bekommen? (Denken Sie daran, dass unsere schicken 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.html ist nicht da, ich wette, Sie Dollar zu Donuts file999.html ist auch nicht! Oder verringern Sie den Prozentsatz der Zeit, in der Sie etwas auf diesem Pfad abrufen.

Ich denke, hier gehen viele naive Crawler zutiefst schief, indem sie eine Roboterstrategie haben, die sie unabhängig von den Signalen, die sie vom Zielort zurückerhalten, gleich ausführen.

Ein intelligenter Crawler ist reaktiv für die Zielsite (n), die er berührt.

20
Jeff Atwood

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-Seiten mit "Verzeichnislisten". Insbesondere können sie nach Größe, Datum, Name, Berechtigungen usw. sortieren. Behandeln Sie nicht jede Sortiermethode als separate Wurzel für das Crawlen.

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

Begrenzen Sie die Tiefe oder erkennen Sie die Rekursion (oder beides).

Begrenzen Sie die Seitengröße. Einige Seiten implementieren Tarpits, um E-Mail-Scrapping-Bots zu verhindern. 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 im Gegenzug wohlverdienten Hass.

Dies mag schwierig sein, aber versuchen Sie, Farmen mit Lastenausgleich zu erkennen. Wenn v329.Host.com/pages/article.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

19
SF.

Ich werde nur eine kleine Sache hinzufügen.

Urheberrecht und andere rechtliche Probleme: Ich weiß, dass Sie schreiben, dass es sich um öffentliche Websites handelt. Daher gibt es möglicherweise kein Urheberrecht, aber möglicherweise andere rechtliche Probleme beim Speichern der Daten.

Dies hängt natürlich davon ab, in welchen Länderdaten Sie speichern (und wo Sie sie speichern). Ein typisches Beispiel sind die Probleme mit dem US Patriot Act gegenüber der EU-Datenschutzrichtlinie. Eine Zusammenfassung des Problems ist, dass US-Unternehmen ihre Daten z. das FBI auf Anfrage, ohne die Benutzer darüber zu informieren, wo die Datenschutzrichtlinie besagt, dass Benutzer darüber informiert werden müssen. Se http://www.itworld.com/government/179977/eu-upset-Microsoft-warning-about-us-access-eu-cloud

4
Holger

Rufen Sie Ihren Webcrawler entweder diesen oder die mit Ihrem Namen verknüpfte Spinne an. Das ist wichtig. Analytics-Engines und dergleichen suchen nach solchen, die Sie als ... Spinne assoziieren. ;)

Ich habe gesehen, dass dies über den Anforderungsheader User-Agent erfolgt

3
jcolebrand
  • Bewahren Sie bei Bedarf Cookies auf, um zu verhindern, dass auf der Website unnötige Sitzungen erstellt werden.
  • Implementieren Sie das Verhalten beim Analysieren von Links, das dem des Browsers am nächsten kommt. Unsere Live-Site meldet viele '404s' aufgrund von Bot-Anfragen nach fehlenden Dateien.
2
Valera Kolupaev