2017-12-07 2 views
-1

Wie kann ich eine .gz Datei ordnungsgemäß herunterladen? Mein Code geht unter:Kann .gz-Datei mit Anfragenmodul nicht herunterladen

import requests 
response = requests.get('https://www.propertyshark.com/sitemap/CA-San-Bernardino-reports_1.xml.gz', headers=headers) 
    print(response.status_code) 
    if response.status_code == 200: 
     print('Downloading...') 
     file_name = 'file.xml.gz' 

Es tut Download gz-Datei, aber es beschädigt ist - nur 1KB in Größe und wenn ich versuche, es .gz.cpgz im Dateinamen fügt zu entpacken.

Antwort

1

Ich habe versucht, Ihren Code ausgeführt und die folgende Fehlerseite erhalten. Sie scheinen kopflose Browser wie Headless Chrom über Selen manipulieren zu müssen. Das Requests-Modul gilt für die auf dieser Fehlerseite genannte Bedingung von Bot.

import requests 

res = requests.get("https://www.propertyshark.com/sitemap/CA-San-Bernardino-reports_1.xml.gz") 
print(res.text) 

enter image description here

2

Die URL, die Sie verwenden, holt Sie nicht die richtige .gz Datei, weil es eine HTML-Seite in Wirklichkeit ist, die die .gz Datei mit JavaScript herunterlädt. Da es eine leere Seite erstellt, sieht es so aus, als wäre es die rohe Datei, die dort gehostet wird, ist aber nicht wirklich so.

Ich verifizierte dies, indem ich die Seite öffne und seine Elemente begutachte. Dies kann leicht der Fall sein, wenn die Site Middleware verwendet, um die .gz-Datei am Frontend zu generieren.

Wenn Sie den Entwickler für die Website erreichen können, können Sie einen benutzerdefinierten Pfad für Sie öffnen. Sonst müssen Sie möglicherweise die URL mit Selen öffnen und dann automatisch herunterladen.

Es wird jetzt als .gz-Datei in Ihrem Code gespeichert, nur weil Sie diesen Namen explizit angeben - file_name = 'file.xml.gz'. FWIW, unter Linux, können Sie Dateien einer Erweiterung problemlos in eine andere umbenennen.

+0

hmm aber wenn das der Fall ist, wenn ich es wird manuell heruntergeladen herunterladen? – Volatil3

+0

@ Volatil3 Sie herunterladen manuell mit Browser, der Browser kann offensichtlich JavaScript ausführen und herunterladen es für Sie. Ein einfacher Test, um zu verstehen, ob Sie ein Asset programmatisch direkt herunterladen können, ist die Verwendung von 'wget ', die in Ihrem Fall eine 405 auslöst. –

+0

@ Volatil3 Hey, konntest du das lösen? –

Verwandte Themen