Frage

Ich hatte Probleme mit einem Skript, das ich entwickle, wobei ich keine Ausgabe erhalte und die Speichernutzung des Skripts mit der Zeit immer größer wird.Ich habe herausgefunden, dass das Problem bei einigen der URLs liegt, die ich mit der Requests-Bibliothek überprüfe.Ich erwarte, eine Webseite herunterzuladen, lade jedoch stattdessen eine große Datei herunter.Alle diese Daten werden dann im Speicher gespeichert, was zu meinen Problemen führt.

Was ich wissen möchte ist;Gibt es eine Möglichkeit mit der Anforderungsbibliothek zu überprüfen, was heruntergeladen wird?Mit wget kann ich sehen:Länge:710330974 (677M) [application/zip].

Sind diese Informationen in den Kopfzeilen der Anfragen verfügbar?Wenn ja, gibt es eine Möglichkeit, den Download abzubrechen, wenn festgestellt wird, dass es sich nicht um eine HTML-Webseite handelt?

Dank im Voraus.

War es hilfreich?

Lösung

Ja, die Kopfzeilen können Ihnen viel über die Seite verraten, am meisten Seiten enthalten einen Content-Length-Header.

Standardmäßig wird die Anfrage jedoch vor dem vollständig heruntergeladen .get() oder .post(), usw.Anruf geht zurück.Stellen Sie die ein stream=True Schlüsselwort, um das Laden der Antwort zu verzögern:

response = requests.get(url, stream=True)

Jetzt können Sie die Header überprüfen und die Anfrage einfach verwerfen, wenn Ihnen das, was Sie finden, nicht gefällt:

length = int(response.headers.get('Content-Length', 0))
if length > 1048576:
    print 'Response larger than 1MB, discarding

Anschließend Zugriff auf die .content oder .text Attribute oder die .json() Die Methode löst einen vollständigen Download der Antwort aus.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top