[Einführung in Python3 Tag 20] Kapitel 9 Enträtseln des Webs (9.1-9.4)

9.1 Webclient

9.1.1 Python-Standardwebbibliothek

Webclients und Servermodule waren in Python 2 nicht sehr gut organisiert. → In Python3 ist es in einem Paket zusammengefasst.

--http verwaltet die Details des Client-Server-HTTP. --client führt die clientseitige Verarbeitung durch. --server unterstützt die Webserverentwicklung mit Python. --cookies und Cookie-Gläser verwalten Cookies, in denen die erforderlichen Informationen über mehrere Besuche vor Ort hinweg gespeichert werden.

--urllib läuft auf http. --request verarbeitet die Anfrage des Kunden. --response verarbeitet die Serverantwort. --parse trennt die URL in Teile.


>>> 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'
#HTTP-Statuscode anzeigen.
#Eine 200 zeigt an, dass der gesamte Code funktioniert hat.
>>> print(conn.status)
200

#Datenformatanzeige
#Inhalt des HTTP-Antwortheaders-Angegeben nach Typ.
>>> 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 Über die Standardbibliothek hinaus


>>> 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 Webserver

9.2.1 Der einfachste Webserver mit 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 Webserver

python



#Für die Portnummer können andere Werte angegeben werden.
python -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
#127.0.0.1 :Kundenadresse
#Zuerst- :Remote-Benutzername
#Zweite- :Login Benutzername
#"GET / HTTP/1.1":An den Webserver gesendete Befehle
#GET ist eine HTTP-Methode./Ist die angeforderte Ressource (Stammverzeichnis) HTTP/1.1 ist die HTTP-Version.
#200:HTTP-Statuscode
127.0.0.1 - - [27/Jan/2020 20:09:04] "GET / HTTP/1.1" 200 -

9.2.2 WSGI Ein Durchbruch seit der Definition von WSGI, einer universellen API zwischen Pytho-Webanwendungen und Webservern.

9.2.3 Framework

Das Webframework bietet einige oder alle der folgenden Funktionen:

--Routing

9.2.4 Bottle

--Bottle wird nur mit Python-Dateien erstellt, daher ist es sehr einfach, die Bereitstellung zu versuchen.

Flascheninstallation



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

#So ordnen Sie die URL der unmittelbar darauf folgenden Funktion zu@Verwenden Sie den Routendekorateur.
#in diesem Fall,/(Startseite)Wird von der Home-Funktion verarbeitet.
@route("/")
def home():
    return "It is not fancy, but it is my home page"

#run()Die Funktion führt einen in die Flasche integrierten Python-Testwebserver aus.
run(host="localhost",port=9999)

Ausführungsanweisung



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

Ausführungsergebnis



#http://localhost:Zugriff auf 9999.
It is not fancy, but it is my home page

bottle2.py



#Lassen Sie die Flasche den Inhalt dieser Datei zurückgeben, wenn die Homepage angefordert wird.
from bottle import route, run, static_file

@route("/")
#Wurzel zeigt an"."Ist das aktuelle Verzeichnis.
def home():
    return static_file("index.html",root=".")

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

Ausführungsanweisung


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

Ausführungsergebnis



#http://localhost:9999/Zugriff auf.
My new and improved home page!!!

bottle3.py



from bottle import route, run, static_file

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

#Übergeben Sie Argumente per URL an die Funktion.
#echo()Argument Sache in der URL/echo/Ersetzen Sie das String-Argument nach.
@route("/echo/<thing>")
def echo(thing):
    return "Say hello to my little friend: %s" % thing

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

Ausführungsanweisung



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

Ausführungsergebnis



#http://localhost:9999/echo/Greifen Sie auf Mothra zu.
Say hello to my little friend: Mothra

--Wenn debug = True angegeben ist, wird eine Debug-Seite erstellt, wenn ein HTTP-Fehler zurückgegeben wird. --Wenn reloader = True ist, wird die Seite im Browser neu geladen, wenn Sie Änderungen an Ihrem Python-Code vornehmen.

9.2.5 Flask

Kolbeninstallation


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)

Ausführungsergebnis


#http://127.0.0.1:9999/Zugriff auf.
My new and improved home page!!!


