Ausführliche Erklärung zur Verwendung des Requests-Moduls von Python

巴扎黑
Freigeben: 2017-08-16 13:20:56
Original
1942 Leute haben es durchsucht

Das Requests-Modul ist ein Modul, das für den Netzwerkzugriff verwendet wird. Tatsächlich gibt es viele ähnliche Module, wie z. B. urllib, urllib2, httplib, httplib2. Sie bieten grundsätzlich ähnliche Funktionen. Warum kann das Requests-Modul hervorstechen? Sie können die offizielle Website öffnen und einen Blick darauf werfen. Es handelt sich um ein http-Modul für „Menschen“. Wie menschlich ist es also? Ich glaube, wenn Sie schon einmal Module wie urllib verwendet haben, werden Sie feststellen, dass es tatsächlich sehr benutzerfreundlich ist.

1. Importieren

Nach Abschluss des Downloads ist der Import des Moduls wie folgt:

import requests
Nach dem Login kopieren

2. URL anfordern

Hier listen wir die gebräuchlichste Syntax zum Senden von Get- oder Post-Anfragen auf.

1. Senden Sie eine Get-Anfrage ohne Parameter:

r=requests.get("http://php.cn/justTest")
Nach dem Login kopieren
Jetzt erhalten wir ein Antwortobjekt r, wir können dieses Objekt verwenden, um alle gewünschten Informationen abzurufen.

Im obigen Beispiel hat die Get-Anfrage keine Parameter. Was ist, wenn die Anfrage Parameter erfordert?

2. Senden Sie eine Get-Anfrage mit Parametern

payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("http://php.cn/justTest", params=payload)
Nach dem Login kopieren
Wie wir aus dem oben Gesagten wissen, werden unsere Get-Parameter als params-Schlüsselwortparameter übergeben.

Wir können die angeforderte spezifische URL ausdrucken, um zu sehen, ob sie korrekt ist:

>>>print r.url
http://pythontab.com/justTest?key2=value2&key1=value1
Nach dem Login kopieren
Sie können sehen, dass tatsächlich auf die richtige URL zugegriffen wurde.

Sie können auch eine Liste an einen Anforderungsparameter übergeben:

>>> payload = {'key1': 'value1', 'key2': ['value2', 'value3']}
>>> r = requests.get("http://php.cn/justTest", params=payload)
>>> print r.url
http://pythontab.com/justTest?key1=value1&key2=value2&key2=value3
Nach dem Login kopieren
Das Obige ist die Grundform der Get-Anfrage.

3. Senden Sie eine Post-Anfrage

r = requests.post("http://php.cn/postTest", data = {"key":"value"})
Nach dem Login kopieren
Wie Sie oben sehen können, werden die Post-Anfrageparameter als Datenschlüsselwortparameter übergeben.

Der aktuelle Datenparameter übergibt ein Wörterbuch. Wir können auch Daten im JSON-Format wie folgt übergeben:

>>> import json
>>> import requests
>>> payload = {"key":"value"}
>>> r = requests.post("http://php.cn/postTest", data = json.dumps(payload))
Nach dem Login kopieren
Da es zu üblich ist, Daten im JSON-Format im Modul „Anfragen“ zu senden In der höheren Version wurde der Schlüsselwortparameter json hinzugefügt. Sie können JSON-Daten direkt an die Post-Anfrage senden, ohne das JSON-Modul zu verwenden:

>>> payload = {"key":"value"}
>>> r = requests.post("http://php.cn/postTest", json=payload)
Nach dem Login kopieren
Was ist, wenn wir eine Datei veröffentlichen möchten? ? Zu diesem Zeitpunkt müssen Sie den Dateiparameter verwenden:

>>> url = 'http://php.cn/postTest'
>>> files = {'file': open('report.xls', 'rb')}
>>> r = requests.post(url, files=files)
>>> r.text
Nach dem Login kopieren
Wir können beim Posten der Datei auch zusätzliche Informationen wie den Dateinamen angeben:

>>> url = 'http://php.cn/postTest'
>>> files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
>>> r = requests.post(url, files=files)
Nach dem Login kopieren
Tipps: Das ist es Es wird dringend empfohlen, den Binärmodus zu verwenden. Öffnen Sie die Datei, denn wenn Sie sie im Textdateiformat öffnen, kann aufgrund des Headers „Content-Length“ ein Fehler auftreten.

Wie Sie sehen, ist das Senden von Anfragen mit Requests einfach!

3. Erhalten Sie die Rücksendeinformationen

Schauen wir uns an, wie Sie die Rücksendeinformationen nach dem Absenden der Anfrage erhalten. Verwenden wir weiterhin das obere Beispiel:

>>> import requests
>>> r=requests.get('http://php.cn/justTest')
>>> r.text
Nach dem Login kopieren
In welchem ​​Kodierungsformat wird r.text ausgegeben?


>>> r.encoding
'utf-8'
Nach dem Login kopieren
wurde ursprünglich im UTF-8-Format ausgegeben. Was ist, wenn ich das Ausgabeformat von r.text ändern möchte?

>>> r.encoding = 'ISO-8859-1'
Nach dem Login kopieren
Dadurch wird das Ausgabeformat auf „ISO-8859-1“ geändert.

Es gibt auch eine Ausgabeanweisung namens r.content. Was ist also der Unterschied zwischen dieser und r.text? r.content gibt einen Byte-Stream zurück, der verwendet werden kann, wenn wir eine Bildadresse anfordern und das Bild speichern möchten. Hier ist ein Codeausschnitt wie folgt:

