IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Download de fichiers binaires en http


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Inscrit en
    Novembre 2008
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 425
    Par défaut Download de fichiers binaires en http
    Bonjour,
    Je cherche à télécharger automatiquement des fichiers zips à partir d'un site
    Naïvement, pour commencer, j'ai fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        def download_file(self, file_url):
            filename = file_url.split("/")[-1]
            local_filename=os.path.join(prm.zipTempDir, filename)
            of = open(local_filename,"w")
            file_to_save = urllib2.urlopen(file_url)
            of.write(file_to_save.read())
            of.close()
    Et ça ne marche pas.
    Je n'ai pas vu comment passer l'information que le fichier est binaire
    Quelqu'un pourrait-il m'aider ?
    Merci

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Par défaut
    Salut,

    Personnellement, j'ai déjà fait ce genre de manip sans aucun problem ni sans avoir quoi que ce soit à préciser.

    Peux-tu donner un exemple réel avec une vraie url et ce qui ne marche pas ?

    Sur quel système d'exploitation es-tu ? Si sous windows ou mac peut-être faut-il utiliser l'option 'wb' pour l'ouverture.

    Sinon la méthode Browser.retrieve() du module mechanize fait le boulot et doit en plus gérer les buffers pour les gros fichiers...

  3. #3
    Membre éclairé

    Inscrit en
    Novembre 2008
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 425
    Par défaut
    Citation Envoyé par Alexis.M Voir le message
    Salut,

    Personnellement, j'ai déjà fait ce genre de manip sans aucun problem ni sans avoir quoi que ce soit à préciser.

    Peux-tu donner un exemple réel avec une vraie url et ce qui ne marche pas ?

    Sur quel système d'exploitation es-tu ?
    Je suis sous W$ XP
    Voici un code qui ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    def test_download():
        file_url = "http://www.techno-froid.com/file/Physique4.zip"
        filename = file_url.split("/")[-1]
        local_filename=os.path.join("C:/Mes Documents/ReNo/PyPgm/PyUtils/webSpider-Gediff/ziptemp", filename)
        print file_url
        of = open(local_filename,"w")
        file_to_save = urllib2.urlopen(file_url)
        of.write(file_to_save.read())
        of.close()
    Pour des questions de firewall, je ne peux pas tester en téléchargeant des fichiers d'internet avec mon programme. Mais si je mets un fichier zip de notre intranet, ça ne fonctionne pas.
    Je récupère un fichier qui contient des trucs mais qui ne peut pas être ouvert par le programme prévu.

  4. #4
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    comme suggéré par Alexis.M, utiliser 'wb' au lieu de 'w' dans open:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    of = open(local_filename,"wb")
    ceci indique que c'est bel et bien un fichier binaire que l'on ouvre.

    Sinon, utiliser le module urllib, plus simple, mais surtout beaucoup plus direct question telechargement de fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    urllib.urlretrieve(url,myfilename)

  5. #5
    Membre éclairé

    Inscrit en
    Novembre 2008
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 425
    Par défaut
    Bonjour et merci pour ces réponses.
    J'avais bien essayé avec "wb" et cela ne fonctionnait pas plus.
    J'aime bien la solution urlretrieve qui est plus simple.

    En réalité, mon problème venait de ce que le nom de fichier contenait un espace.
    Je récupérais le nom à partir des attributs href des balises <a> par BeautifulSoup et il contenait des espaces qui, je ne sais pas pourquoi, empêchaient le téléchargement de se dérouler correctement.
    En les remplaçant par des "%20", ça fonctionne.

    Merci encore.

  6. #6
    Membre émérite
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Par défaut
    tu peux utiliser urllib.quote(chaine) pour "échapper" les caractères non autorisés dans les urls :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> urllib.quote("développer c'est cool")
    'd%C3%A9velopper%20c%27est%20cool'

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Serveur HTTP : publier une image ou un fichier binaire
    Par Idleman dans le forum Réseau
    Réponses: 0
    Dernier message: 03/05/2013, 12h44
  2. Download binaire en http sur le port https ?
    Par Yan25 dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 13/07/2006, 09h39
  3. [Debutant] Comment lire la taille d'un fichier binaire ?
    Par Invité dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 18/12/2003, 19h20
  4. communication fichier binaire fichier txt
    Par micdie dans le forum C
    Réponses: 3
    Dernier message: 05/12/2002, 00h19
  5. fichier binaire ou texte
    Par soussou dans le forum C++Builder
    Réponses: 4
    Dernier message: 14/06/2002, 13h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo