L'utilisation de base des requêtes python les plus populaires sur l'ensemble du réseau

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

Je suppose que tu aimes

Origine blog.csdn.net/csdnchengxi/article/details/122650397
conseillé
Classement