2016-07-21 12 views
1

Ich möchte eine Datei von einer Webseite herunterladen. Diese Webseite hat nur eine ZIP-Datei (das möchte ich herunterladen), aber wenn ich auf die ZIP-Datei klicke, startet der Download, aber die URL ändert sich nicht (die URL bleibt immer noch im Formular http://ldn2800:8080/id=2800). Wie kann ich das mit Python herunterladen, wenn man bedenkt, dass es keine URL des Formulars http://example.com/1.zip gibt?Wie Datei mit Python herunterladen, wenn URL nicht geändert wird

Wenn ich direkt auf die Seite http://ldn2800:8080/id=2800 gehe, wird nur diese Seite mit der ZIP-Datei geöffnet, aber nicht ohne Klicken heruntergeladen. Wie lade ich es mit Python herunter?

UPDATE: Im Moment mache ich es so:

if (str(dict.get('id')) == winID): 
      #or str(dict.get('id')) == linuxID): 
      #if str(dict.get('number')) == buildNo: 
      buildTypeId = dict.get('id') 
      ID = dict.get('id') 
      downloadURL = "http://example:8080/viewType.html?buildId=26009&tab=artifacts&buildTypeId=" + ID 
      directory = BindingsDest + "\\" + buildNo 
      if not os.path.exists(directory): 
       os.makedirs(directory) 

      fileName = None 
      if buildTypeId == linuxID: 
       fileName = linuxLib + "-" + buildNo + ".zip" 
      elif buildTypeId == winID: 
       fileName = winLib + "-" + buildNo + ".zip" 

      if fileName is not None: 
       print(dict) 
       downloadFile(downloadURL, directory, fileName) 

def downloadFile(downloadURL, directory, fileName, user=user, password=password): 
    if user is not None and password is not None: 
     request = requests.get(downloadURL, stream=True, auth=(user, password)) 
    else: 
     request = requests.get(downloadURL, stream=True) 

    with open(directory + "\\" + fileName, 'wb') as handle: 
     for block in request.iter_content(1024): 
      if not block: 
       break 
      handle.write(block) 

Aber, es schafft nur eine Zip in der gewünschten Position, aber das zip nicht geöffnet und hat nichts werden kann. Kann so etwas getan werden: Suchen Sie zum Beispiel nach dem Dateinamen auf der Webseite und laden Sie dann das passende Muster herunter?

+0

Dies sollte Ihnen helfen: http://stackoverflow.com/questions/11002014/downloading-file-with-python-mechanize – bernie

+0

Haben Sie versucht, die Anfrage mit Python auszuführen? Was geschieht? –

+0

@MarcoAcierno Ich habe meine Frage aktualisiert und zeige, was ich gerade mache. – Arshad

Antwort

1

Überprüfen Sie den HTTP-Statuscode, um sicherzustellen, dass kein Fehler aufgetreten ist. Sie können die eingebaute Methode raise_for_status, dies zu tun verwenden: https://requests.readthedocs.io/en/master/api/#requests.Response.raise_for_status

def downloadFile(downloadURL, directory, fileName, user=user, password=password): 
    if user is not None and password is not None: 
     request = requests.get(downloadURL, stream=True, auth=(user, password)) 
    else: 
     request = requests.get(downloadURL, stream=True) 

    request.raise_for_status() 

    with open(directory + "\\" + fileName, 'wb') as handle: 
     for block in request.iter_content(1024): 
      if not block: 
       break 
      handle.write(block) 

Sind Sie sicher, dass es kein Netzwerkproblem ist wie Proxy/fw/etc?

EDIT: nach Ihrem obigen Kommentar bin ich nicht sicher, dass dies Ihr tatsächliches Problem beantwortet. Überarbeitete Antwort:

Sie greifen auf eine Webseite zu, die einen Link zu einer Zip-Datei enthält. Dieser Link, sagen Sie, ist derselbe wie die Seite selbst. Wenn Sie jedoch in einem Browser darauf klicken, wird die Datei heruntergeladen, statt die HTML-Seite erneut zu erreichen. Das ist komisch aber kann auf verschiedene Arten erklärt werden. Bitte kopieren Sie den gesamten HTML-Seitencode (einschließlich des Links zur Zip-Datei) und fügen Sie ihn ein. Das wird uns wahrscheinlich helfen, das Problem zu verstehen.

+0

Kein Fehler ist passiert. Es ist ein Unternehmensnetzwerk. Könnte das der Fall sein? – Arshad

+0

Das Firmennetzwerk wird wahrscheinlich einen obligatorischen Proxy haben, um ins Internet zu gelangen. Wird Ihre Ziel-Website im Unternehmensnetzwerk oder außerhalb gehostet? – Guillaume

+0

Es ist im Unternehmensnetzwerk gehostet. – Arshad