#http://127.0.0.1:9999/echo/Geben Sie Godzilla in Ihren Browser ein.
Godzilla

--Flazk hat eine Vorlage namens 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=<thing>"flask2.html"
@app.route("/echo/<thing>")
def echo(thing):
    return render_template("flask2.html",thing=thing)


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

``


#http://127.0.0.1:9999/echo/

< Say hello to my little friend:Gamera >

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)

Wird einer Variablen namens thing zugewiesen und an übergeben. Ausführungsergebnis Geben Sie Gamera in den Browser ein. 9.2.5.1 Argumentübergabe in Form eines Teils des URL-Pfads Ausführungsergebnis



#http://127.0.0.1:9999/echo/Rodan/Besuchen Sie 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__)

#Als GET-Argument übergeben.
@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)

Ausführungsergebnis



#http://127.0.0.1:9999/echo/?thing=Gorgo&place=Besuchen Sie 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/")
#Vom Wörterbuch**Verwenden Sie diese Option, um den Schlüssel in ein Wörterbuch und falask3 umzuwandeln.Kann an HTML übergeben werden.
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 Andere Webserver als Python

9.2.7 Andere Frameworks

Es gibt viele.

9.3 Webdienste und Automatisierung

Das Web wird als leistungsstarke Methode zum Verbinden von Anwendungen und Daten in einer Vielzahl anderer Formate als HTML verwendet.

9.3.1 Web-API und REST

9.3.2 JSON

9.3.3 Krabbeln und Schaben

Für irgendwann studieren. "Scrapy Tutorial" https://doc-ja-scrapy.readthedocs.io/ja/latest/intro/tutorial.html

9.3.5 HTML-Scraping mit Beautiful Soup

9.4 Zuordnung überprüfen

Erstellen Sie eine Nur-Skelett-Website mit einem 9-1 Flask-Debug und einem zyklisierbaren Entwicklungswebserver. Der Server sollte mit dem Hostnamen localhost und Port 5000 gestartet werden.

flask9-1.py



from flask import Flask

app=Flask(__name__)

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

9-2 Fügen wir eine home () - Funktion hinzu, die Anforderungen für die Homepage verarbeitet. Richten Sie es so ein, dass die Zeichenfolge zurückgegeben wird. Es lebt.

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 Erstellen Sie eine jinja2-Vorlagendatei mit dem Namen home.html mit dem folgenden Inhalt.

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 Schreiben Sie die home () - Funktion des Servers neu, um die Vorlage home.html zu verwenden.

Übergeben Sie drei GET-Argumente, Ding, Höhe und Farbe, an die Funktion 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)

Impressionen

Ich habe das Web-System schnell überprüft. Selbst wenn ich diesen Bereich benutze, scheint er noch weit entfernt zu sein.

Verweise

"Einführung in Python3 von Bill Lubanovic (veröffentlicht von O'Reilly Japan)"

Recommended Posts

