Maison  >  Article  >  développement back-end  >  Comment Python utilise les requêtes pour demander des pages Web

Comment Python utilise les requêtes pour demander des pages Web

WBOY
WBOYavant
2023-04-25 09:29:011684parcourir

Requests hérite de toutes les fonctionnalités de urllib2.

Requests prend en charge la persistance des connexions HTTP et le regroupement de connexions, prend en charge l'utilisation de cookies pour maintenir les sessions, prend en charge le téléchargement de fichiers, prend en charge la détermination automatique de l'encodage du contenu de la réponse et prend en charge les URL internationalisées et l'encodage automatique des données POST.

Méthode d'installation

Utilisez pip pour installer

$ pip install requests

Requête GET

Requête GET de base (paramètres d'en-tête et paramètres parmas)

1. La requête GET la plus basique peut utiliser directement la méthode get'

response = requests.get("http://www.baidu.com/")
 
# 也可以这么写
# response = requests.request("get", "http://www.baidu.com/")

. 2 .Ajouter des en-têtes et des paramètres de requête

Si vous souhaitez ajouter des en-têtes, vous pouvez transmettre le paramètre headers pour ajouter des informations d'en-tête dans l'en-tête de la requête.

Si vous souhaitez transmettre des paramètres dans l'url, vous pouvez utiliser le paramètre params.

import requests
 
kw = {'wd':'长城'}
 
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
 
# params 接收一个字典或者字符串的查询参数,字典类型自动转换为url编码,不需要urlencode()
response = requests.get("http://www.baidu.com/s?", params = kw, headers = headers)
 
# 查看响应内容,response.text 返回的是Unicode格式的数据
print (response.text)
 
# 查看响应内容,response.content返回的字节流数据
print (respones.content)
 
# 查看完整url地址
print (response.url)
 
# 查看响应头部字符编码
print (response.encoding)
 
# 查看响应码
print (response.status_code)

Résultats d'exécution

...

...

'http://www.baidu.com/s?wd=%E9%95%BF%E5%9F% 8E'
 
'utf -8'
 
200

Lors de l'utilisation de réponse.text, les requêtes décoderont automatiquement le contenu de la réponse en fonction du codage de texte de la réponse HTTP, et la plupart des jeux de caractères Unicode peuvent être décodés de manière transparente.

Lors de l'utilisation de réponse.content, ce qui est renvoyé est le flux d'octets binaires d'origine des données de réponse du serveur, qui peut être utilisé pour enregistrer des fichiers binaires tels que des images.

Méthode POST

1. Requête POST de base

response = requests.post("http://www.baidu.com/",data = data)

2.body avec paramètres

formdata = {
    "type": "AUTO",
    "doctype": "json",
    "key": "www",
    "ue": "UTF-8",
}
url = "http://auto-installment/v1/loan-credit-check"
response = requests.post(url,data = data,headers=headers)
 
print(response.text)#显示返回结果
print(response.json())# 如果是json文件可以直接显示

Remarque :

Des caractères chinois tronqués apparaissent dans les résultats imprimés, utilisez json.dupms(response, Ensure_ascii=False) ) pour résoudre

Session

Généralement, Session est utilisée pour conserver certains paramètres entre les requêtes, comme la connexion avant d'accéder à d'autres pages

# 1. 创建session对象,可以保存Cookie值
session = requests.session()
 
# 2. 需要登录的用户名和密码
data = {"username": "mxxxx", "password": "1233444"}
 
# 3. 发送附带用户名和密码的请求,并获取登录后的Cookie值,保存在ssion里
session.post("https://www.jianshu.com/sign_in", data=data)
 
# 4. ssion包含用户登录后的Cookie值,可以直接访问那些登录后才可以访问的页面
response = session.get("https://www.jianshu.com/writer#/")

Notes sur les pièges

1. Lors de l'utilisation de requêtes pour demander une interface, un message d'erreur s'affiche. apparaît Une erreur est signalée, mais il n'y a aucun problème avec l'interface elle-même. En effet, il existe deux types de paramètres de requête dans l'interface : les types simples (généralement moins de 3) et les types d'objets complexes.

Solution : Définir les types de ces deux paramètres dans les en-têtes

Type simple : headers={"Content-Type": "application/x-www-form-urlencoded"}

Type d'objet complexe : headers= {"Content -Type":application/json}

2. Certaines requêtes HTTPS ont une vérification de certificat SSL

Solution : réponse = request.get("https://www.baidu.com/", verify =False)

Extension

1. Après l'échec de la requête, ajoutez un mécanisme de nouvelle tentative (si elle échoue, elle sera réessayée 3 fois)

request_retry = requests.adapatrs.HTTPAdapaters(max_retries=3)
session.mount('https://',request_retry)

2. Utilisez des requêtes pour implémenter des requêtes asynchrones

urls = [
    'http://www.url1.com',
    'http://www.url2.com',
    'http://www.url3.com',
    'http://www.url4.com',
    'http://www.url5.com',
]
resp = (grequests.get(u) for u in urls)
grequests.map(resp)

3.

Nous utilisons des instances de session pour conserver les cookies entre les demandes, mais dans certains cas particuliers, nous devons utiliser des cookies personnalisés

Nous utilisons des instances de session pour conserver les cookies entre les demandes, mais dans certains cas particuliers, nous devons utiliser des cookies personnalisés

# 自定义cookies
cookie = {'guid':'5BF0FAB4-A7CF-463E-8C17-C1576fc7a9a8','uuid':'3ff5f4091f35a467'}
 
session.post('http://', cookies=cookie)

4. Comptez le temps passé sur une requête API

session.get(url).elapsed.total_seconds()

5. Définir le délai d'attente de la demande

session.get(url, timeout=15)

6. Le téléchargement de fichiers

Requests utilise les fichiers comme paramètre pour simuler la soumission des données du fichier

file = {'file':open('test.bmp','rb')}   #rb表示用二进制格式打开指定目录下的文件,且用于只读
r =requests.post('http://',files=file)
print(r.text)
.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer