Módulo Python requests
Python requests es una biblioteca de solicitudes HTTP de uso común que permite enviar fácilmente solicitudes HTTP a sitios web y obtener los resultados de respuesta.
El módulo requests es másurllibel módulo es más conciso.
Para enviar solicitudes HTTP con requests, primero debe importar el módulo requests:
import requests
Después de la importación, puede enviar solicitudes HTTP utilizando los métodos proporcionados por requests para enviar solicitudes HTTP a la URL especificada, por ejemplo:
Ejemplo
import requests
# Enviar solicitud
x = requests.get('https://www.example.com/')
# Devolver el contenido de la página web
print(x.text)
Después de cada llamada a una solicitud de requests, se devuelve un objeto response, que contiene información de respuesta específica, como código de estado, encabezados de respuesta, contenido de respuesta, etc.:
print(response.status_code) # 获取响应状态码 print(response.headers) # 获取响应头 print(response.content) # 获取响应内容
Más información de respuesta a continuación:
| Atributo o método | Descripción |
|---|---|
| apparent_encoding | Formato de codificación |
| close() | Cierra la conexión con el servidor |
| content | Devuelve el contenido de la respuesta, en bytes |
| cookies | Devuelve un objeto CookieJar que contiene las cookies enviadas por el servidor |
| elapsed | Devuelve un objeto timedelta que contiene la cantidad de tiempo transcurrido entre el envío de la solicitud y la llegada de la respuesta; puede usarse para probar la velocidad de respuesta. Por ejemplo, r.elapsed.microseconds indica cuántos microsegundos tarda en llegar la respuesta. |
| encoding | Codificación utilizada para decodificar r.text |
| headers | Devuelve los encabezados de respuesta, en formato de diccionario |
| history | Devuelve una lista de objetos de respuesta que contienen el historial de solicitudes (url) |
| is_permanent_redirect | Devuelve True si la respuesta es una URL con redirección permanente; de lo contrario, devuelve False |
| is_redirect | Devuelve True si la respuesta fue redirigida; de lo contrario, devuelve False |
| iter_content() | Iterar sobre la respuesta |
| iter_lines() | Iterar sobre las líneas de la respuesta |
| json() | Devuelve el objeto JSON del resultado (el resultado debe estar escrito en formato JSON, de lo contrario se producirá un error) |
| links | Devuelve los enlaces de cabecera analizados de la respuesta |
| next | Devuelve el objeto PreparedRequest de la siguiente solicitud en la cadena de redireccionamiento |
| ok | Comprueba el valor de "status_code"; devuelve True si es menor que 400 y False si no es menor que 400 |
| raise_for_status() | Si ocurre un error, el método devuelve un objeto HTTPError |
| reason | Descripción del estado de la respuesta, por ejemplo "Not Found" u "OK" |
| request | Devuelve el objeto de solicitud que generó esta respuesta |
| status_code | Devuelve el código de estado HTTP, por ejemplo 404 y 200 (200 es OK, 404 es Not Found) |
| text | Devuelve el contenido de la respuesta, datos de tipo unicode |
| url | Devuelve la URL de la respuesta |
Ejemplo
import requests
# Enviar solicitud
x = requests.get('https://www.example.com/')
# Devolver el código de estado HTTP
print(x.status_code)
# Descripción del estado de la respuesta
print(x.reason)
# Devolver la codificación
print(x.apparent_encoding)
El resultado de salida es el siguiente:
200 OK utf-8
Solicitar un archivo de datos JSON y devolver el contenido JSON:
Ejemplo
import requests
# Enviar solicitud
x = requests.get('https://www.example.com/try/ajax/json_demo.json')
# Devolver datos JSON
print(x.json())
El resultado de salida es el siguiente:
{'name': '网站', 'num': 3, 'sites': [{'name': 'Google', 'info': ['Android', 'Google 搜索', 'Google 翻译']}, {'name': 'Ejemplo', 'info': ['Ejemplo', 'Ejemplo工具', 'Ejemplo微信']}, {'name': 'Taobao', 'info': ['淘宝', '网购']}]}
Métodos de requests
Los métodos de requests son los siguientes:
| Método | Descripción |
|---|---|
| delete(url, args) | Envía una solicitud DELETE a la URL especificada |
| get(url, params, args) | Envía una solicitud GET a la URL especificada |
| head(url, args) | Envía una solicitud HEAD a la URL especificada |
| patch(url, data, args) | Envía una solicitud PATCH a la URL especificada |
| post(url, data, json, args) | Envía una solicitud POST a la URL especificada |
| put(url, data, args) | Envía una solicitud PUT a la URL especificada |
| request(method, url, args) | Envía el método de solicitud especificado a la URL especificada |
Usar requests.request() para enviar una solicitud GET:
Ejemplo
import requests
# Enviar solicitud
x = requests.request('get', 'https://www.example.com/')
# Devolver el contenido de la página web
print(x.status_code)
El resultado de salida es el siguiente:
200
Configurar encabezados de solicitud:
Ejemplo
import requests
kw = {'s':'tutorial de python'}
# Configurar encabezados de solicitud
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 recibe un diccionario o una cadena de parámetros de consulta; los diccionarios se convierten automáticamente a codificación URL, no se necesita urlencode()
response = requests.get("https://www.example.com/", params = kw, headers = headers)
# Ver el código de estado de la respuesta
print (response.status_code)
# Ver la codificación de caracteres del encabezado de respuesta
print (response.encoding)
# Ver la URL completa
print (response.url)
# Ver el contenido de la respuesta; response.text devuelve datos en formato Unicode
print(response.text)
El resultado de salida es el siguiente:
200 UTF-8 https://www.example.com/?s=python+%E6%95%99%E7%A8%8B ... 其他内容...
El método post() puede enviar una solicitud POST a la URL especificada; su formato general es el siguiente:
requests.post(url, data={key: value}, json={key: value}, args)-
urlURL de la solicitud.
-
dataEl parámetro es un diccionario, lista de tuplas, bytes o archivo que se enviará a la URL especificada.
-
jsonEl parámetro es un objeto JSON que se enviará a la URL especificada.
-
argsSon otros parámetros, como cookies, headers, verify, etc.
Ejemplo
import requests
# Enviar solicitud
x = requests.post('https://www.example.com/try/ajax/demo_post.php')
# Devolver el contenido de la página web
print(x.text)
El resultado de salida es el siguiente:
<p style='color:red;'>本内容是使用 POST 方法请求的。</p><p style='color:red;'>请求时间: 2022-05-26 17:30:47</p>
Solicitud POST con parámetros:
Ejemplo
import requests
# Parámetros de formulario, nombres de parámetros fname y lname
myobj = {'fname': 'EJEMPLO','lname': 'Boy'}
# Enviar solicitud
x = requests.post('https://www.example.com/try/ajax/demo_post2.php', data = myobj)
# Devolver el contenido de la página web
print(x.text)
El resultado de salida es el siguiente:
<p style='color:red;'>你好,EJEMPLO Boy,今天过得怎么样?</p>
Parámetros de solicitud adicionales
Al enviar solicitudes, podemos agregar parámetros adicionales en la solicitud, como encabezados de solicitud, parámetros de consulta, cuerpo de la solicitud, etc., por ejemplo:
headers = {'User-Agent': 'Mozilla/5.0'} # 设置请求头
params = {'key1': 'value1', 'key2': 'value2'} # 设置查询参数
data = {'username': 'example', 'password': '123456'} # 设置请求体
response = requests.post('https://www.example.com', headers=headers, params=params, data=data)
El código anterior envía una solicitud POST e incluye encabezados de solicitud, parámetros de consulta y cuerpo de la solicitud.
Además de las solicitudes básicas GET y POST, requests también admite otros métodos HTTP, como PUT, DELETE, HEAD, OPTIONS, etc.
Otras extensiones