2017-03-31 2 views
3

Python 3. Wahrscheinlich urllib verwenden müssen, dies zu tun,urllib: Get Name der Datei aus direkten Download-Link

Ich muss wissen, wie eine Anfrage an einen direkten Download-Link zu senden und bekommen den Namen der Datei versucht es zu speichern.

(Als Beispiel ein KSP mod von CurseForge: https://kerbal.curseforge.com/projects/mechjeb/files/2355387/download)

Natürlich ist die Datei-ID (2355387) geändert wird. Es könnte von jedem Projekt stammen, aber immer auf CurseForge. (Wenn das einen Unterschied auf dem Weg macht wird es heruntergeladen.)

Das Beispiel Link Ergebnisse in der Datei:

Download Screenshot

Wie kann ich wieder, dass Dateinamen in Python?

Edit: Ich sollte beachten, dass ich vermeiden möchte, die Datei zu speichern, den Namen zu lesen, und dann löschen, wenn möglich. Das scheint der schlechteste Weg zu sein.

Antwort

4

Mit urllib.request, wenn Sie eine Antwort von einer URL anfordern, enthält die Antwort einen Verweis auf die URL, die Sie herunterladen.

>>> from urllib.request import urlopen  
>>> url = 'https://kerbal.curseforge.com/projects/mechjeb/files/2355387/download' 
>>> response = urlopen(url) 
>>> response.url 
'https://addons-origin.cursecdn.com/files/2355/387/MechJeb2-2.6.0.0.zip' 

Sie können os.path.basename verwenden, um die Dateinamen zu erhalten:

>>> from os.path import basename 
>>> basename(response.url) 
'MechJeb2-2.6.0.0.zip' 
+0

Thank you! Ich hatte es nicht als eine Weiterleitung gedacht, ich habe alles versucht, was mir einfällt, aber ich hätte nie gedacht, dass es so einfach wäre. – spikespaz

+0

Es scheint mir auch seltsam, dass 'os.path' auf einer URL funktioniert. Ist dies beabsichtigt oder nur ein unbeabsichtigter Vorteil? – spikespaz

+0

Siehe die Antworten zu [** URL-Pfadabschnitte abrufen **] (http://stackoverflow.com/questions/7894384/python-get-url-path-sections). Allgemeiner könnten Sie eine Kombination aus [** 'urlparse' **] (https://docs.python.org/2/library/urlparse.html) und **' posixpath' ** verwenden. –