Fichier à télécharger à partir du web en Python 3
Je suis entrain de créer un programme qui va télécharger un .jar (java) à partir de fichiers d'un serveur web, par la lecture de l'URL spécifiée dans le .jad fichier du même jeu/de l'application. Je suis à l'aide de Python 3.2.1
J'ai réussi à extraire l'URL du fichier JAR à partir du fichier JAD (chaque fichier JAD contient l'URL du fichier JAR), mais comme vous pouvez l'imaginer, la valeur extraite est de type() string.
Voici la fonction:
def downloadFile(URL=None):
import httplib2
h = httplib2.Http(".cache")
resp, content = h.request(URL, "GET")
return content
downloadFile(URL_from_file)
Cependant j'obtiens toujours un message d'erreur indiquant que le type de la fonction ci-dessus doit être octets, et pas de chaîne. J'ai essayé d'utiliser l'URL.encode('utf-8'), et aussi octets(URL,encoding='utf-8'), mais j'avais toujours obtenir le même ou semblable erreur.
Donc en gros ma question est comment faire pour télécharger un fichier à partir d'un serveur lorsque l'URL est stockée dans un type de chaîne?
- Une prime pour cela? Le répondeur est toujours (et très) active sur DONC. Pourquoi ne pas simplement ajouter un commentaire et poser?
- Cos une bonne réponse que dure l'épreuve du temps vaut de l'attribution. Aussi, nous devrions commencer à faire cela pour beaucoup d'autres questions pour vérifier si les réponses sont pertinentes aujourd'hui. Surtout quand le tri de réponses sont assez fou, parfois obsolètes ou même le pire des réponse va vers le haut.
Vous devez vous connecter pour publier un commentaire.
Si vous voulez obtenir le contenu d'une page web dans une variable, il suffit de
read
la réponse deurllib.demande.urlopen
:La façon la plus facile de télécharger et d'enregistrer un fichier est d'utiliser le
urllib.demande.urlretrieve
fonction:Mais gardez à l'esprit que
urlretrieve
est considéré comme héritage et pourrait devenir obsolète (je ne sais pas pourquoi, d'ailleurs).De sorte que la plupart des corriger façon de le faire serait d'utiliser la
urllib.demande.urlopen
fonction pour renvoyer un fichier-comme l'objet qui représente une réponse HTTP et le copier dans un fichier réel à l'aide deshutil.copyfileobj
.Si cela vous semble trop compliqué, vous pouvez aller de plus simple et de stocker l'ensemble de télécharger dans un
bytes
objet et puis les écrire dans un fichier. Mais cela ne fonctionne bien que pour les petits fichiers.Il est possible d'extraire
.gz
(et peut-être d'autres formats) compressé des données à la volée, mais une telle opération nécessite probablement le serveur HTTP à l'appui d'accès aléatoire dans le fichier.response.info().get_param('charset', 'utf-8')
au lieu de coder en dur lesutf-8
, pour obtenir le codage des caractères à partir deContent-Type
en-têteoutfile.write(data)
seulement fonctionnent bien pour les petits fichiers?urlopen()
soulèveURLError
mais ce qui est soulevée dans la lecture de la phase?- Je utiliser
requests
paquet à chaque fois que je veux quelque chose lié à des requêtes HTTP en raison de son API est très facile à démarrer avec:tout d'abord, installez
requests
le code:
first install requests
. Ce genre de culture doit être prise en stackoverflow et voisin des sites de cause en supposant que le public au courant de tous les bits de l'information est fausse.J'espère que j'ai compris le droit de la question, qui est: comment faire pour télécharger un fichier à partir d'un serveur lorsque l'URL est stockée dans un type de chaîne?
- Je télécharger les fichiers et de les enregistrer localement à l'aide du code ci-dessous:
Ici, nous pouvons utiliser urllib Héritage de l'interface en Python3:
La suite de fonctions et de classes sont portés à partir du Python 2 module urllib (par opposition à urllib2). Ils pourraient devenir obsolète à un certain moment dans l'avenir.
Exemple (2 lignes de code):
Vous pouvez utiliser wget qui est populaire téléchargement shell outil pour cela. https://pypi.python.org/pypi/wget
Ce sera la méthode la plus simple, car il n'a pas besoin d'ouvrir le fichier de destination. Ici est un exemple.
Oui, definietly demandes est grand paquet pour une utilisation dans quelque chose lié à des requêtes HTTP. mais nous devons être prudents avec le type d'encodage des données entrantes ainsi ci-dessous est un exemple qui explique la différence