Comment télécharger un fichier via HTTP en utilisant Python ?

J&#8217ai un petit utilitaire que j&#8217utilise pour télécharger un MP3 à partir d&#8217un site web selon un calendrier et qui construit/met à jour un fichier XML de podcast que j&#8217ai évidemment ajouté à iTunes.

Le traitement de texte qui crée/met à jour le fichier XML est écrit en Python. J'utilise cependant wget dans un fichier `.bat' de Windows pour télécharger le MP3. Je préférerais cependant que l'utilitaire entier soit écrit en Python.

J'ai eu du mal à trouver un moyen de télécharger le fichier en Python, c'est pourquoi j'ai eu recours à wget.

Alors, comment puis-je télécharger le fichier en utilisant Python ?

Solution

En Python 2, utilisez urllib2 qui est fourni avec la bibliothèque standard.

import urllib2
response = urllib2.urlopen('http://www.example.com/')
html = response.read()

C'est la façon la plus basique d'utiliser la bibliothèque, sans la gestion des erreurs. Vous pouvez aussi faire des choses plus complexes comme changer les en-têtes. La documentation peut être trouvée [ici.][1]

[1] : http://docs.python.org/2/library/urllib2.html

Commentaires (6)
import urllib2
mp3file = urllib2.urlopen("http://www.example.com/songs/mp3.mp3")
with open('test.mp3','wb') as output:
  output.write(mp3file.read())

Le wb dans open('test.mp3', 'wb') ouvre un fichier (et efface tout fichier existant) en mode binaire afin que vous puissiez enregistrer des données avec lui au lieu de simplement du texte.

Commentaires (5)

Je suis d'accord avec Corey, urllib2 est plus complet que urllib et devrait probablement être le module utilisé si vous voulez faire des choses plus complexes, mais pour rendre les réponses plus complètes, urllib est un module plus simple si vous voulez juste les bases :

import urllib
response = urllib.urlopen('http://www.example.com/sound.mp3')
mp3 = response.read()

fonctionnera très bien. Ou, si vous ne voulez pas vous occuper de l'objet "response", vous pouvez appeler read() directement :

import urllib
mp3 = urllib.urlopen('http://www.example.com/sound.mp3').read()
Commentaires (0)