Python Accès Internet en utilisant Urllib.Request et urlopen()

⚡ Résumé intelligent

urllib est la norme Python module d'accès aux données Internet, permettant aux programmes d'ouvrir URLs et récupérer du contenu HTML, JSON ou binaire. La fonction urllib.request.urlopen() se connecte à une adresse web et lit directement la réponse du serveur. Python.

  • (I.e. Bibliothèque standard : urllib est fourni avec Python et regroupe les modules de requête, d'erreur, d'analyse et de robotparser pour URL tâches.
  • ☑️ Ouvrez un URL: La fonction urllib.request.urlopen() ouvre une connexion, et getcode() renvoie le statut HTTP tel que 200.
  • Lisez la réponse : La méthode read() renvoie des octets bruts, que decode("utf-8") convertit en texte lisible.
  • 🧪 Gérer les erreurs : Intercepter l'erreur HTTP et URLErreur provenant de urllib.error, les requêtes ayant échoué ne provoquent jamais le plantage du programme.
  • Telecharger des fichiers: La fonction urlretrieve() enregistre n'importe quel URL Enregistrement direct sur disque, idéal pour les images, les PDF et les ensembles de données.
  • 🤖 Prêt pour l'IA : urllib récupère des ensembles de données et des données API qui alimentent les modèles d'apprentissage automatique et les pipelines d'IA.

Python Accès Internet via Urllib

Les sections ci-dessous expliquent ce qu'est urllib et comment ouvrir un URL et lire son code HTML, et savoir comment gérer les erreurs, télécharger des fichiers et choisir entre la bibliothèque urllib et la bibliothèque requests.

Qu’est-ce que l’urllib ?

urllib est un Python module pouvant être utilisé pour l'ouverture URLIl définit des fonctions et des classes pour faciliter la mise en œuvre. URL actions.

Avec PythonVous pouvez également accéder à des données sur Internet, telles que des fichiers XML, HTML et JSON, et les récupérer, puis les manipuler directement. Dans les sections suivantes, nous verrons comment récupérer des données sur le Web. Par exemple, nous utilisons ici… Guru99 vidéo URL, accédez-y en utilisant Pythonet imprimer le fichier HTML de ceci URL.

Le paquet urllib regroupe plusieurs modules : urllib.request pour l'ouverture URLs, urllib.error pour les exceptions que les requêtes peuvent générer, urllib.parse pour la construction et l'analyse URLs, et urllib.robotparser pour la lecture des fichiers robots.txt.

Comment ouvrir URL utilisation d'Urllib

Avant d'exécuter le code pour se connecter aux données Internet, nous devons importer le URL module de bibliothèque, ou « urllib ».

Ouvrez URL utilisation d'Urllib

  • Importer l'URLlib
  • Définissez votre fonction principale
  • Déclarez la variable webUrl
  • Appelez ensuite la fonction urlopen de la bibliothèque urllib
  • Le URL nous ouvrons le Guru99 tutoriels sur YouTube
  • Ensuite, nous imprimons le code de résultat
  • Le code de résultat est récupéré en appelant la fonction getcode sur la variable webUrl que nous avons créée.
  • Nous convertissons cela en une chaîne de caractères, afin qu'elle puisse être concaténée avec notre chaîne « code de résultat ».
  • Il s'agira d'un code HTTP standard « 200 », indiquant que la requête HTTP a été traitée avec succès.

Comment obtenir un fichier HTML à partir d'un URL in Python

Vous pouvez également lire le fichier HTML en utilisant la fonction read() dans PythonLorsque vous exécuterez le code, le fichier HTML apparaîtra dans la console.

fichier HTML à partir de URL in Python

  • Appelez la fonction read() sur la variable webUrl
  • La méthode read() vous permet de lire le contenu des fichiers de données
  • Lisez l'intégralité du contenu de URL dans une variable appelée données
  • Exécutez le code et il affichera les données au format HTML.

Voici le code complet:

Python 2 Exemple

#  
# read the data from the URL and print it
#
import urllib2

def main():
# open a connection to a URL using urllib2
   webUrl = urllib2.urlopen("https://www.youtube.com/user/guru99com")
  
#get the result code and print it
   print "result code: " + str(webUrl.getcode()) 
  
# read the data from the URL and print it
   data = webUrl.read()
   print data
 
if __name__ == "__main__":
  main()

Python 3 Exemple

#
# read the data from the URL and print it
#
import urllib.request
# open a connection to a URL using urllib
webUrl  = urllib.request.urlopen('https://www.youtube.com/user/guru99com')

#get the result code and print it
print ("result code: " + str(webUrl.getcode()))

# read the data from the URL and print it
data = webUrl.read()
print (data)

Comment gérer les erreurs urllib : URLErreur et erreur HTTP

Une requête n'aboutit pas toujours. En cas d'erreur, urllib lève une exception au lieu de renvoyer des données ; il est donc important de gérer ces erreurs. Le module urllib.error définit deux classes d'exceptions principales.

  • Erreur HTTP Cette exception est levée lorsque le serveur renvoie un code d'état d'erreur, tel que 404 Not Found ou 500 Internal Server Error. Elle contient le code d'état et le corps de la réponse.
  • URLErreur Une exception est levée lorsque le serveur est totalement inaccessible, par exemple en raison d'un nom de domaine incorrect ou d'une absence de connexion Internet. Elle comporte un attribut de raison expliquant l'échec.

Parce que HTTPError est une sous-classe de URLEn cas d'erreur, il est impératif de toujours intercepter d'abord les erreurs HTTPError afin que chaque type d'erreur soit traité séparément :

from urllib.request import urlopen
from urllib.error import HTTPError, URLError

try:
    response = urlopen("https://www.guru99.com/no-such-page.html")
    data = response.read()
except HTTPError as error:
    print("HTTP error:", error.code)
except URLError as error:
    print("URL error:", error.reason)

La gestion de ces exceptions empêche votre programme de planter et vous permet de consigner le problème, de réessayer la requête ou de revenir aux données mises en cache.

Comment télécharger un fichier depuis un URL Utilisation d'urllib

la lecture d'un URL Le chargement en mémoire convient aux petites pages, mais pour les images, les documents PDF ou les ensembles de données, il est plus simple d'enregistrer la réponse directement sur le disque. Le module urllib.request propose deux méthodes simples pour ce faire.

La fonction urlretrieve() télécharge un URL directement dans un fichier local en une seule ligne :

from urllib.request import urlretrieve

urlretrieve("https://www.python.org/static/img/python-logo.png", "logo.png")

Pour plus de contrôle, ouvrez le URL et écrivez vous-même les octets. Ouvrez le fichier local en mode binaire car urlopen() renvoie des octets et non du texte :

from urllib.request import urlopen

with urlopen("https://example.com/data.zip") as response:
    with open("data.zip", "wb") as file:
        file.write(response.read())

Pour les fichiers très volumineux, lisez et écrivez en boucle en utilisant response.read(8192) afin que le fichier entier ne soit jamais chargé en mémoire en une seule fois.

urllib contre la bibliothèque requests dans Python

urllib fait partie de Python La bibliothèque standard est intégrée, ce qui permet son utilisation partout sans installation. La bibliothèque tierce requests n'est pas incluse, mais de nombreux développeurs la préfèrent pour les opérations HTTP quotidiennes en raison de sa syntaxe plus concise et plus lisible.

Les principales différences sont les suivantes:

  • Installation: urllib est fourni avec Python, tandis que requests doit être installé avec pip.
  • Décodage: urllib renvoie des octets bruts que vous décodez vous-même, tandis que requests décode automatiquement le texte et le JSON.
  • Confort : requests gère les sessions, les cookies et les en-têtes personnalisés avec moins de code.
  • Dépendances urllib n'en ajoute aucun, tandis que requests s'appuie sur urllib3 en interne.

Choisissez urllib si vous souhaitez une solution sans dépendances ou pour une requête ponctuelle. Pour les projets plus importants nécessitant une authentification, des sessions ou des appels API fréquents, privilégiez requests. Les deux bibliothèques envoient les mêmes requêtes HTTP sous-jacentes ; le choix se résume donc à privilégier la simplicité d'utilisation ou à réduire le nombre de dépendances.

FAQ

La fonction urlopen() renvoie un objet de réponse HTTP, généralement un objet http.client.HTTPResponse. Vous pouvez utiliser read() pour obtenir les octets bruts, getcode() pour lire le code d'état, et headers ou info() pour examiner les métadonnées telles que le type de contenu et la longueur.

urllib2 appartenait à Python 2. dans Python 3. Elle a été réorganisée : ses fonctionnalités ont été divisées en urllib.request pour l'ouverture URLs et urllib.error pour les exceptions. Code Le code écrit pour urllib2 doit être mis à jour pour importer urllib.request à la place.

La fonction `read()` renvoie des octets et non une chaîne de caractères, car `urlopen()` ne connaît pas l'encodage à l'avance. L'appel à `decode("utf-8")` convertit ces octets en texte lisible, ce qui vous permet d'imprimer, de rechercher ou d'analyser le contenu HTML ou JSON.

Ouvrez le URL Avec urlopen(), lisez les octets, décodez-les, puis analysez-les avec le module json : json.loads(response.read().decode(“utf-8”)). Cela renvoie un Python Vous pouvez utiliser directement un dictionnaire ou une liste, ce qui est courant lors de l'appel d'API Web.

Envelopper le URL Dans un objet `urllib.request.Request`, ajoutez l'en-tête avant d'ouvrir la requête : `request.add_header("User-Agent", "Mozilla/5.0")`, puis transmettez la requête à `urlopen()`. Les en-têtes personnalisés sont utiles lorsqu'un serveur bloque l'en-tête par défaut. Python agent utilisateur.

Oui. urllib permet de récupérer des jeux de données, des fichiers CSV et JSON depuis des API web, que vous pouvez ensuite décoder et charger dans pandas ou NumPy. C'est une solution légère et sans dépendances pour intégrer des données d'entraînement dans un pipeline d'apprentissage automatique.

Oui. GitHub Copilot complète automatiquement les modèles urllib courants tels que les appels urlopen(), les objets Request et la gestion des erreurs try/except. Cela accélère la répétitivité du code, mais vous devez tout de même vérifier le code. URLs, en-têtes et gestion des exceptions suggérés par l'assistant IA.

Encodez vos paramètres avec `urllib.parse.urlencode()`, convertissez-les en octets avec `encode()`, puis transmettez-les comme argument `data` à `urlopen()` ou à un objet `Request`. La fourniture de données force automatiquement urllib à envoyer une requête POST au lieu d'une requête GET.

Résumez cet article avec :