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 ?
Réponses
Trop de publicités?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.
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()
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())
- Réponses précédentes
- Plus de réponses
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.