2017-10-17 3 views
0

Ich arbeite mit einem Python-Skript, das eine Datei von URL herunterladen muss, die eine PHP-Abfrage ausgeführt wird:Datei herunterladen von PHP Abfrage kopflos

url = "https://blah.com//file.php?file=FileName&params=query=SomeQuery" 

In einem aktuellen Browser angegeben, dass Sie die angemeldet sind in Website, die zu dieser URL führt, initiiert einen Download für die Datei (.csv).

Wie kann ich diese Datei über mein Skript herunterladen, mit requests? Etwas wie:

import requests 

s = requests.Session() # we log in using this session elsewhere so authentication shouldn't be a problem 
response = s.get(url) 

with open("my_file.csv", "w") as f: 
    write(response.data, f) # pseudo code 

Ich kann nicht scheinen, den Download zu initiieren. Muss ich sehen, welche Header ich übergeben muss?

+0

Können Sie das Python-Skript in der Befehlszeile ausführen - und lädt es die Datei wie erwartet herunter? –

+0

Ich mache das schon, und es funktioniert nicht. Ich muss das "Anfragen" -Modul dazu bringen, die Datei korrekt zu "holen". Ich erwarte entweder ein 'JSON'-Format oder etwas anderes ... – Petar

+0

bei einer Vermutung, dass die Website aus dem Weg geht, um das Verhalten zu verhindern, das Sie versuchen (wahrscheinlich Javascript-Zeug verwendend) ... ohne genau zu wissen, welche Website Sie sind Es ist unwahrscheinlich, dass Sie weitere Hilfe bekommen (und selbst wenn wir genau wissen, welche Webseite Sie von diesem Verhalten herunterladen möchten). –

Antwort

1

Diese (leichte Änderung Ihres Codes) scheint gut zu funktionieren.

import requests 
url = "https://www.stackoverflow.com" 
s = requests.Session() 
response = s.get(url) 

with open("my_file.csv", "w") as f: 
    f.write(response.content) 
    f.close() 
+0

Das unterscheidet sich von meinem Fall, da meine URL eine PHP-Abfrage enthält. – Petar

+0

Es sollte nicht wirklich etwas ausmachen, was es holt. Es kann jedoch sein, dass die Antwort je nach Benutzer-Agent unterschiedlich ist - zum Beispiel die Rückgabe einer 302-Weiterleitung. Was bekommst du wenn du rennst (von der Kommandozeile) wget -S [deine Seite und php URL] Siehst du eine Weiterleitung? –

+0

'response.content' funktioniert, danke. – Petar

Verwandte Themen