Maison > Article > développement back-end > Comment télécharger des fichiers depuis le Web à l’aide de Python 3 ?
Lors de l'extraction des URL des fichiers JAD pour télécharger des fichiers JAR, nous rencontrons une erreur due au fait que l'URL est stockée sous forme de chaîne taper. Pour résoudre ce problème, nous explorons les méthodes permettant de télécharger des fichiers avec des URL de chaîne dans Python 3.
Récupération du contenu d'une page Web :
Pour récupérer le contenu d'une page Web dans une variable, nous pouvons utiliser urllib.request.urlopen et lire la réponse :
<code class="python">import urllib.request url = 'http://example.com/' response = urllib.request.urlopen(url) data = response.read() # bytes object text = data.decode('utf-8') # str object</code>
Téléchargement et enregistrement de fichiers :
Pour des téléchargements et des enregistrements simples de fichiers, urllib .request.urlretrieve est optimal :
<code class="python">import urllib.request # Download and save file from url to file_name urllib.request.urlretrieve(url, file_name)</code>
Vous pouvez également obtenir le chemin local et les en-têtes de réponse :
<code class="python">file_name, headers = urllib.request.urlretrieve(url)</code>
Solution optimale en utilisant urlopen etshuil.copyfileobj :
L'approche recommandée consiste à utiliser urllib.request.urlopen pour récupérer un objet de réponse HTTP de type fichier et à le copier dans un fichier à l'aide deshuil.copyfileobj :
<code class="python">import urllib.request import shutil # Download and save file from url to file_name with urllib.request.urlopen(url) as response, open(file_name, 'wb') as out_file: shutil.copyfileobj(response, out_file)</code>
Approche alternative pour les petits fichiers :
Pour les fichiers plus petits, il est possible de stocker l'intégralité du téléchargement dans un objet bytes et de l'écrire dans un fichier :
<code class="python">import urllib.request # Download and save file from url to file_name with urllib.request.urlopen(url) as response, open(file_name, 'wb') as out_file: data = response.read() # bytes object out_file.write(data)</code>
Extraction de données compressées à la volée :
Vous pouvez également extraire des données compressées à la volée si le serveur HTTP prend en charge l'accès aléatoire aux fichiers :
<code class="python">import urllib.request import gzip # Read first 64 bytes of .gz file at url url = 'http://example.com/something.gz' with urllib.request.urlopen(url) as response: with gzip.GzipFile(fileobj=response) as uncompressed: file_header = uncompressed.read(64) # bytes object</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!