Je crée un programme qui téléchargera un fichier .jar (java) à partir d'un serveur Web, en lisant l'URL spécifiée dans le fichier .jad du même jeu / application. J'utilise Python 3.2.1
J'ai réussi à extraire l'URL du fichier JAR du fichier JAD (chaque fichier JAD contient l'URL du fichier JAR), mais comme vous pouvez l'imaginer, la valeur extraite est la chaîne type ().
Voici la fonction pertinente:
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 une erreur en disant que le type dans la fonction ci-dessus doit être des octets et non une chaîne. J'ai essayé d'utiliser l'URL.encode ('utf-8'), ainsi que les octets (URL, encoding = 'utf-8'), mais j'obtiendrais toujours la même erreur ou une erreur similaire.
Donc, fondamentalement, ma question est de savoir comment télécharger un fichier à partir d'un serveur lorsque l'URL est stockée dans un type de chaîne?
la source
Réponses:
Si vous voulez obtenir le contenu d'une page Web dans une variable, juste
read
la réponse deurllib.request.urlopen
:La façon la plus simple de télécharger et d'enregistrer un fichier est d'utiliser la
urllib.request.urlretrieve
fonction:Mais gardez à l'esprit que cela
urlretrieve
est considéré comme un héritage et pourrait devenir obsolète (je ne sais pas pourquoi, cependant).Donc, la façon la plus correcte de le faire serait d'utiliser la
urllib.request.urlopen
fonction pour renvoyer un objet de type fichier qui représente une réponse HTTP et de le copier dans un fichier réel à l'aide deshutil.copyfileobj
.Si cela semble trop compliqué, vous voudrez peut-être aller plus simple et stocker tout le téléchargement dans un
bytes
objet, puis l'é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) des données compressées à la volée, mais une telle opération nécessite probablement le serveur HTTP pour prendre en charge l'accès aléatoire au fichier.la source
response.info().get_param('charset', 'utf-8')
place du codage en durutf-8
, pour obtenir l'encodage des caractères à partir de l'en-Content-Type
têteoutfile.write(data)
fonctionne bien que pour les petits fichiers?J'utilise un
requests
package chaque fois que je veux quelque chose en rapport avec les requêtes HTTP car son API est très facile à démarrer:installez d'abord
requests
puis le code:
la source
J'espère avoir bien compris la question, qui est: comment télécharger un fichier à partir d'un serveur lorsque l'URL est stockée dans un type de chaîne?
Je télécharge des fichiers et les enregistre localement en utilisant le code ci-dessous:
la source
Ici, nous pouvons utiliser l'interface Legacy d'urllib en Python3:
Les fonctions et classes suivantes sont portées depuis le module Python 2 urllib (par opposition à urllib2). Ils pourraient devenir obsolètes à un moment donné dans le futur.
Exemple (code 2 lignes) :
la source
Vous pouvez utiliser wget qui est un outil de téléchargement populaire pour cela. https://pypi.python.org/pypi/wget Ce sera la méthode la plus simple car elle n'a pas besoin d'ouvrir le fichier de destination. Voici un exemple.
la source
Oui, les requêtes sont définitivement un excellent package à utiliser dans quelque chose en rapport avec les requêtes HTTP. mais nous devons être prudents avec le type d'encodage des données entrantes ainsi que ci-dessous est un exemple qui explique la différence
la source
Motivation
Parfois, nous voulons obtenir l'image mais pas besoin de la télécharger dans de vrais fichiers,
c'est-à-dire, téléchargez les données et conservez-les en mémoire.
Par exemple, si j'utilise la méthode d'apprentissage automatique, entraînez un modèle capable de reconnaître une image avec le numéro (code à barres).
Lorsque j'explore certains sites Web qui contiennent ces images afin que je puisse utiliser le modèle pour le reconnaître,
et je ne veux pas enregistrer ces images sur mon lecteur de disque,
alors vous pouvez essayer la méthode ci-dessous pour vous aider à conserver les données de téléchargement en mémoire.
Points
en gros, c'est comme @Ranvijay Kumar
Un exemple
la source
la source