wake-up-neo.net

Web-Scraping-Etikette

Ich überlege mir, eine einfache Web-Scraping-Anwendung zu schreiben, um Informationen von einer Website zu extrahieren, die dies nicht ausdrücklich zu verbieten scheint. 

Ich habe nach anderen Alternativen (z. B. RSS, Webservice) gesucht, um diese Informationen zu erhalten, aber zu diesem Zeitpunkt sind keine verfügbar.

Trotzdem habe ich auch ein paar Websites selbst entwickelt/gepflegt, und daher ist mir klar, dass das Web-Scraping naiv/gierig die Sache für andere Benutzer verlangsamen kann und im Allgemeinen zu einem Ärgernis wird.

Um welche Etikette geht es also:

  1. Anzahl der Anfragen pro Sekunde/Minute/Stunde.
  2. Inhalt des HTTP-Benutzeragenten.
  3. Inhalt des HTTP Referer.
  4. HTTP-Cache-Einstellungen.
  5. Puffergröße für größere Dateien/Ressourcen.
  6. Legalitäten und Lizenzfragen.
  7. Gute Werkzeuge oder konstruktive Ansätze.
  8. Robots.txt, ist dies für Web Scraping oder nur für Crawler/Spider relevant?
  9. Komprimierung wie GZip in Anforderungen.

Update

Ich habe diese relevante Frage zu Meta gefunden: Etikette von Screen Scaping StackOverflow . Jeff Atwoods Antwort enthält einige hilfreiche Empfehlungen.

Andere verwandte StackOverflow-Fragen:

Optionen für das HTML-Scraping

102
Ash

Entsprechen Sie der Anforderung der Website robot.txt. Dies ist wahrscheinlich eine der besten und ethischsten Methoden, um eine Vereinbarung zu treffen, ohne mit irgendjemandem auf der Website zu sprechen.

Identifizieren Sie sich im UserAgent-Header entsprechend. Auf diese Weise kann die Site sehen, wer Sie sind und bestimmte Bereiche ihrer Site Ihnen explizit einschränken/zulassen. Schauen Sie sich beispielsweise die Benutzeragenten des großen Mannes an, Google ist unten aufgeführt, und erstellen Sie eine ähnliche Seite, auf der eine Seite mit Ihrer Person beschrieben wird und wie Sie Ihre Bots informieren.

