Introduction
Requests est écrit en python basé sur urllib, en utilisant la bibliothèque HTTP du protocole open source sous licence Apache2.Requests est plus pratique que urllib et peut nous faire économiser beaucoup de travail.
1. Installez
pip Installez rapidement les demandes d' installation de pip
Deuxièmement, utilisez
1, d'abord une chaîne de code
import requests response = requests.get("https://www.baidu.com") print(type(response)) print(response.status_code) print(type(response.text)) #Obtenir le contenu de l'en-tête de réponse print(response .headers) print(response.headers['content-type']) #Vous pouvez également obtenir le contenu de l'en-tête de la requête de cette manière print(response.request.headers) response.enconding = "utf-8' print( réponse.texte) impression(réponse.cookies) impression(réponse.contenu) impression(réponse.contenu.decode("utf-8"))
response.text renvoie le format Unicode, qui doit généralement être converti au format utf-8, sinon il sera brouillé. response.content est en mode binaire, vous pouvez télécharger des vidéos et autres, si vous voulez le regarder, vous devez le décoder au format utf-8.
Que ce soit via response.content.decode("utf-8) ou via response.encoding="utf-8", le problème des caractères brouillés peut être évité
2. Une grosse méthode de requête push
demandes d'importation demandes.post ("http://httpbin.org/post") demandes.put("http://httpbin.org/put") demandes.delete("http://httpbin.org/delete") demandes.head("http://httpbin.org/get") demandes.options("http://httpbin.org/get")
OBTENIR de base :
URL des demandes d'importation = 'https://www.baidu.com/' réponse = demandes.get(url) impression(response.text)
Requête GET avec paramètres :
si vous souhaitez interroger les paramètres spécifiques de la page http://httpbin.org/get, vous devez l'ajouter à l'url. Par exemple, si je veux voir s'il existe des données de Host =httpbin.org, le formulaire d'url doit être http ://httpbin.org/get?Host=httpbin.org
Les données soumises ci-dessous sont les données contenues dans les données envoyées à cette adresse.
requêtes d'importation url = 'http://httpbin.org/get' data = { 'name':'zhangsan', 'age':'25' } réponse = requests.get(url,params=data) print(response. url) print(response.text)
Données Json : à
partir des données ci-dessous, nous pouvons obtenir si le résultat :
1. La méthode response.json() dans les requêtes est équivalente à la méthode json.loads (response.text)
requêtes d'importation import json response = requests.get("http://httpbin.org/get") print(type(response.text)) print(response.json()) print(json.loads(response.text)) print(type(response.json()) print(response.json()['data'])
obtenir des données binaires
Le response.content est mentionné ci-dessus, les données obtenues de cette manière sont des données binaires, et la même méthode peut également être utilisée pour télécharger des images et des ressources vidéo
ajouter un en-tête
Tout d'abord, pourquoi ajouter un en-tête (informations d'en-tête) ? Par exemple, ci-dessous, nous essayons d'accéder à la page de connexion de Zhihu (bien sûr, si vous ne vous connectez pas à Zhihu, vous ne pourrez pas voir le contenu à l'intérieur), ce qui ne va pas si nous essayons de ne pas ajouter d'en-tête information.
URL des demandes d'importation = 'https://www.zhihu.com/' réponse = demandes.get (url) réponse.encodage = "utf-8" impression (réponse.texte)
résultat:
Il indique qu'une erreur de serveur interne s'est produite (c'est-à-dire que vous ne pouvez même pas télécharger le code HTML de la page de connexion Zhihu).
<html><body><h1>500 Server Error</h1> Une erreur de serveur interne s'est produite. </body></html>
Si vous souhaitez y accéder, vous devez ajouter des informations d'en-tête.
requêtes d'importation url = 'https://www.zhihu.com/' headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, comme Gecko) Chrome/57.0.2987.133 Safari/537.36' } réponse = requests.get(url,headers=headers) print(response.text)
Demande de publication de base :
envoyez des données à l'adresse URL par la poste, ce qui équivaut à soumettre les données sous la forme d'un dictionnaire
import requests url = 'http://httpbin.org/post' data = { 'name':'jack', 'age':'23' } response = requests.post(url,data=data) print(response. texte)
résultat:
{ "args": {}, "data": "", "files": {}, "form": { "age": "23", "name": "jack" }, "headers": { " Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Connection": "close", "Content-Length": "16", "Content-Type": "application/x- www-form-urlencoded", "Host": "httpbin.org", "User-Agent": "python-requests/2.13.0" }, "json": null, "origine": "118.144.137.95", "url": "http://httpbin.org/post" }
réponse:
import requests #allow_redirects=False#Régler cette propriété sur False signifie que la redirection n'est pas autorisée, sinon elle peut être redirigée response = requests.get("http://www.baidu.com",allow_redirects=False) #Imprimer la requête page Status (status code) print(type(response.status_code),response.status_code) #Imprime toutes les informations d'entêtes de la requête URL print(type(response.headers),response.headers) #Imprime les informations de cookies de la requête URL print(type( response.cookies),response.cookies) #Imprime l'adresse de la requête URL print(type(response.url),response.url) #Imprime l'historique de la requête (affiché sous forme de liste ) print(type(response.history), response.history)
Codes d'état intégrés :
deja_reporte',), 226: ('im_use',), # Redirection. 300 : ('choix_multiples',), 302 : ('trouvé',), 301 : ('moved_permanently', 'moved', '\\o-'), 303 : ('see_other', 'other'), 304 : ('not_modified',), 305 : ('use_proxy',), 306 : ('switch_proxy',), 307 : ('temporary_redirect', 'temporary_moved', 'temporary'), 308: ('permanent_redirect', 'resume_incomplete', 'resume',), # Ces 2 à supprimer dans 3.0 # Erreur client. 400 : ('bad_request', 'bad'), 401 : ('unauthorized',), 402 : ('payment_required', 'payment'), 403 : ('forbidden',), 404 : ('not_found', ' -o-'), 405 : ('method_not_allowed', 'not_allowed'), 406 : ('not_acceptable', 411 : ('length_required',), 412 : ('precondition_failed', 'precondition'), 413 : ('request_entity_too_large',), 414 : ('request_uri_too_large',), 415 : ('unsupported_media_type', 'unsupported_media', 'media_type'), 416 : ('requested_range_not_satisfiable', 'requested_range', 'range_not_satisfiable'), 417 : ('expectation_failed',), 418 : ('im_a_teapot', 'teapot', 'i_am_a_teapot'), 421 : (' misdirected_request',), 422 : ('unprocessable_entity', 'unprocessable'), 423 : ('locked',), 424 : ('failed_dependency', 'dependency'), 425 : (' 429 : ('too_many_requests', 'too_many'), 426: ('upgrade_required', 'upgrade'), 428 : ('precondition_required', 'precondition'), 431 : ('header_fields_too_large', 'fields_too_large'), 444 : ('no_response', 'none'), 449 : ('retry_with', 'retry'), 450 : ('blocked_by_windows_parental_controls', 'parental_controls'), 451 : ('unavailable_for_legal_reasons', 'legal_reasons'), 499 : ('client_closed_request',), # Erreur de serveur. 500 : ('internal_server_error', 'server_error', '/o\\', '✗'), 501 : ('not_implemented',), 502 : ('bad_gateway',), 503 : ('service_unavailable', 'unavailable '), 504 : ('gateway_timeout',), 505 : ('http_version_not_supported', 'http_version'), 506 : 511 : ('network_authentication_required', 'network_auth', 'network_authentication')
import requests response = requests.get('http://www.jianshu.com/404.html') # Utilisez les lettres intégrées de la requête pour déterminer le code d'état # Si le code d'état renvoyé par la réponse est anormal , il renverra une erreur 404 en cas de réponse . //www.jianshu.com') si réponse .status_code == 200 : print('200')
Opérations avancées pour les requêtes
Téléchargement de fichiers
requêtes d'importation url = "http://httpbin.org/post" files= {"files":open("test.jpg","rb")} réponse = requests.post(url,files=files) print(response .texte)
résultat:
obtenir des cookies
import requests response = requests.get('https://www.baidu.com') print(response.cookies) for key,value in response.cookies.items() : print(key,'==',value)
entretien de session
L'une des fonctions des cookies est qu'ils peuvent être utilisés pour simuler la connexion et maintenir la session
requêtes d'importation session = requests.session() session.get('http://httpbin.org/cookies/set/number/12456') réponse = session.get('http://httpbin.org/cookies') impression (réponse.texte)
Différence entre cookie et session
Les données du cookie sont stockées sur le navigateur du client et les données de session sont stockées sur le serveur. Le
cookie n'est pas très sûr. D'autres peuvent analyser le cookie stocké localement et utiliser le cookie pour tromper la
session. La session sera enregistrée sur le serveur pendant un certain temps. Lorsque le nombre de visites augmente, cela monopolise les performances de votre serveur.
Les données enregistrées par un seul cookie ne peuvent pas dépasser 4K. De nombreux navigateurs limitent un site à enregistrer un maximum de 20 cookies.
Vérification du certificat
1. Accès sans certificat
import requests response = requests.get('https://www.12306.cn') # Lors de la demande https, la requête vérifiera le certificat. Si la vérification échoue, une exception sera levée print(response.status_code)
Erreur:
Désactiver la vérification des certificats
demandes d'importation # Désactivez la vérification, mais signalez toujours la réponse d'avertissement du certificat = requests.get('https://www.12306.cn',verify=False) print(response.status_code)
Afin d'éviter cette situation, vous pouvez passer verify=False, mais de cette façon vous pouvez accéder aux résultats de la page
Éliminer les alertes pour la validation des certificats
from requests.packages import urllib3 import requests urllib3.disable_warnings() response = requests.get('https://www.12306.cn',verify=False) print(response.status_code)
Autres opérations
#Convertir l'objet cookie en dictionnaire requests.utils.dict_from_cookiejar #Convertir le dictionnaire en objet cookie requests.utils.cookiejar_from_dict #url decoding requests.utils.unquote () #url encoding requests.utils.quote ()
Configurer manuellement les certificats
requêtes d'importation réponse = requests.get('https://www.12306.cn', cert=('/path/server.crt', '/path/key')) print(response.status_code)
paramètres du proxy
Fondamentaux du proxy
Proxy direct et proxy inverse
Proxy de transfert : le navigateur sait clairement à quel serveur accéder, mais il n'est pas joignable pour le moment. Il doit utiliser un proxy pour l'aider à effectuer cette opération de requête.
Proxy inverse : le navigateur ne sait rien du serveur à demander et doit demander via Nginx.
Configurer un proxy normal
import request proxies = { "http": "http://127.0.0.1:9743", "https": "https://127.0.0.1:9743", } réponse = requests.get("https://www .taobao.com", proxys = proxys) impression (response.status_code)
2. Définir le nom d'utilisateur et le proxy de mot de passe
définir des chaussettes proxy
Installer le module chaussettes pip3 install 'requests[socks]'
import request proxies = { 'http': 'socks5://127.0.0.1:9742', 'https': 'socks5://127.0.0.1:9742' } réponse = requests.get("https://www. taobao.com", proxys = proxys) impression (response.status_code)
réglage du délai d'attente
La période de temporisation peut être définie par le paramètre de temporisation
import requests from requests.exceptions import ReadTimeout try: # Définir la réponse doit être reçue dans les 500 ms, sinon ou lancer une exception ReadTimeout response = requests.get("http://httpbin.org/get", timeout=0.5) print( response.status_code) sauf ReadTimeout : print('Timeout')
Paramètres d'authentification
Si vous rencontrez un site Web qui nécessite une authentification, vous pouvez utiliser le module requests.auth pour obtenir
importer des requêtes à partir de requests.auth import HTTPBasicAuth <br>#方法一 r = requests.get('http://120.27.34.24:9001', auth=HTTPBasicAuth('user', '123'))<br> #方法二<br>r = requests.get('http://120.27.34.24:9001', auth=('user', '123')) print(r.status_code)
gestion des exceptions
Les exceptions concernant les requêtes peuvent être trouvées ici : http://www.python-requests.org/en/master/api/#exceptions
Toutes les exceptions sont dans les demandes.exceptons
À partir du code source, nous pouvons voir que
RequestException hérite de IOError,
HTTPError, ConnectionError, Timeout hérite de RequestionException, ProxyError, SSLError hérite de ConnectionError et
ReadTimeout hérite de l'exception Timeout
Voici quelques relations d'héritage d'exception courantes, qui peuvent être trouvées en détail : http://cn.python-requests.org/zh_CN/latest/_modules/requests/exceptions.html#RequestException
Démonstration simple avec l'exemple suivant
importer des requêtes à partir de requests.exceptions importer ReadTimeout, ConnectionError, RequestException essayer : response = requests.get("http://httpbin.org/get", timeout = 0.5) print(response.status_code) except ReadTimeout : print('Timeout' ) sauf ConnectionError : print('Erreur de connexion') excepté RequestException : print('Error')
La première exception à intercepter est le délai d'attente. Lorsque le transport déconnecte le réseau, ConnectionError sera intercepté. Si les exceptions précédentes ne sont pas interceptées, elles peuvent également être interceptées par RequestExctption.
Supplémentaire:
contenu du serveur
# 1. Lire le contenu de la réponse du serveur
r.text
# Requête de codage du texte, vous pouvez utiliser la propriété r.encoding pour le modifier
r.encoding
# 2. Contenu de la réponse binaire, accéder au corps de la réponse de la requête en octets, pour les non- requêtes
textuelles r.content
# 3. Contenu de la réponse JSON, décodeur JSON intégré pour vous aider à traiter les données JSON
r.json()
# Obtenez la réponse brute du socket du serveur
r.raw
Merci à tous ceux qui ont lu attentivement mon article, en observant la montée et l'attention des fans en cours de route, il y a toujours un besoin d'échanges de cadeaux, bien que ce ne soit pas une chose très précieuse, si vous pouvez l'utiliser, vous pouvez le prendre directement :
① Plus de 2000 livres électroniques Python (des livres grand public et classiques devraient être disponibles)
② Informations sur la bibliothèque standard Python (la version chinoise la plus complète)
③ Code source du projet (quarante ou cinquante projets de formation intéressants et classiques et code source)
④ Vidéos sur l'introduction de base à Python, au crawler, au développement Web et à l'analyse de données volumineuses (adaptées à l'apprentissage des novices)
⑤ Feuille de route d'apprentissage Python (dites adieu à l'apprentissage inexpérimenté)
Dans mon groupe d'échange technique QQ (échange technique et partage de ressources, des publicités arrivent pour vous interrompre)
Vous pouvez l'emporter par vous-même.L'information gratuite dans le numéro de groupe 913569736 (notez "csdn000") est l'essence de plus de dix ans de carrière de testeur de l'auteur. Il existe également des dieux pairs pour échanger de la technologie ensemble.
Le matériel d'apprentissage peut être trouvé par nos remarques Miss Beibei [mashan-qq] [csdn000] gratuitement
【Doit noter】Sinon ça ne passera pas