Also habe ich eine Liste von Unterredikationen und benutze urllib, um sie zu öffnen. Wenn ich durch sie gehe, scheitert urllib schließlich mit:
%Vor%Bei einigen Nachforschungen habe ich festgestellt, dass reddit die Anzahl der Anfragen auf ihre Server per IP beschränkt:
Machen Sie nicht mehr als eine Anfrage alle zwei Sekunden. Es gibt einige Freiheiten für Anfragen, aber behalten Sie es gesund. Im Allgemeinen halten Sie es nicht mehr als 30 Anfragen pro Minute.
Also dachte ich, ich würde time.sleep()
verwenden, um meine Anfragen alle 10 Sekunden auf eine Seite zu beschränken. Dies endet genauso gut.
Das obige Zitat stammt von der Seite reddit API . Ich benutze nicht die reddit API. An diesem Punkt denke ich zwei Dinge. Entweder gilt dieses Limit nur für die reddit-API oder urlib hat auch eine Beschränkung.
Weiß jemand, welches dieser beiden Dinge es ist? Oder wie könnte ich dieses Problem umgehen?
Aus Ссылка :
Viele Standard-Benutzeragenten (wie "Python / urllib" oder "Java") sind drastisch eingeschränkt, um eindeutige und beschreibende User-Agent-Strings zu unterstützen.
Dies gilt auch für reguläre Anfragen. Sie müssen bei der Anforderung einen eigenen User-Agent-Header angeben.
%Vor% Dies wird jedoch eine neue Verbindung für jede Anfrage erstellen. Ich schlage vor, eine andere Bibliothek zu verwenden, die Verbindungen wiederverwenden kann: httplib
oder Anfrage , zum Beispiel. Es wird den Server weniger belasten und die Anfragen beschleunigen:
reddit führt die Ratenbegrenzung auf Anfrage (nicht als vorgeschlagen von Anonymous Coward) für IP-Adressen und Benutzeragenten durch. Das Problem, auf das Sie stoßen, ist, dass jeder, der versucht, mit urllib2 auf reddit zuzugreifen, als einzelner Benutzer rate limitiert ist.
Die Lösung besteht darin, einen Benutzeragenten einzurichten, auf den Sie in diese Frage finden können .
Alternativ können Sie auch Ihren eigenen Code schreiben, um reddit zu crawlen und stattdessen PRAW verwenden . Es unterstützt fast alle Funktionen von reddit's API und Sie müssen sich nicht darum kümmern, irgendwelche API-Regeln zu befolgen, da dies für Sie erledigt wird.