def saveImage( imgUrl,imgName ="default.jpg" ):
    r = requests.get(imgUrl, stream=True)
    image = r.content
    destDir="D:\"
    print("保存图片"+destDir+imgName+"\n")
    try:
        with open(destDir+imgName ,"wb") as jpg:
            jpg.write(image)     
            return
    except IOError:
        print("IO Error")
        return
    finally:
        jpg.close
Nach dem Login kopieren
Der gerade eingeführte r.text gibt Folgendes zurück: eine Zeichenfolge. Wenn die der Anfrage entsprechende Antwort ein JSON ist, kann ich die Daten dann direkt im JSON-Format abrufen? r.json() ist dafür vorbereitet.

Wir können auch die vom Server zurückgegebenen Originaldaten erhalten, indem wir einfach r.raw.read() verwenden. Wenn Sie jedoch wirklich die ursprünglichen Rückgabedaten erhalten möchten, denken Sie daran, bei der Anfrage die Option „stream=True“ hinzuzufügen, z. B.:

r = requests.get('https://api.github.com/events', stream=True)。
Nach dem Login kopieren
Wir können auch den Antwortstatuscode abrufen:

>>> r = requests.get('http://php.cn/justTest')
>>> r.status_code
200
Nach dem Login kopieren
Sie können request.codes.ok auch verwenden, um auf den Rückgabewert von 200 zu verweisen:

>>> r.status_code == requests.codes.ok
True
Nach dem Login kopieren
4. Bezüglich Header

Wir können den Antwortheader ausdrucken :

>>> r= requests.get("http://php.cn/justTest")
>>> r.headers
Nach dem Login kopieren
`r.headers` gibt ein Wörterbuch zurück, zum Beispiel:

{
    'content-encoding': 'gzip',
    'transfer-encoding': 'chunked',
    'connection': 'close',
    'server': 'nginx/1.0.4',
    'x-runtime': '147ms',
    'etag': '"e1ca502697e5c9317743dc078f67693a"',
    'content-type': 'application/json'
}
Nach dem Login kopieren
Wir können die folgende Methode verwenden, um einige Antwortheader zur Beurteilung zu erhalten:

r.headers['Content-Type']
Nach dem Login kopieren
Oder

r.headers.get('Content-Type')
Nach dem Login kopieren
Was ist, wenn wir den Anforderungsheader (d. h. die Header-Informationen, die wir an den Server senden) erhalten möchten? Kann direkt über r.request.headers abgerufen werden.

Gleichzeitig können wir beim Anfordern von Daten auch benutzerdefinierte Header (durch Header-Schlüsselwortparameter übergeben) hinzufügen:

>>> headers = {'user-agent': 'myagent'}
>>> r= requests.get("http://php.cn/justTest",headers=headers)
Nach dem Login kopieren
5 Über Cookies

Wenn a Antwort Cookies enthält, können wir die folgende Methode verwenden, um sie abzurufen:

>>> url = 'http://www.php.cn'
>>> r = requests.get(url)
>>> r.cookies['example_cookie_name']
'example_cookie_value'
Nach dem Login kopieren
Wir können auch unsere eigenen Cookies senden (unter Verwendung des Schlüsselwortparameters Cookies):

>>> url = 'http://php.cn/cookies'
>>> cookies={'cookies_are':'working'}
>>> r = requests.get(url, cookies=cookies)
Nach dem Login kopieren
6. Über Umleitung

Manchmal, wenn wir eine URL anfordern, leitet der Server unsere Anfrage automatisch um. Beispielsweise leitet Github unsere http-Anfrage auf eine https-Anfrage um. Wir können r.history verwenden, um Weiterleitungen anzuzeigen:

>>> r = requests.get('http://php.cn/')
>>> r.url
'http://php.cn/'
>>> r.history
[]
Nach dem Login kopieren
Wie Sie im obigen Beispiel sehen können, verwenden wir das http-Protokoll für den Zugriff, aber in r.url wird das https-Protokoll gedruckt. Was soll ich also tun, wenn ich darauf bestehe, dass der Server das http-Protokoll verwendet, was bedeutet, dass dem Server die automatische Umleitung untersagt ist? Verwenden Sie den Parameter „allow_redirects“:

r = requests.get('http://php.cn', allow_redirects=False)
Nach dem Login kopieren
7. Über die Anfragezeit

Wir können den Timeout-Parameter verwenden, um das Anfrage-Timeout der URL festzulegen (Zeiteinheit ist Sekunden):

requests.get('http://php.cn', timeout=1)
Nach dem Login kopieren
8. Informationen zum Proxy

Wir können im Programm auch einen Proxy für den http- oder https-Zugriff angeben (mithilfe der Schlüsselwortparameter „proxies“), wie folgt:

proxies = {
  "http": "http://10.10.1.10:3128",
  "https": "http://10.10.1.10:1080",
}
requests.get("http://php.cn", proxies=proxies)
Nach dem Login kopieren

九、关于session

我们有时候会有这样的情况,我们需要登录某个网站,然后才能请求相关url,这时就可以用到session了,我们可以先使用网站的登录api进行登录,然后得到session,最后就可以用这个session来请求其他url了:

s=requests.Session()
login_data={'form_email':'youremail@example.com','form_password':'yourpassword'}
s.post("http://pythontab.com/testLogin",login_data)
r = s.get('http://pythontab.com/notification/')
print r.text
Nach dem Login kopieren

其中,form_email和form_password是豆瓣登录框的相应元素的name值。

十、下载页面

使用Requests模块也可以下载网页,代码如下:

r=requests.get("http://www.php.cn")
with open("haha.html","wb") as html:
    html.write(r.content)
html.close()
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung zur Verwendung des Requests-Moduls von Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage