106 votes

Télécharger le fichier Zip retourné depuis l'URL

Si j'ai une URL qui, lorsqu'elle est soumise dans un navigateur web, fait apparaître une boîte de dialogue permettant d'enregistrer un fichier zip, comment puis-je attraper et télécharger ce fichier zip en Python ?

1 votes

J'ai essayé la section Télécharger un fichier binaire et l'écrire sur le disque de cette page qui a fonctionné comme un chram.

5voto

swateek Points 1334

Je suis venu ici en cherchant comment enregistrer un fichier .bzip2. Je vais coller le code pour d'autres personnes qui pourraient être à la recherche de cette méthode.

url = "http://api.mywebsite.com"
filename = "swateek.tar.gz"

response = requests.get(url, headers=headers, auth=('myusername', 'mypassword'), timeout=50)
if response.status_code == 200:
with open(filename, 'wb') as f:
   f.write(response.content)

Je voulais juste enregistrer le fichier tel quel.

3voto

hindamosh Points 19

Merci à @yoavram pour la solution ci-dessus, mon chemin d'accès à l'url était lié à un fichier zippé dossier et je rencontre une erreur de BADZipfile (le fichier n'est pas un fichier zip), et c'était étrange si j'ai essayé plusieurs fois il récupérer l'url et le décompresser tout d'un coup, j'ai donc modifié un peu la solution. un peu. En utilisant le est_zipfile selon la méthode ici

r = requests.get(url, stream =True)
check = zipfile.is_zipfile(io.BytesIO(r.content))
while not check:
    r = requests.get(url, stream =True)
    check = zipfile.is_zipfile(io.BytesIO(r.content))
else:
    z = zipfile.ZipFile(io.BytesIO(r.content))
    z.extractall()

1voto

Theo F Points 191

Solution super légère pour enregistrer un fichier .zip à un emplacement sur le disque (avec Python 3.9) :

import requests

url = r'https://linktofile'
output = r'C:\pathtofolder\downloaded_file.zip'

r = requests.get(url)
with open(output, 'wb') as f:
    f.write(r.content)

0voto

Guru Bhandari Points 49

Utilisez requests, zipfile and io paquets python.

La fonction BytesIO est spécialement utilisée pour garder le fichier décompressé en mémoire plutôt que de l'enregistrer sur le disque.

import requests
from zipfile import ZipFile
from io import BytesIO

r = requests.get(zip_file_url)
z = ZipFile(BytesIO(r.content))    
file = z.extract(a_file_to_extract, path_to_save)
with open(file) as f:
    print(f.read())

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X