Python Tutorial
- jetzt Python programmieren lernen

Bibliothek requests – jede Ressource online nutzen

Wir können über die Bibliothek requests einfach Zugriffe auf Onlineinhalte durchführen.

Zuvor muss die Bibliothek über PIP installiert werden:

pip install requests

Als Rückmeldung erhalten wir:

mac:Python-lernen.de axelpratzner$ pip install requests
Collecting requests
Downloading requests-2.23.0-py2.py3-none-any.whl (58 kB)
|████████████████████████████████| 58 kB 471 kB/s
Collecting chardet4,=3.0.2
Downloading chardet-3.0.4-py2.py3-none-any.whl (133 kB)
|████████████████████████████████| 133 kB 1.0 MB/s
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages (from requests) (1.25.8)
Requirement already satisfied: idna<3,>=2.5 in /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages (from requests) (2.9)
Collecting certifi>=2017.4.17
Downloading certifi-2019.11.28-py2.py3-none-any.whl (156 kB)
|████████████████████████████████| 156 kB 1.3 MB/s
Installing collected packages: chardet, certifi, requests
Successfully installed certifi-2019.11.28 chardet-3.0.4 requests-2.23.0

Wollen wir jetzt einen Inhalt herunterladen wie z.B. die Website www.example.com, dann klappt das in einem Dreizeiler:

import requests
r = requests.get('https://www.example.com/')
print(r.text)

Wir erhalten darauf den kompletten HTML-Code der Seite angezeigt:

<!doctype html>
<html>
<head>
    <title>Example Domain</title>
    <meta charset="utf-8" />
…

Das klappt sowohl bei http bei wie auch bei https – also kein Problem mit SSL-Zertifikaten.

Zum Überprüfen des HTTP-Status-Codes gibt es die Anweisung r.status_code

import requests
r = requests.get('https://www.example.com/')
print (r.status_code)

Als Rückmeldung erhalten wir „200“ – also lief gut!

Wollen wir nur die Information, ob es geklappt hat oder nicht: r.ok

Online-Grafikdatei herunterladen

Wollen wir ein Bild von einer Website herunterladen, dann klappt das ebenso einfach. Wir wollen von unserer Python Kurs das GIF-Bild mit der animierten Biene herunterladen. Dazu benötigen wir die URL „https://www.python-lernen.de/bilder/biene-sprite-animiert-01.gif“ (rechte Maustaste auf das Bild und „Bild in neuem Tab öffnen“ gibt uns die URL)

Anstelle des Inhalts als r.text bekommen wir diesen als r.content ausgelesen.

import requests
r = requests.get('https://www.python-lernen.de/bilder/biene-sprite-animiert-01.gif')
print(r.content)

Geben wir den Inhalt direkt auf dem Bildschirm aus sehen wir anhand der Anfangszeichen, dass es sich um eine binäre Datei (b') handelt und um das Grafikformat GIF.

b'GIF89a2�w!�

Diesen Inhalt können wir nun auch direkt abspeichern:

import requests
r = requests.get('https://www.python-lernen.de/bilder/biene-sprite-animiert-01.gif')

with open('biene.gif', 'wb') as f:
    f.write(r.content)

Jetzt befindet sich in unserem Verzeichnis eine Grafikdatei mit dem Namen „biene.gif“. Einfach mal nachsehen ;)

header-Daten auslesen einer Internetseite

Sehr einfach können wir die header-Inforamtionen von einer Online-Quelle erhalten. Wir erhalten diese über r.headers:

import requests
r = requests.get('https://www.example.com/')
print (r.status_code)
print (r.ok)
print (r.headers)

Wir erhalten diese in Form des Datentyps Dictionary:

{'Content-Encoding': 'gzip', 'Accept-Ranges': 'bytes', 'Age': '9820', 'Cache-Control': 'max-age=604800', 'Content-Type': 'text/html; charset=UTF-8', 'Date': 'Sat, 29 Feb 2020 11:00:04 GMT', 'Etag': '"3147526947"', 'Expires': 'Sat, 07 Mar 2020 11:00:04 GMT', 'Last-Modified': 'Thu, 17 Oct 2019 07:18:26 GMT', 'Server': 'ECS (nyb/1D2F)', 'Vary': 'Accept-Encoding', 'X-Cache': 'HIT', 'Content-Length': '648'}

