Python-Lernen - grundlegende Verwendung der Anforderungsbibliothek

Holen Sie sich eine Webseite

import requests 
r = requests. get('https://www.baidu.com/') 
print(type(r)) 
print(r. status_code) 
print (type(r. text)) 
print(r. text) 
print(r.cookies)

Verschiedene Anfragen

# 发送一个 HTTP POST 请求:
r = requests.post("http://httpbin.org/post",
data = {'key':'value'})
r = requests.delete('http://httpbin.org/delete')    
# 发送一个 HTTP delete 请求:
r = requests.head('http://httpbin.org/get')        
 # 发送一个 HTTP head 请求:
r = requests.options('http://httpbin.org/get')      
# 发送一个 HTTP options 请求:

Konstruieren Sie Parameter für die Übergabe von Get-Anforderungen

Verwenden Sie für GET-Anforderungen die Parameter params

import requests 
data={
    "key1":"value1",
    "key2":"value2"}
r = requests.get('http://httpbin.org/get', params=data)
print(r.url)
#http://httpbin.org/get?key1=value1&key2=value2

Sie können auch eine Liste als Wert übergeben

import requests 
data={
    "key1":"value1",
    "key2":["value2","value3"]}
r = requests.get('http://httpbin.org/get', params=data)
print(r.url)
#http://httpbin.org/get?key1=value1&key2=value2&key2=value3

Hinweis: Keiner der Schlüssel im Wörterbuch wird der URL-Abfragezeichenfolge hinzugefügt.

Darüber hinaus ist der Rückgabetyp der Webseite tatsächlich der Str-Typ, er ist jedoch sehr speziell und liegt im JSON-Format vor. Wenn Sie das zurückgegebene Ergebnis direkt analysieren und ein Wörterbuchformat erhalten möchten, können Sie die Methode json () direkt aufrufen. Beispiele sind wie folgt:

import requests 
r = requests.get('http://httpbin.org/get')
print(r.json())
'''
{'args': {}, 
'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.23.0', 'X-Amzn-Trace-Id': 'Root=1-5e9b0b15-4d6629f8460bc48037fa4244'}, 'origin': '124.164.123.240', 'url': 'http://httpbin.org/get'}
'''

Crawlen Sie das Web

Am Beispiel der Zhihu-News-Seite muss ein Anforderungsheader erstellt werden. Es kann in den Entwicklertools gefunden werden.

import requests 
headers={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0'
}
r = requests.get("https://daily.zhihu.com/",headers=headers)
print(r.text)

Natürlich können wir im Header-Parameter weitere Feldinformationen hinzufügen.

Binärdaten abrufen

Im obigen Beispiel haben wir eine Seite gepackt, von der wir wussten, die jedoch tatsächlich ein HTML-Dokument zurückgab. Was kann ich tun, wenn ich Bilder, Audio, Video usw. aufnehmen möchte?

Die Bild-, Audio- und Videodateien bestehen im Wesentlichen aus Binärcode. Aufgrund des spezifischen Speicherformats und der entsprechenden Analysemethode können wir nur diese verschiedenen Multimedia-Dateien sehen. Wenn Sie sie abrufen möchten, müssen Sie daher ihren Binärcode abrufen.

import requests 
r = requests.get("https://github.com/favicon.ico")
with open("favicon.jpg","wb") as f:
    f.write(r.content)

Hier wird die open () -Methode verwendet. Der erste Parameter ist der Dateiname, und der zweite Parameter repräsentiert das Öffnen in Form von binärem Schreiben, und binäre Daten können in die Datei geschrieben werden. Nach dem Ausführen wird im Ordner ein Symbol mit dem Namen favicon.ico angezeigt.

Erstellen Sie hier eine Schleifenanweisung, um kontinuierlich Daten abzurufen.

POST-Anfrage

import requests 
data ={'name ':'germey', 'age':'22'} 
r = requests.post("http://httpbin.org/post", data=data) 
print(r.text) 
#部分输出:
# "form": {
#   "age": "22", 
#  "name ": "germey"
#}

Der Formularteil sind die übermittelten Daten, die belegen, dass die POST-Anforderung erfolgreich gesendet wurde.

Antworte

Nach dem Senden der Anfrage wird die Antwort natürlich erhalten. Im obigen Beispiel haben wir Text und Inhalt verwendet, um den Inhalt der Antwort abzurufen. Darüber hinaus gibt es viele Attribute und Methoden, mit denen andere Informationen abgerufen werden können, z. B. Statuscodes, Antwortheader, Cookies usw.

