2011-01-22 7 views
1

Je tente de télécharger des fichiers à partir d'un site Web en utilisant urllib comme décrit dans ce fil: link texttéléchargement de fichiers avec Python urllib, urllib2

import urllib 
urllib.urlretrieve ("http://www.example.com/songs/mp3.mp3", "mp3.mp3") 

Je suis en mesure de télécharger les fichiers (principalement pdf), mais tout ce que j'obtenir est des fichiers corrompus qui ne peuvent pas ouvrir. Je suppose que c'est parce que le site Web nécessite un identifiant.

Comment la fonction ci-dessus peut-elle être modifiée pour gérer les cookies? Je connais déjà les noms des champs de formulaire qui portent le nom d'utilisateur & informations de mot de passe. Lorsque j'imprime les valeurs de retour de urlretrieve je reçois des messages comme:

a, b = urllib.urlretrieve ("http://www.example.com/songs/mp3.mp3", "mp3.mp3") 
print a, b 

>> **cache-control:** no-cache, no-store, must-revalidate, s-maxage=300, proxy-revalida 
te 

>> **connection:** close 

Je suis en mesure de télécharger manuellement les fichiers si j'entre leurs urls dans le navigateur. Merci

+0

Si le site nécessite une connexion, vous devriez être redirigé vers une page de connexion, mais la page sera enregistrée en tant que votre nom de fichier que vous avez passé + l'extension. Renommez votre 'mp3.mp3' en quelque chose comme' mp3.html' et essayez de l'ouvrir avec un navigateur web. - Ceci est jsut pour s'assurer qu'il demande un login – ccheneson

+1

regardez la bibliothèque de demandes. sauf si vous devez utiliser urllib2, ne le faites pas - cela ne fait que compliquer le tout. http://pypi.python.org/pypi/requests –

Répondre

0

Il est possible que le serveur que vous demandez recherche certains messages d'en-tête, tels que User-Agent. Vous pouvez essayer d'imiter le comportement d'un navigateur en envoyant des en-têtes supplémentaires.

+0

Merci ccheneson & rubayeet! C'était mon erreur - Il y avait quelques erreurs dans mes noms de fichiers qui amène le navigateur à rediriger vers la page de connexion. Je suis capable de télécharger maintenant en utilisant mécaniser à travers: file.write (browser.response(). Read()) :) – iab

1

Première urllib2 prend en charge les cookies et la manipulation des cookies devrait être facile, en second lieu, vous pouvez vérifier quel type de fichier que vous avez téléchargé. Par exemple. Autant que je sache tous les fichiers MP3 commence par les octets « ID3 »

import cookielib, urllib2 
cj = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
r = opener.open("http://example.com/")