[Einführung in Python3 Tag 20] Kapitel 9 Enträtseln des Webs (9.1-9.4)
[Einführung in Python3 Tag 13] Kapitel 7 Zeichenfolgen (7.1-7.1.1.1)
[Einführung in Python3 Tag 14] Kapitel 7 Zeichenfolgen (7.1.1.1 bis 7.1.1.4)
[Einführung in Python3 Tag 15] Kapitel 7 Zeichenfolgen (7.1.2-7.1.2.2)
[Einführung in Python3 Tag 21] Kapitel 10 System (10.1 bis 10.5)
[Einführung in Python3, Tag 17] Kapitel 8 Datenziele (8.1-8.2.5)
[Einführung in Python3, Tag 17] Kapitel 8 Datenziele (8.3-8.3.6.1)
[Einführung in Python3 Tag 19] Kapitel 8 Datenziele (8.4-8.5)
[Einführung in Python3 Tag 18] Kapitel 8 Datenziele (8.3.6.2 bis 8.3.6.3)
[Einführung in Python3 Tag 12] Kapitel 6 Objekte und Klassen (6.3-6.15)
[Einführung in Python3, Tag 22] Kapitel 11 Parallele Verarbeitung und Vernetzung (11.1 bis 11.3)
[Einführung in Python3 Tag 11] Kapitel 6 Objekte und Klassen (6.1-6.2)
[Einführung in Python3, Tag 23] Kapitel 12 Werden Sie Paisonista (12.1 bis 12.6)
[Einführung in Python3 Tag 8] Kapitel 4 Py Skin: Codestruktur (4.1-4.13)
[Einführung in Python3 Tag 1] Programmierung und Python
[Einführung in Python3 Tag 3] Kapitel 2 Py-Komponenten: Numerische Werte, Zeichenfolgen, Variablen (2.2 bis 2.3.6)
[Einführung in Python3 Tag 2] Kapitel 2 Py-Komponenten: Numerische Werte, Zeichenfolgen, Variablen (2.1)
[Einführung in Python3 Tag 4] Kapitel 2 Py-Komponenten: Numerische Werte, Zeichenfolgen, Variablen (2.3.7 bis 2.4)
Einführung in die Überprüfung der Wirksamkeit Kapitel 1 in Python geschrieben
[Einführung in Python3 Tag 7] Kapitel 3 Py Tools: Listen, Taples, Wörterbücher, Mengen (3.3-3.8)
[Einführung in Python3 Tag 5] Kapitel 3 Py Tools: Listen, Taples, Wörterbücher, Sets (3.1-3.2.6)
[Einführung in Python3 Tag 10] Kapitel 5 Py's Cosmetic Box: Module, Pakete, Programme (5.4-5.7)
[Einführung in Python3 Tag 9] Kapitel 5 Py's Cosmetic Box: Module, Pakete, Programme (5.1-5.4)
[Einführung in Python3 Tag 6] Kapitel 3 Py-Tool-Liste, Tapple, Wörterbuch, Set (3.2.7-3.2.19)
Einführung in Python Bereiten wir die Entwicklungsumgebung vor
Einführung in OpenCV (Python) - (2)
Einführung in Python mit Atom (unterwegs)
[Einführung in den Algorithmus] Finden Sie den kürzesten Weg [Python3]
Einführung in die Überprüfung der Wirksamkeit Kapitel 2 in Python geschrieben
Tag 66 [Einführung in Kaggle] Die einfachste Titanic-Vorhersage
[Einführung in Python] Wie iteriere ich mit der Bereichsfunktion?
[Kapitel 5] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 3] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 2] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Einführung in die Udemy Python3 + -Anwendung] 27. Verwendung des Wörterbuchs
[Einführung in die Udemy Python3 + -Anwendung] 30. Verwendung des Sets
[Einführung in Python] Wie stoppe ich die Schleife mit break?
[Einführung in Python] Grundlegende Verwendung der Bibliothek matplotlib
[Technisches Buch] Einführung in die Datenanalyse mit Python -1 Kapitel Einführung-
[Kapitel 4] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Einführung in Python Django (2) Win
Einführung in die serielle Kommunikation [Python]
[Einführung in Python] <Liste> [Bearbeiten: 22.02.2020]
Einführung in Python (Python-Version APG4b)
Eine Einführung in die Python-Programmierung
Einführung in Python For, While
[Python] Einführung in das Scraping | Programm zum Öffnen von Webseiten (Selenium-Webdriver)
[Teil 2] Crawlen mit Python! Klicken Sie auf die Webseite, um sich zu bewegen!
Speichern Sie Bilder im Web mit Python (Colab) auf einem Laufwerk.
[Einführung in Python] So erhalten Sie Daten mit der Funktion listdir
[Einführung in die Udemy Python3 + -Anwendung] 58. Lambda
[Einführung in die Udemy Python3 + -Anwendung] 31. Kommentar
Überlassen Sie die mühsame Verarbeitung Python
Einführung in die Python Numerical Calculation Library NumPy
Trainieren! !! Einführung in Python Type (Type Hints)
[Einführung in Python] <numpy ndarray> [edit: 2020/02/22]
[Einführung in die Udemy Python3 + -Anwendung] 57. Decorator
Einführung in Python Hands On Teil 1
[Einführung in Python] So analysieren Sie JSON
[Einführung in die Udemy Python3 + -Anwendung] 56. Abschluss
Im Python-Befehl zeigt Python auf Python3.8