Téléchargement de fichiers http de base et sauvegarde sur disque en python?

je suis nouveau en Python et j'ai parcouru les Q&R sur ce site, pour une réponse à ma question. Cependant, je suis un débutant et je trouve difficile de comprendre certaines des solutions. J'ai besoin d'une solution de base.

Quelqu'un pourrait-il m'expliquer une solution simple pour "télécharger un fichier par http" et "le sauvegarder sur disque, sous Windows"?

Je ne sais pas non plus comment utiliser les modules shutil et os.

le le fichier que je veux télécharger est inférieur à 500 Mo et est un .gz fichier d'archive.Si quelqu'un peut expliquer comment extraire l'archive et d'utiliser les fichiers qu'il contient aussi, ce serait génial!

Voici une solution partielle, que j'ai écrit à partir de diverses réponses combinées:

import requests
import os
import shutil

global dump

def download_file():
    global dump
    url = "http://randomsite.com/file.gz"
    file = requests.get(url, stream=True)
    dump = file.raw

def save_file():
    global dump
    location = os.path.abspath("D:folderfile.gz")
    with open("file.gz", 'wb') as location:
        shutil.copyfileobj(dump, location)
    del dump

Quelqu'un pourrait-il signaler des erreurs (niveau débutant) et expliquer des méthodes plus faciles pour le faire?

Merci!

118
demandé sur arvindch 2013-10-26 08:49:27

7 réponses

une bonne façon de télécharger un fichier est:

import urllib

testfile = urllib.URLopener()
testfile.retrieve("http://randomsite.com/file.gz", "file.gz")

Cela télécharge un fichier à partir d'un site web et noms de file.gz . C'est l'une de mes solutions préférées, de télécharger une image via urllib et python .

cet exemple utilise la bibliothèque urllib , et elle récupérera directement le fichier sous forme de source.

172
répondu Blue Ice 2017-05-23 11:47:32

comme mentionné ici :

import urllib
urllib.urlretrieve ("http://randomsite.com/file.gz", "file.gz")

EDIT: si vous voulez toujours utiliser requests, jetez un oeil à cette question ou celle-ci .

88
répondu dparpyani 2017-05-23 12:02:48

j'utilise wget .

bibliothèque Simple et bonne si vous voulez donner l'exemple?

import wget

file_url = 'http://johndoe.com/download.zip'

file_name = wget.download(file_url)

prise en charge du module wget Python 2 et python 3 versions

29
répondu Ali 2014-09-13 21:38:41

quatre méthodes utilisant wget, urllib et request.

#!/usr/bin/python
import requests
from StringIO import StringIO
from PIL import Image
import profile as profile
import urllib
import wget


url = 'https://tinypng.com/images/social/website.jpg'

def testRequest():
    image_name = 'test1.jpg'
    r = requests.get(url, stream=True)
    with open(image_name, 'wb') as f:
        for chunk in r.iter_content():
            f.write(chunk)

def testRequest2():
    image_name = 'test2.jpg'
    r = requests.get(url)
    i = Image.open(StringIO(r.content))
    i.save(image_name)

def testUrllib():
    image_name = 'test3.jpg'
    testfile = urllib.URLopener()
    testfile.retrieve(url, image_name)

def testwget():
    image_name = 'test4.jpg'
    wget.download(url, image_name)

if __name__ == '__main__':
    profile.run('testRequest()')
    profile.run('testRequest2()')
    profile.run('testUrllib()')
    profile.run('testwget()')

testRequest - 4469882 appels de fonction (4469842 primitive appels) en 20.236 secondes

testRequest2 - 8580 appels de fonction (8574 primitive appels) à 0,072 secondes

testUrllib - 3810 appels de fonction (3775 primitive d'appels) dans de 0,036 secondes

testwget - 3489 des appels de fonction dans de 0,020 secondes

20
répondu Saurabh yadav 2017-07-24 11:21:38

Exotic Windows Solution

import subprocess

subprocess.run("powershell Invoke-WebRequest {} -OutFile {}".format(your_url, filename), shell=True)
2
répondu Brut 2017-11-22 00:50:39

j'ai commencé sur cette voie parce que le wget D'ESXi n'est pas compilé avec SSL et je voulais télécharger un OVA à partir du site d'un vendeur directement sur L'hôte ESXi qui est de l'autre côté du monde.

j'ai dû désactiver le pare-feu (lazy) / activer https en éditant les règles (proper)

a créé le script python:

import ssl
import shutil
import tempfile
import urllib.request
context = ssl._create_unverified_context()

dlurl='https://somesite/path/whatever'
with urllib.request.urlopen(durl, context=context) as response:
    with open("file.ova", 'wb') as tmp_file:
        shutil.copyfileobj(response, tmp_file)

bibliothèques ESXi sont en quelque sorte de pair vers le bas, mais l'installateur Weasel open source a semblé pour utiliser urllib pour https... alors ça m'a inspiré de suivre cette voie

0
répondu Jayme Snyder 2018-06-08 15:17:57

une autre façon propre de sauvegarder le fichier est la suivante:

import csv
import urllib

urllib.retrieve("your url goes here" , "output.csv")
-5
répondu Ala 2017-01-25 15:30:34