[Introduction à Python3 Jour 20] Chapitre 9 Démêler le Web (9.1-9.4)

9.1 Client Web

9.1.1 Bibliothèque Web standard Python

Les clients Web et les modules serveur n'étaient pas très bien organisés dans Python 2. → En Python3, il est résumé dans un package.

--http gère les détails du serveur client HTTP. --client effectue le traitement côté client. --server aide au développement de serveurs Web avec Python.

--urllib fonctionne sur http. --request traite la demande du client. --response traite la réponse du serveur. --parse sépare l'URL en plusieurs parties.


>>> import urllib.request as ur
>>> url="https://raw.githubusercontent.com/koki0702/introducing-python/master/dummy_api/fortune_cookie_random1.txt"
>>> conn=ur.urlopen(url)
>>> print(conn)
<http.client.HTTPResponse object at 0x10733c8d0>
>>> data=conn.read()
>>> print(data)
b'You will be surprised by a loud noise.\\r\\n\\n[codehappy] http://iheartquotes.com/fortune/show/20447\n'
#Afficher le code d'état HTTP.
#Un 200 indique que tout le code a fonctionné.
>>> print(conn.status)
200

#Affichage du format des données
#Contenu de l'en-tête de réponse HTTP-Spécifié par type.
>>> print(conn.getheader("Content-Type"))
text/plain; charset=utf-8
>>> for key,value in conn.getheaders():
...     print(key,value)
... 
Content-Type text/plain; charset=utf-8
Content-Security-Policy default-src 'none'; style-src 'unsafe-inline'; sandbox
Strict-Transport-Security max-age=31536000
X-Content-Type-Options nosniff
X-Frame-Options deny
X-XSS-Protection 1; mode=block
ETag W/"9f5651c47de1d25d4c531d22c98b96ea61d10d7e4f5c6eb6cbeecd9e01cdfbf8"
Cache-Control max-age=300
X-Geo-Block-List 
Via 1.1 varnish-v4
X-GitHub-Request-Id D326:4317:329188:36E387:5E2EBEE7
Content-Length 99
Accept-Ranges bytes
Date Mon, 27 Jan 2020 10:43:52 GMT
Via 1.1 varnish
Connection close
X-Served-By cache-tyo19932-TYO
X-Cache MISS
X-Cache-Hits 0
X-Timer S1580121832.776951,VS0,VE269
Vary Authorization,Accept-Encoding, Accept-Encoding
Access-Control-Allow-Origin *
X-Fastly-Request-ID 034e4e0799a3de2ed0ae382d63bcd716a0574002
Expires Mon, 27 Jan 2020 10:48:52 GMT
Source-Age 0
>>> 

9.1.2 Au-delà de la bibliothèque standard


>>> import requests
>>> url="https://raw.githubusercontent.com/koki0702/introducing-python/master/dummy_api/fortune_cookie_random1.txt"
>>> resp=requests.get(url)
>>> resp
<Response [200]>
>>> print(resp.text)
I know that there are people who do not love their fellow man, and I people like that!
    -- Tom Lehrer, Satirist and Professor
    [codehappy] http://iheartquotes.com/fortune/show/21465


9.2 Serveur Web

9.2.1 Le serveur Web le plus simple avec Python


$ python -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
127.0.0.1 - - [27/Jan/2020 20:09:04] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [27/Jan/2020 20:09:04] code 404, message File not found
127.0.0.1 - - [27/Jan/2020 20:09:04] "GET /favicon.ico HTTP/1.1" 404 -
127.0.0.1 - - [27/Jan/2020 20:12:55] "GET /wheel HTTP/1.1" 200 -
q
C
^C      