import requests 
r = requests.get('http://www.baidu.com') 
print(type(r.status_code), r.status_code) 
print(type(r.headers), r.headers) 
print ( type(r.cookies), r.cookies)
print(type(r. url), r. url)
print(type(r.history), r.history) 

Hier drucken wir das Attribut status_code aus, um den Statuscode abzurufen, das Attribut headers, um den Antwortheader abzurufen, das Attribut cookies, um die Cookies abzurufen, das Attribut url, um die URL abzurufen, und das Attribut history, um den Anforderungsverlauf abzurufen.

Datei hochladen

import requests 
files = {'file' : open ('favicon.ico','rb')}
r = requests.post('http://httpbin.org/post', files=files) 
print(r.text) 

Es ist zu beachten, dass sich favicon.ico im selben Verzeichnis wie das aktuelle Skript befinden muss. Wenn es andere Dateien gibt, können Sie natürlich auch andere Dateien zum Hochladen verwenden. Ändern Sie einfach den Code.

Diese Website gibt eine Antwort zurück, die das Dateifeld enthält, und das Formularfeld ist leer. Dies zeigt, dass der Datei-Upload-Teil über ein separates Dateifeld verfügt, das identifiziert werden kann.

Kekse

Schauen Sie sich zuerst an, wie Sie Cookies bekommen

import requests 
r = requests.get('https://www.baidu.com') 
print(r.cookies) 
for key,value in r.cookies.items():
    print(key + '=' + value) 
#<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>
#BDORZ=27315

Hier rufen wir zuerst die Cookie-Eigenschaft auf, um das Cookie erfolgreich abzurufen. Wir können feststellen, dass es vom Typ RequestCookieJar ist. Verwenden Sie dann die Methode items (), um sie in eine Liste von Tupeln zu konvertieren, den Namen und den Wert jedes Cookies zu durchlaufen und auszugeben und die Cookie-Traversal-Analyse zu implementieren.

Wir können Cookies auch direkt verwenden, um den Anmeldestatus beizubehalten. Im Folgenden wird Zhihu als Beispiel verwendet.

import requests 

header={
    'Host':'www.zhihu.com',
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0',
    'Cookie':'_zap=4f14e95a-0cea-4c5e-b2f7-45cfd43f9809; d_c0="AJCZtnMxyBCPTgURbVjB11p6-JAwsTtJB4E=|1581092643"; _xsrf=VaBV0QQwGFjz01Q9n2AmjAilhHrJXypa; tst=h; q_c1=516c72a5ff954c66b6563ff42e63387d|1585814979000|1582104705000; tshl=; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1587179989,1587216876,1587216886,1587267050; capsion_ticket="2|1:0|10:1587267052|14:capsion_ticket|44:YTUwMDY3MGYyNmJlNDU0ZTgxNjlhNjMwNWNkYzAxNmQ=|7b8a5ebd3649fb076617379e734a79cd7ef54d1242ddd1841aba6844c9d14727"; l_cap_id="YjJiNjc1MzY0ZmEzNGNlYjlkYThkODEyYmEzOWRiOTk=|1587222516|5a01a93ea68209c1116647750ed2131efa309a3d"; r_cap_id="N2EwMjY0N2NlNTM1NGZlMjliNGNhMGJmOTkyMDc1OTE=|1587222516|238b677c781f1ef90a7ad343d6cdd3871aff3269"; cap_id="OTVhNjZiMDQ3MDkzNGVjY2I5ZTUyNTlhOTcxNzk3Njg=|1587222516|6dd1ed77526aa949bccd4146ef218d8164804a6e"; KLBRSID=031b5396d5ab406499e2ac6fe1bb1a43|1587267062|1587267049; Hm_lpvt_98beee57fd2ef70ccdd5ca52b9740c49=1587267062; SESSIONID=wopWDVALc4X3RJObFrIWNChoNDJpogYSdBPicuRm7vV; JOID=WlgXBkLsoG-SjPrGduF5tDN1xettk80YycmkhT2OnDWm0rGBFgxg_8GF8MN9HDmwsdmzwZheWKVLuonghNnDleo=; osd=V1gXB0vhoG-ThffGduBwuTN1xOJgk80ZwMSkhTyHkTWm07iMFgxh9syF8MJ0ETmwsNC-wZhfUahLuojpidnDlOM=; z_c0="2|1:0|10:1587267060|4:z_c0|92:Mi4xT2JORUJnQUFBQUFBa0ptMmN6SElFQ1lBQUFCZ0FsVk45Qk9KWHdEa0NUcXVheUJDdnJtRzRUVEFHNjFqQThvd013|bb30373e1f13c8b751a3ffc09e8ab4c98780350f77989d93b20be7eb3a0b2fad"'

}
r = requests.get('https://www.zhihu.com/hot',headers=header) 
print(r.text) 