Benutzer-Agent-Zeichenfolge von Google: Googlebot/1.0 ([email protected] http://googlebot.com/ )

Verwenden Sie die Komprimierungsfunktion "gzip/deflate", wenn die Site unterstützt. Dies spart Zeit und die Site-Bandbreite.

Sie sollten aus rechtlicher Sicht in Ordnung sein (obwohl ich kein Anwalt oder juristischer Sachverständiger bin), sollten Sie deren robots.txt UND Servicebedingungen befolgen. 

Am Ende denke ich jedoch, dass der beste Rat von runrunraygun war, wenn man bedenkt, dass dies eine einsame Seite ist. Wenn Sie sich mit dem Administrator in Verbindung setzen und sehen, was akzeptabel ist, und wenn Sie deren Wünsche respektieren, kommen Sie weit.

28
Pat

robots.txt ist relevant: Sehen Sie sich das an, um sich ein Bild von der Einstellung der Site zu nicht-menschlichen Lesern zu machen. Wenn Sie sich der Inhalte bewusst sind, können Sie dem Webadmin eine gewisse Sicherheit geben, wenn Sie ihm eine E-Mail senden, dass Sie darauf achten, die Website zu respektieren, wenn Sie die Daten abfragen.

17
Charles Stewart

Ich würde vorschlagen, dem Webmaster eine E-Mail zu senden, ihm mitzuteilen, dass Sie ein nicht böswilliges Skript usw. schreiben, und zu fragen, was und wie oft Sie glücklich sind.

wir betreiben einen Domain-Crawler, der PDF-/Word-Dokumente usw. von befreundeten Domains aufnimmt, und wir haben meistens eine Lücke von 5 Sekunden zwischen Anfragen und nur nachts ausgeführt.

9
gingerbreadboy

Das hängt wirklich davon ab, was du kratzt und wie viel du kratzt. Zum Beispiel musste ich vor etwa einer Woche einen Scraper schreiben, um mehrere hundert Seiten zu crawlen. Um großzügig zu sein, habe ich nach jeder Seite eine Sekunde warten lassen. Ich habe ein paar Minuten gebraucht, um die Daten zurückzubekommen, aber ich bin mir sicher, dass der Eigentümer der Website jede Lücke schätzen würde, die ich dabei hinterlassen kann.

2
Sampson

Für alle, die sich für das Web-Scraping interessieren, empfehle ich dringend, dieses Buch zu lesen (es behandelt auch die Etikette, daher fühlte ich mich für den Beitrag relevant): 

https://github.com/1040003585/WebScrapingWithPython/blob/master/Packt-Web.Scraping.with.Python.Richard%20Lawson.pdf

Wenn Sie aus meiner Erfahrung mit Scraping ständig Anfragen stellen, könnte Ihre IP-Liste möglicherweise auf die schwarze Liste gesetzt werden. Wenn dies der Fall ist, können Sie einen rotierenden Proxy wie storm proxies betrachten. Die Website wird nicht wirklich in der Lage sein zu unterscheiden, wenn Sie scraping/crawlen, so dass robots.txt immer eine gute Idee ist, sich daran zu halten.

Was die Legalität angeht, so habe ich aus dem, was ich gelesen habe, etwas von einer Grauzone gelesen. Wenn Sie als Gast (und nicht als angemeldeter Benutzer) kratzen, werden Sie in der Regel nicht an Bedingungen und Konditionen gebunden, die möglicherweise gegen automatisierte Anfragen verstoßen. 

Folgen Sie robots.txt, und führen Sie Schritte aus, um zu verhindern, dass Ihre IP-Adresse auf die schwarze Liste gesetzt wird, damit Ihr Scraper überlebt.

0
DannyMoshe

Ein Zusatz, den ich gefunden habe, kann einen großen Unterschied in der Anzahl der Anfragen machen: Schauen Sie sich die Struktur der Site an. Wenn die Site dynamisch ist, gibt es wahrscheinlich eine Reihe von Orten, an denen die gewünschten Daten gefunden werden können. Manchmal auf einer Seite. Auf WP enthalten Kategorie- und Archivseiten häufig (bis zu) den gesamten Inhalt von Artikeln an einem Ort. Vielleicht handelt es sich um Edge-Fälle, aber am Ende kratzte ich regelmäßig Daten und habe herausgefunden, dass ein beachtlicher Prozentsatz der Zeit, in der es Abhilfe schafft. 

TLDR; Ein bisschen herumstochern kann manchmal Hunderte von Anfragen einsparen. 

Außerdem hatte ich Webmaster, die mir nur die Informationen senden, die ich suchen möchte. Es wird davon ausgegangen, dass Sie Kontakt aufgenommen haben und dass Sie ungefähr dieselben Ziele verfolgen (als Nicht-Konkurrenten).

0
Merrill Cook

Ich würde auch hinzufügen, dass Python auch eine globale Interpreter-Sperre hat, z. GIL Wenn Sie Daten anfordern, und Geschwindigkeit ist mit dem import multithreading-Modul von wesentlicher Bedeutung, da die Anforderung Zeit in Anspruch nimmt, um abgeschlossen zu werden. Gleichzeitig müssen Sie viele Daten anfordern (große Datenmengen) Summe der Anfragen) Sie werden möglicherweise gebannt und Ihre Verbindung wird blockiert. Es gibt keine Möglichkeit, die Schwelle zu bestimmen, wenn Sie nicht Tests durchführen. 

0
Elvir Muslic