Parameter übermitteln über get/post

Die Bibliothek unterstützt das einfache übermitteln von Parametern sowohl mit „get“ wie auch „post“. Der Online-Dienst https://httpbin.org/ ermöglicht das einfach Testen der jeweiligen Anfragen:

import requests

payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post("https://httpbin.org/post", data=payload)
print (r.text)

print (r.status_code)
print (r.ok)

Als Rückmeldung erhalten wir:

{
"args": {},
"data": "",
"files": {},
"form": {
"key1": "value1",
"key2": "value2"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "23",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.23.0",
"X-Amzn-Trace-Id": "Root=1-5e5a4638-d6b461203ebe5a0becaf4e4c"
},
"json": null,
"origin": "79.197.98.81",
"url": "http://httpbin.org/post"
}

200

True

Oder das gleiche Spiel mit „get“:

import requests
payload = {'schluessel1': 'wert1', 'schluessel2': 'wert2'}
r = requests.get("http://httpbin.org/get", params=payload)
print (r.text)

Als Rückmeldung erhalten wir:

{

"args": {
"schluessel1": "wert1",
"schluessel2": "wert2"
},

"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.23.0",
"X-Amzn-Trace-Id": "Root=1-5e5a46eb-f349c1c4e9543820b57730d8"
},

"origin": "79.197.98.81",
"url": "http://httpbin.org/get?schluessel1=wert1&schluessel2=wert2"
}

Die Bibliothek erzeugt also die korrekten Parameter und kümmert sich um die korrekte Übergabe.

Anstelle von einer Textrückgabe können wir auch es Form von JSON erhalten. Dazu einfach folgende Zeile ändern:

import requests
payload = {'schluessel1': 'wert1', 'schluessel2': 'wert2'}
r = requests.get("http://httpbin.org/get", params=payload)
r_dict = r.json()
print(r_dict['args'])

Rückgabe:

{'schluessel1': 'wert1', 'schluessel2': 'wert2'}

Auth-Zugang - geschütze Bereiche nutzen

Geschütze Bereiche können auch über requests genutzt werden (sofern man die Zugangsdaten kennt). Bei der üblichen Nutzung der Auth-Methode über die .htaccess bekommt man normalerweise die Eingabeaufforderung über den Browser.

Diese kann man über requests „übergehen“:

import requests
r = requests.get('http://httpbin.org/basic-auth/a/b', auth=('a', 'b'))
print (r.status_code)
print (r.ok)
print (r.text)

Als Rückmeldung erhalten wir:

200
True
{
"authenticated": true,
"user": "a"
}

Verzögerungen einplanen

Wenn der Zugriff auf die Online-Ressource länger dauert, kann man diese Verzögerung „einplanen“.

Wir geben der Anweisung request.get(url, timeout=5) einen entsprechenden Wert bei dem Parameter timeout mit.

Website Hersteller

Weitere Informationen (auch in deutscher Übersetzung) findet sich auf der Programmierer-Websites der Bibliothek requests unter:
https://requests.readthedocs.io/de/latest/index.html

Weiterempfehlen • Social Bookmarks • Vielen Dank

Bitte unterstützen Sie dieses Projekt

Sie können dieses Projekt in verschiedenen Formen unterstützen - wir würden uns freuen und es würde uns für weitere Inhalte motivieren :).

Empfehlen Sie es weiter - wir freuen uns immer über Links und Facebook-Empfehlungen.

Das neue E-Book zum Kurs gibt es zum Kaufen.

Sie können uns auch eine Spende über PayPal zukommen lassen.

Bestellen Sie Bücher über folgenden Link bei Amazon:
Bücher über Python

Vielen Dank für Ihre Unterstützung