Das Ergebnis enthält das Ergebnis nach der Anmeldung. Natürlich können Sie es auch über den Cookies-Parameter festlegen. Anschließend müssen Sie das RequestsCookieJar-Objekt erstellen und die Cookies aufteilen. Dies ist relativ umständlich

Sitzungswartung

Wenn Sie in Anfragen direkt Methoden wie get () oder post () verwenden, können Sie die Anfrage der Webseite zwar simulieren, dies entspricht jedoch tatsächlich verschiedenen Sitzungen, was bedeutet, dass Sie sie mit zwei Browsern geöffnet haben. Verschiedene Seiten.

Tatsächlich besteht die Hauptmethode zur Lösung dieses Problems darin, dieselbe Sitzung beizubehalten. Dies entspricht dem Öffnen eines neuen Browser-Tabs anstelle eines neuen Browsers. Aber ich möchte nicht jedes Mal Cookies setzen. Was soll ich tun? Zu diesem Zeitpunkt gibt es ein neues Waffensitzungsobjekt.

import requests 
s = requests.Session() 
s.get('http://httpbin.org/cookies/set/number/123456789') 
r = s.get('http://httpbin.org/cookies')
print(r.text) 
#{
#  "cookies": {
#    "number": "123456789"  }}

Mit Session können Sie dieselbe Sitzung simulieren, ohne sich um Cookies sorgen zu müssen. Es wird normalerweise verwendet, um den nächsten Vorgang nach einer erfolgreichen Anmeldung zu simulieren.

Überprüfung des SLL-Zertifikats

Darüber hinaus bieten Anforderungen auch die Funktion der Zertifikatsüberprüfung. Wenn eine HTTP-Anfrage gesendet wird, wird das SSL-Zertifikat überprüft. Mit dem Parameter verify können Sie steuern, ob dieses Zertifikat überprüft werden soll. Wenn der Überprüfungsparameter nicht hinzugefügt wird, ist der Standardwert True und wird automatisch überprüft.

Beispielsweise wird die 12306-Website von der offiziellen Zertifizierungsstelle nicht als vertrauenswürdig eingestuft.

import requests 
response = requests.get('https://www.12306.cn', verify=False) 
print(response.status_code)

Proxy-Einstellungen

Um zu verhindern, dass der Bestätigungscode nach mehreren Besuchen angezeigt wird oder zur Anmeldeauthentifizierungsseite springt, müssen wir einen Proxy einrichten, um dieses Problem zu lösen, für das Proxy-Parameter verwendet werden müssen. Es kann folgendermaßen eingestellt werden:

import requests 
proxies = { 'http':'http:10 .10.1.10:3128',
 'http':'http: //10.10.1.10: 1080', }
requests.get('https://www.taobao.com', proxies=proxies) 
#代理无效,请换用自己的代理

Anfragen unterstützen auch den SOCKS-Proxy.

Timeout-Einstellung

Wenn der lokale Netzwerkzustand nicht gut ist oder die Antwort des Servernetzwerks zu langsam oder gar nicht erfolgt, warten wir möglicherweise lange, bis wir eine Antwort erhalten, oder melden sogar einen Fehler, wenn wir schließlich keine Antwort erhalten. Um zu verhindern, dass der Server rechtzeitig reagiert, sollte eine Zeitüberschreitung festgelegt werden. Wenn nach dieser Zeit keine Antwort erfolgt, wird ein Fehler gemeldet. Dies erfordert den Timeout-Parameter. Die Berechnung dieser Zeit ist die Zeit, um die Anforderung an den Server zu senden und die Antwort zurückzugeben. Beispiele sind wie folgt:

import requests 
r=requests.get('https://www.taobao.com', timeout=1)
print(r.status_code) 

Wenn Sie ewig warten möchten, können Sie das Zeitlimit direkt auf Keine setzen oder es ohne Einstellung leer lassen, da der Standardwert Keine ist.

Authentifizierung

Anfragen bieten eine einfache Möglichkeit, ein Tupel zu schreiben. Standardmäßig wird die HTTPBasicAuth-Klasse zur Authentifizierung verwendet.

import requests 
r = requests.get('https://localhost:5000',
auth=(' username',' password'))

Anforderungen bieten auch andere Authentifizierungsmethoden, z. B. die OAuth-Authentifizierung.

Ich denke du magst

Origin www.cnblogs.com/lonely-ok/p/12731054.html
Empfohlen
Rangfolge