Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Python 3
  3. Programmation web
Extrait - Python 3 Traitement de données et techniques de programmation (2e édition)
Extraits du livre
Python 3 Traitement de données et techniques de programmation (2e édition) Revenir à la page d'achat du livre

Programmation web

Services web

1. REST

Un service web est une fonctionnalité qui permet un échange de données entre applications qui peuvent être hétérogènes. Cet échange peut avoir lieu sur un intranet ou sur un Internet et est réalisé de manière synchrone.

La liste des technologies mises en œuvre est assez diverse dans plusieurs domaines.

REST est une technologie qui définit un style d’architecture applicative et est en cela également une manière de représenter une ressource susceptible d’être interrogée et de recevoir des paramètres.

Le transport est effectué via HTTP, la réponse peut prendre plusieurs formes qui sont HTML, XML ou JSON.

Le moyen le plus simple et le plus rapide pour offrir un service web renvoyant une réponse JSON est d’utiliser la bibliothèque bottle que vous installerez ainsi :

pip install bottle 

Voici un exemple basique de service web que l’on peut réaliser à l’aide de cette bibliothèque :

from bottle import route, run 
if __name__ == "__main__": 
   @route('/hello/:name', method='GET') 
   def get_set_of_results(name): 
      return {'message': 'Hello %s' % name} 
   run() 

Pour lancer le serveur, il faut simplement aller dans le répertoire 13 des exemples et exécuter :

$ ./test_rest.py 

Ce qui caractérise REST, c’est la manière de construire une URL pour choisir le service à utiliser et pour passer les paramètres nécessaires. C’est la clé de la bonne utilisation de REST et c’est relativement simple à utiliser en plus d’être finalement pythonique bien que pas conçu spécifiquement pour Python.

Il suffit d’aller ouvrir son navigateur et de taper l’URL suivante pour visualiser le résultat (fichier JSON) :

http://localhost/hello/quelquechose 

Voici un client qui permet de consommer un tel service :

>>> from http.client import HTTPConnection 
>>> conn = HTTPConnection('localhost:8080') 
>>> conn.request('GET'...

Client web

Nous avons présenté dans le chapitre Programmation réseau la manière de construire un client web en utilisant le protocole HTTP. Ce chapitre présente un module de haut niveau qui est à la fois particulièrement bien adapté au protocole HTTP et qui ne vous impose pas de connaître le fonctionnement de ce protocole dans le détail.

Il s’agit du module requests qui s’installe ainsi :

$ pip install requests 

Ce module a pour objectif de permettre aux non experts d’utiliser le protocole HTTP de la manière la plus simple possible.

On peut ainsi récupérer le contenu d’un service web simplement ainsi :

>>> import requests 
>>> r = requests.get("http://127.0.0.1:8080/hello/world") 

L’objet r est la réponse du serveur (on utilise ici le serveur que l’on a conçu plus haut en tant qu’exemple REST avec bottlepy).

On peut tout d’abord analyser cette réponse :

>>> r.status_code 
200 
>>> r.headers 
{'Date': 'Sun, 19 May 2019 10:27:23 GMT', 
 'Server': 'WSGIServer/0.2 Cpython/3.7.1', 
 'Content-Type': 'application/json', 
 'Content-Length': '26'} 

Le code de statut est un élément important dans le protocole HTTP. En fonction de ce code, vous devrez traiter la réponse de manière différente. Un code 200 indique que tout s’est bien passé et que vous avez la réponse que vous souhaitez.

Un code 300 indique cependant un souci pour obtenir la ressource, que ce soit une permission, un proxy, le fait que la page a été déplacée de manière temporaire ou permanente... Vous devez agir en conséquence en fonction du code exact. Un code 400 est une erreur qui est considérée comme étant du côté client et une erreur 500 est une erreur côté serveur, sur laquelle vous ne pouvez agir.

Les en-têtes vous permettent de savoir si le contenu de votre réponse est du JSON ou du texte et c’est ce qui va déterminer comment vous allez le lire (l’élément essentiel...

Web scrapping

Le web scrapping consiste à extraire du contenu actionnable depuis des sites web. Ceci est utile pour de nombreuses applications : référencement, comparaison entre sites, extraction d’informations...

En Python, on peut parfaitement faire ceci à l’aide de requests pour récupérer le contenu HTML puis de BeautifulSoup pour parser les données. Il existe cependant une alternative de plus haut niveau : Scrapy.

Cette technique est considérée par certains acteurs, comme Google, comme étant du pillage. Le web scrapping en lui-même ne pose pas à proprement parler de problèmes éthiques, ce qui compte vraiment est ce que vous ferez des données que vous récoltez.

Si vous récupérez des informations d’un site pour les dupliquer sur votre propre site, vous violez potentiellement le droit d’auteur (cela dépend de la licence associée à l’information que vous dupliquez), auquel cas cette utilisation est effectivement impropre.

Si vous récupérez des informations pour faire une veille technologique ou suivre l’évolution de prix sur des plateformes concurrentes, vous ne violez en principe aucune règle, car ces informations sont publiques. Il faut tout de même vérifier les conditions d’utilisation des sites en question.

Pour installer cette bibliothèque...