python -m http.server 9999
Serving HTTP on 0.0.0.0 port 9999 (http://0.0.0.0:9999/) ...
^C


9.2 Serveur Web

python



#D'autres valeurs peuvent être spécifiées pour le numéro de port.
python -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
#127.0.0.1 :Adresse du client
#Premier- :Nom d'utilisateur distant
#Seconde- :Nom d'utilisateur connexion
#"GET / HTTP/1.1":Commandes envoyées au serveur Web
#GET est une méthode HTTP,/Est la ressource demandée (répertoire racine), HTTP/1.1 est la version HTTP.
#200:Code d'état HTTP
127.0.0.1 - - [27/Jan/2020 20:09:04] "GET / HTTP/1.1" 200 -

9.2.2 WSGI Un bond en avant depuis la définition de WSGI, une API universelle entre les applications Web Pytho et les serveurs Web.

9.2.3 Cadre

Le framework Web fournit certaines ou toutes les fonctionnalités suivantes:

--Routage

9.2.4 Bottle

--Bottle est entièrement constitué de fichiers Python, il est donc très facile d'essayer et de déployer.

installation de bouteille



pip install bottle
Collecting bottle
  Downloading bottle-0.12.18-py3-none-any.whl (89 kB)
     |████████████████████████████████| 89 kB 692 kB/s 
Installing collected packages: bottle
Successfully installed bottle-0.12.18

bottle1.py



from bottle import route, run

#Pour associer l'URL à la fonction qui la suit immédiatement@Utilisez le décorateur d'itinéraire.
#dans ce cas,/(page d'accueil)Est traité par la fonction d'accueil.
@route("/")
def home():
    return "It is not fancy, but it is my home page"

#run()La fonction exécute un serveur Web de test Python intégré à Bottle.
run(host="localhost",port=9999)

Déclaration d'exécution



python3 bottle1.py 
Bottle v0.12.18 server starting up (using WSGIRefServer())...
Listening on http://localhost:9999/
Hit Ctrl-C to quit.

Résultat d'exécution



#http://localhost:Accédez à 9999.
It is not fancy, but it is my home page

bottle2.py



#Faire en sorte que la bouteille renvoie le contenu de ce fichier lorsque la page d'accueil est demandée.
from bottle import route, run, static_file

@route("/")
#La racine indique"."Est le répertoire actuel.
def home():
    return static_file("index.html",root=".")

run(host="localhost",port=9999)

Déclaration d'exécution


python bottle2.py
Bottle v0.12.18 server starting up (using WSGIRefServer())...
Listening on http://localhost:9999/
Hit Ctrl-C to quit.

Résultat d'exécution



#http://localhost:9999/Accès à.
My new and improved home page!!!

bottle3.py



from bottle import route, run, static_file

@route("/")
def home():
    return static_file("index.html",root=".")

#Passez des arguments à la fonction via une URL.
#echo()Chose d'argument dans l'URL/echo/Remplacez l'argument chaîne après.
@route("/echo/<thing>")
def echo(thing):
    return "Say hello to my little friend: %s" % thing

# debug=True
# reloader=True
run(host="localhost",port=9999)

Déclaration d'exécution



python bottle3.py
Bottle v0.12.18 server starting up (using WSGIRefServer())...
Listening on http://localhost:9999/
Hit Ctrl-C to quit.

127.0.0.1 - - [27/Jan/2020 20:59:21] "GET /echo/Mothra HTTP/1.1" 200 37

Résultat d'exécution



#http://localhost:9999/echo/Accédez à Mothra.
Say hello to my little friend: Mothra

--Si debug = True est spécifié, une page de débogage sera créée lorsqu'une erreur HTTP est renvoyée. --Si reloader = True, la page se recharge dans le navigateur lorsque vous modifiez votre code Python.

9.2.5 Flask

Installation du flacon


pip install flask
...
Successfully installed Jinja2-2.10.3 MarkupSafe-1.1.1 Werkzeug-0.16.1 click-7.0 flask-1.1.1 itsdangerous-1.1.0

flask1.py



from flask import Flask

app=Flask(__name__, static_folder=".",static_url_path="")

@app.route("/")
def home():
    return app.send_static_file("index.html")

@app.route("/echo/<thing>")
def echo(thing):
    return thing

# reloader=True
app.run(port=9999, debug=True)

Résultat d'exécution


#http://127.0.0.1:9999/Accès à.
My new and improved home page!!!


#http://127.0.0.1:9999/echo/Entrez Godzilla dans votre navigateur.
Godzilla

--Flazk a un modèle appelé jinja2.

flask2.html



<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Flask2 Example</title>
  </head>
  <body>
    Say hello to my little friend:{{ thing }}
  </body>
</html>>

flask2.py



from flask import Flask, render_template

app=Flask(__name__)

#thing=chose lue depuis l'URL<thing>Est assigné à une variable appelée chose, et c'est"flask2.html"Transmis à.
@app.route("/echo/<thing>")
def echo(thing):
    return render_template("flask2.html",thing=thing)


app.run(port=9999,debug=True)

Résultat d'exécution


#http://127.0.0.1:9999/echo/Entrez Gamera dans le navigateur

< Say hello to my little friend:Gamera >

9.2.5.1 Passer des arguments sous la forme d'une partie du chemin URL

flask3.html


<html>
<head>
<title>Flask3 Example</title>
</head>
<body>
Say hello to my little friend: {{ thing }}.
Alas, in just destroyed {{ place }}!
</body>
</html>

flask3a.py



from flask import Flask, render_template

app=Flask(__name__)

@app.route("/echo/<thing>/<place>")
def echo(thing, place):
    return render_template("flask3.html",thing=thing, place=place)


app.run(port=9999, debug=True)

Résultat d'exécution



#http://127.0.0.1:9999/echo/Rodan/Visitez McKeesport.

Say hello to my little friend: Rodan. Alas, in just destroyed McKeesport!

flask3b.py



from flask import Flask, render_template, request

app=Flask(__name__)

#Passez comme un argument GET.
@app.route("/echo/")
def echo():
    thing=request.args.get("thing")
    place=request.args.get("place")
    return render_template("flask3.html",thing=thing, place=place)

app.run(port=9999, debug=True)

Résultat d'exécution



#http://127.0.0.1:9999/echo/?thing=Gorgo&place=Visitez Wilmerding.

Say hello to my little friend: Gorgo. Alas, in just destroyed Wilmerding!

flask3c.py



from flask import Flask, render_template, request

app=Flask(__name__)

@app.route("/echo/")
#Du dictionnaire**Utilisez pour convertir la clé en dictionnaire et falask3.Peut être passé en html.
def echo():
    kwargs={}
    kwargs["thing"]=request.args.get("thing")
    kwargs["place"]=request.args.get("place")
    return render_template("flask3.html",**kwargs)

app.run(port=9999, debug=True)

9.2.6 Serveurs Web autres que Python

9.2.7 Autres cadres

Il y a beaucoup de.

9.3 Services Web et automatisation

Le Web est utilisé comme un moyen puissant de connecter des applications et des données dans une variété de formats autres que HTML.

9.3.1 API Web et REST

9.3.2 JSON

9.3.3 Ramper et racler

Pour une étude quelque temps. "Tutoriel Scrapy" https://doc-ja-scrapy.readthedocs.io/ja/latest/intro/tutorial.html

9.3.5 Grattage HTML avec Beautiful Soup

--Beautiful Soup est utile si vous avez déjà récupéré le code HTML et les données de votre site Web.

9.4 Revoir l'affectation

Créez un site Web squelette uniquement avec un serveur Web de débogage 9-1 Flask et de développement cyclable. Le serveur doit être démarré en utilisant le nom d'hôte localhost et le port 5000.

flask9-1.py



from flask import Flask

app=Flask(__name__)

app.run(port=5000, debug=True)

9-2 Ajoutons une fonction home () qui traite les requêtes pour la page d'accueil. Configurez-le pour renvoyer la chaîne Il est vivant.

flask9-2.py



from flask import Flask

app=Flask(__name__)

@app.route("/")
def home():
    return "It is alive"

app.run(port=5000, debug=True)

9-3 Créons un fichier modèle jinja2 nommé home.html avec le contenu suivant.

home.html



<html>
<head>
  <title>It is alive!</title>
<body>
  I am of course referring to {{thing}},which is {{height}} feet tall and {{color}}.
</body>
</html>

9-4 Réécrivons la fonction home () du serveur pour utiliser le modèle home.html.

Passez trois arguments GET, chose, hauteur et couleur, à la fonction home ().

flask9-4.py



from flask import Flask, render_template, request

app=Flask(__name__)

@app.route("/")
def home():
    thing=request.args.get("thing")
    height=request.args.get("height")
    color=request.args.get("color")
    return render_template("home.html",thing=thing, height=height, color=color)

app.run(port=5000, debug=True)

Impressions

J'ai rapidement revu le système Web. Même si j'utilise ce domaine, il me semble que c'est loin.

Les références

"Introduction à Python3 par Bill Lubanovic (publié par O'Reilly Japon)"

Recommended Posts

[Introduction à Python3 Jour 20] Chapitre 9 Démêler le Web (9.1-9.4)
[Introduction à Python3 Jour 13] Chapitre 7 Chaînes de caractères (7.1-7.1.1.1)
[Introduction à Python3 Jour 14] Chapitre 7 Chaînes de caractères (7.1.1.1 à 7.1.1.4)
[Introduction à Python3 Jour 15] Chapitre 7 Chaînes de caractères (7.1.2-7.1.2.2)
[Introduction à Python3 Day 21] Chapitre 10 Système (10.1 à 10.5)
[Introduction à Python3, jour 17] Chapitre 8 Destinations de données (8.1-8.2.5)
[Introduction à Python3, jour 17] Chapitre 8 Destinations de données (8.3-8.3.6.1)
[Introduction à Python3 Jour 19] Chapitre 8 Destinations de données (8.4-8.5)
[Introduction à Python3 Day 18] Chapitre 8 Destinations de données (8.3.6.2 à 8.3.6.3)
[Introduction à Python3 Jour 12] Chapitre 6 Objets et classes (6.3-6.15)
[Introduction à Python3, jour 22] Chapitre 11 Traitement parallèle et mise en réseau (11.1 à 11.3)
[Introduction à Python3 Jour 11] Chapitre 6 Objets et classes (6.1-6.2)
[Introduction à Python3, Jour 23] Chapitre 12 Devenir un Paisonista (12.1 à 12.6)
[Introduction à Python3 Jour 8] Chapitre 4 Py Skin: Structure du code (4.1-4.13)
[Introduction à Python3 Jour 1] Programmation et Python
[Introduction à Python3 Jour 3] Chapitre 2 Composants Py: valeurs numériques, chaînes de caractères, variables (2.2 à 2.3.6)
[Introduction à Python3 Jour 2] Chapitre 2 Composants Py: valeurs numériques, chaînes de caractères, variables (2.1)
[Introduction à Python3 Jour 4] Chapitre 2 Composants Py: valeurs numériques, chaînes de caractères, variables (2.3.7 à 2.4)
Introduction à la vérification de l'efficacité Chapitre 1 écrit en Python
[Introduction à Python3 Jour 7] Chapitre 3 Outils Py: Listes, Taples, Dictionnaires, Ensembles (3.3-3.8)
[Introduction à Python3 Jour 5] Chapitre 3 Outils Py: listes, taples, dictionnaires, ensembles (3.1-3.2.6)
[Introduction à Python3 Jour 10] Chapitre 5 Boîte cosmétique de Py: modules, packages, programmes (5.4-5.7)
[Introduction à Python3 Jour 9] Chapitre 5 Boîte cosmétique de Py: modules, packages, programmes (5.1-5.4)
[Introduction à Python3 Jour 6] Chapitre 3 Liste des outils Py, tapple, dictionnaire, set (3.2.7-3.2.19)
Introduction à Python Préparons l'environnement de développement
Introduction à OpenCV (python) - (2)
Introduction à Python avec Atom (en route)
[Introduction à l'algorithme] Trouvez l'itinéraire le plus court [Python3]
Introduction à la vérification de l'efficacité Chapitre 2 écrit en Python
Jour 66 [Introduction à Kaggle] Les prévisions Titanic les plus faciles
[Introduction à Python] Comment itérer avec la fonction range?
[Chapitre 5] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 3] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 2] Introduction à Python avec 100 coups de traitement du langage
[Introduction à Udemy Python3 + Application] 27. Comment utiliser le dictionnaire
[Introduction à Udemy Python3 + Application] 30. Comment utiliser l'ensemble
[Introduction à Python] Comment arrêter la boucle en utilisant break?
[Introduction à Python] Utilisation basique de la bibliothèque matplotlib
[Livre technique] Introduction à l'analyse de données avec Python -1 Chapitre Introduction-
[Chapitre 4] Introduction à Python avec 100 coups de traitement du langage
Introduction à Python Django (2) Win
Introduction à la communication série [Python]
[Introduction à Python] <liste> [modifier le 22/02/2020]
Introduction à Python (version Python APG4b)
Une introduction à la programmation Python
Introduction à Python pour, pendant
[Python] Introduction au scraping | Programme d'ouverture de pages Web (sélénium webdriver)
[Part.2] Exploration avec Python! Cliquez sur la page Web pour vous déplacer!
Enregistrer des images sur le Web sur un lecteur avec Python (Colab)
[Introduction à Python] Comment obtenir des données avec la fonction listdir
[Présentation de l'application Udemy Python3 +] 58. Lambda
[Présentation de l'application Udemy Python3 +] 31. Commentaire
Laissez le traitement gênant à Python
Introduction à la bibliothèque de calcul numérique Python NumPy
Entraine toi! !! Introduction au type Python (conseils de type)
[Introduction à Python] <numpy ndarray> [modifier le 22/02/2020]
[Présentation de l'application Udemy Python3 +] 57. Décorateur
Introduction à Python Hands On Partie 1
[Introduction à Python] Comment analyser JSON
[Présentation de l'application Udemy Python3 +] 56. Clôture
Dans la commande python, python pointe vers python3.8