Conocimientos básicos del módulo de solicitud

Introducción al módulo de solicitud

Podemos capturar el contenido de estas solicitudes y respuestas en el navegador, entonces, ¿podemos "falsificar" la solicitud? Es decir, ya no se envían estos datos a través del navegador, sino a través de python para simular que el navegador envíe la solicitud. La respuesta es factible. El módulo de solicitud puede realizar esta función.
El módulo de solicitudes es una biblioteca HTTP simple y fácil de usar implementada por Python

¿Hay otras bibliotecas? La respuesta es sí, por ejemplo urllib, urllib2, httplib, httplib2y otros módulos. Pero actualmente el módulo de Solicitudes es el más popular. Y también es un buen módulo

Enviar petición:

Es Requestsmuy simple de usar para enviar solicitudes de red. Al principio, debe importar el módulo de solicitudes

import requests

Luego, intente obtener una determinada página web. En este ejemplo, obtengamos la página de inicio de la página web de Sogou:

r=requests.get('https://www.sogou.com/')

Ahora, tenemos un objeto Response llamado r, y podemos obtener la información que queremos de este objeto. Por ejemplo: imprima el contenido devuelto

r.text

De hecho, si abrimos esta URL en el navegador, hacemos clic con el botón derecho y seleccionamos "Ver código fuente de la página", encontrará que es exactamente igual a lo que acabamos de imprimir (si no hay anti-rastreo o el sitio web es un sitio web estático). En otras palabras, las pocas líneas de código anteriores nos han ayudado a rastrear todo el código fuente de la página de inicio de Sogou.

Empalme de URL:
1.

import requests
url='https://www.sogou.com/web?query='+'挖掘机小王子'
response=request.get(url)
print(response.text)
import requests
url='https://www.sogou.com/web?‘
param={
    
    
'query' : '挖掘机小王子'
}
response=request.get(url,params=param)
print(response.text)

Nota: Ninguna de las claves del diccionario se agregará a la cadena de consulta de la URL.

Ampliar conocimientos:
también puede pasar una lista:

import requests
payload={
    
    ’key1‘:'value1''key2':['value2''value3']}
r=requests.get('http://httpbin.org/get',params=payload)
print(r.url)

El resultado impreso es: http://httpbin.org/get?key1=vavlue1&key2=value2&key2=value3

Contenido de la respuesta de texto
Podemos leer el contenido de la respuesta del servidor. Antes de eso, usamos r.text para acceder al contenido que nos devolvió el servidor. Y podemos ver el contenido devuelto, la magia es que ni siquiera hicimos nada sobre codificar y decodificar. De hecho

las solicitudes decodificarán automáticamente el contenido del servidor. La mayoría de los juegos de caracteres UNICODE se pueden decodificar sin problemas.
Una vez enviada la solicitud, Requests hará una conjetura basada en la codificación de la respuesta del encabezado HTTP. Cuando visite r.text, las solicitudes usarán su codificación de texto adivinada. Puede averiguar qué codificación usa Requests y puede usar la propiedad e.encoding para cambiarla:
r.encoding
da como resultado'utf -8 '

r.encoding='gb2312'

Si cambia la codificación, cada vez que acceda a r.text, Request usará el nuevo valor de r.encoding

La página HTML puede configurar la información de codificación, puede ver la información de codificación y luego configurar r.encoding en la codificación correspondiente
para que se pueda usar la codificación correcta para analizar r.text. Y la codificación de la página web se puede ver en el navegador.

Binario: las
solicitudes decodificarán automáticamente gzip y desinflarán los datos de respuesta codificados de transmisión para usted

Por ejemplo, la información de la imagen se puede guardar fácilmente en un archivo. Para imágenes, mp3, video y otros datos, a menudo es necesario utilizar un método binario para leer las
solicitudes de importación.

url='https://pic.sogou.com/pics/recompic/detail.jsp?category=%E7%BE%8E%E5%A5%B3&tag=%E5%86%99%E7%9C%9F#1%263976741'
r=requests.get(url)
print(r.content)
with open('baidu.png','wb') as f:
f.write(r.content)

1.r.content es información binaria 2.open
() abre el objeto de archivo con es el administrador de contexto, puede ayudarnos a cerrar automáticamente el archivo
f = open ()
f.write ()
f.close ()
3.as is para tomar un alias, el apodo
4.wb w es para escribir, incluso si se abre un archivo para escribir datos, b es para escribir datos binarios,
r es para leer datos y
a es para agregar datos, no sobrescribir datos

gbk gb2312

Encabezado de solicitud personalizado:

El propósito final de crear un sitio web es que las personas lo visiten; de hecho, casi todos los sitios web no admiten rastreadores. Incluso ahora, cada vez más sitios web prohíben directamente que el rastreador visite cuando descubra que la otra parte es un programa de rastreador. Es decir, no se devolverá información al rastreador, y algunos devolverán un mensaje: ¡actualmente está visitando ilegalmente! !

¿Cómo sabe el servidor web que somos rastreadores? Hay muchas formas de juzgar, y la más común es juzgar a través del encabezado de la solicitud.

Al enviar una solicitud HTTP, el navegador traerá la información del encabezado de la solicitud, etc. (el valor predeterminado no es cuando se envía el programa) si nuestro programa no la trae, o la información del encabezado de la solicitud es incorrecta, es decir, no lo hará. ser enviado por el servidor Sí, será rechazado por el servidor.
La verificación del encabezado de la solicitud también es la estrategia anti-rastreadores más simple.

Agregar encabezado de solicitud

Nuestra solución es simular la función o el comportamiento del navegador tanto como sea posible. Dado que el navegador envía el encabezado de la solicitud, nuestro programa naturalmente también debería agregarlo. En Solicitudes, agregamos información de encabezado de solicitud a través del parámetro de encabezados
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

imports requests
url=''
headers={
    
    
'User-Agent':' '
}
e=requests.get(url,headers=headers)

La solicitud POST se utiliza principalmente para enviar datos del formulario, y luego el servidor analiza los datos del formulario y luego decide qué tipo de datos devolver al cliente

Formulario de datos de envío de formularios

También es relativamente fácil realizar una solicitud POST en Solicitudes. Para lograr esto, simplemente pase un diccionario al parámetro de datos, y su diccionario de datos se codificará automáticamente como un formulario al realizar una solicitud:

carga útil = {'clave1': 'valor1', 'clave2': 'valor2'}
r = solicitudes.post {'', datos = carga útil}
Por supuesto, el método de publicación en la Solicitud es solo un parámetro de datos más en comparación con el método get. Otros Los parámetros son similares. Por ejemplo, también podemos agregar el parámetro de cadena de consulta params a la URL en la publicación, o agregar el parámetro de encabezados como el método get.

Datos POST

Content-Type es el tipo de datos que se transferirán 1. Content-Type
: application / x-www-form-urlencoded (formulario de formulario) El
parámetro de datos se utiliza cuando se pasa el formulario y se acepta un diccionario.

2. Tipo de contenido: aplicación / json (transferir datos en formato json)
al transferir datos, usar parámetros json y aceptar un diccionario.
También puede usar data = json.dumps () para convertir el formato (convertir el diccionario a una cadena )

Código de estado de respuesta

El código de estado de la respuesta facilita la verificación del estado de nuestra respuesta. Podemos verificar el código de estado de la respuesta:
r =
request.get ('https://httpbin.org/get') r.status_code
Si se envía una solicitud de error (un 4XX Client error, o 5XX server error response), podemos
lanzar una excepción a través de response.raise_for_status ():
r =
request.get ('https://httpbin.org/status/404') r.status_code # 404
r. raise_for_status () #tray exception
#Exception Error
Traceback (última llamada más reciente):
archivo "request / models.py", línea 832, en raise_for_status
raise http_errorrequests.exceptions.HTTPError: 404 Client Error

Si el status_code de r en el ejemplo es 200, cuando llamamos a raise_for_status (), lo que obtenemos es:

r.raise_for_status () # 200
Ninguno

Verifique el código de estado r.status_code 200, que se usa a menudo para juzgar si la solicitud es exitosa

Encabezado de respuesta

Podemos ver el encabezado de respuesta del servidor en forma de diccionario de Python

r.headers #El
resultado es
{'codificación de contenido': 'gzip', 'codificación de transferencia': 'fragmentado', 'conexión': 'cerrar'} ¿
Pero este diccionario es especial? : Es solo para encabezados HTTP. Según RFC2616 (protocolo HTTP1.1), los encabezados HTTP no distinguen entre mayúsculas y minúsculas.

Por lo tanto, podemos usar cualquier forma en mayúsculas para acceder a estos campos de encabezado de respuesta:
r.headers ['Content-Type'] # 'application / json'
r.headers.get ('Content-Type') # 'application / json'

El encabezado de respuesta r.headers devuelve la información del encabezado de respuesta en formato de diccionario y se puede acceder a él en un diccionario.

Galleta

Existe un tipo de sitio web en el sitio web actual, que es un sitio web que requiere que los usuarios se registren e inicien sesión para acceder, o que no pueden acceder a sus datos privados sin iniciar sesión, como Weibo, WeChat, etc.

La forma en que el sitio web registra la información del usuario es a través del valor de la cookie del cliente. Por ejemplo, cuando guardamos la cuenta y la contraseña en el navegador, el navegador guarda nuestra información de usuario en nuestra computadora, y la próxima vez que visitemos esta página automáticamente cargar información de cookies para nosotros

En el sitio web que necesita iniciar sesión, el navegador envía la información de la cookie y el servidor verifica la información de la cookie para confirmar el inicio de sesión. Dado que el navegador transporta información de cookies al enviar la solicitud, nuestro programa también debe llevar información de cookies

Una cookie es un fragmento de texto que se almacena en su computadora cuando visita un sitio determinado o una página específica. Se utiliza para rastrear y registrar los datos relevantes de los visitantes del sitio web, como preferencias de búsqueda, clics de comportamiento, números de cuenta, contraseñas, etc. .

Por lo general, la información del valor de las cookies se puede copiar en el navegador y colocar en los encabezados.

headers = { 'Accept': 'application / json, text / javascript, / ; q = 0.01', 'Accept-Encoding': 'gzip, deflate, br', 'Connection': 'keep-alive''Cookie ': 'xxxxxxxxxxxxxxxxxxxxxxxx' #Copia en el navegador ………………………… } Esto se puede enviar junto con el encabezado de la solicitud. Por supuesto, las solicitudes también proporcionan parámetros de cookies para que enviemos información de cookies:






import requests
url=xxx
cookies={
    
    'Cookie':'你的cookie值'}
r=request.get(url,cookies=cookies)

Caso de visita de la estación B

import requests
url='https://account.bilibili.com/home/userInfo'
r=requests.get(url)
print(r.json())

Historial de redirecciones y solicitudes

Redirigir

La redirección consiste en redirigir una solicitud de red a otra ubicación a través de varios métodos. La posible razón es que algunas URL ahora están obsoletas y no están listas para usarse, etc.

Manejar la redirección

De forma predeterminada, para nuestras solicitudes GET y POST de uso común, etc., las solicitudes manejarán automáticamente todas las redirecciones. Por ejemplo, Github redirige todas las solicitudes HTTP a HTTPS:

r=requests.get('http://github.com')
r.url #'https://github.com'
r.status_code #200

Si está utilizando GET, POST, etc., puede deshabilitar el procesamiento de redireccionamiento mediante el parámetro allow_redirects:

r=requests.get('http://github.com',allow_redirects=Flase)
r.status_code #301

Puede utilizar el método de historial del objeto de respuesta para realizar un seguimiento de las redirecciones. response.history es una lista de objetos Response. Estos objetos se crean para completar la solicitud. La lista de objetos se ordena de la solicitud más antigua a la más reciente.

r=requests.get('http://github.com')
r.history #[<Response[301]>]

se acabó el tiempo

A veces no queremos esperar mucho tiempo debido al tiempo o al sitio web del otro y esperar a que se devuelva la respuesta. Luego podemos agregar un parámetro de tiempo de espera. Si excede el tiempo que establecimos y la respuesta no ha regresado, entonces no esperemos de nuevo.

Puede indicar a las solicitudes que dejen de esperar una respuesta después del número de segundos establecido por el parámetro de tiempo de espera. Se recomienda que todos los códigos de producción utilicen este parámetro.

request.get (('http: //github.com',timeout=0.001)

Errores y excepciones

Cuando se encuentran problemas de red (como: error en la consulta de DNS, conexión rechazada, etc.), las solicitudes arrojarán una excepción ConnectionError
1. Si la solicitud HTTP devuelve un código de estado incorrecto, Response.raise_for_status () arrojará una excepción HTTPError
2. Si la solicitud se agota, se
lanzará una excepción de tiempo de espera. 3. Si la solicitud excede el número máximo establecido de restablecimientos, se lanzará una excepción TooManyRedirects

Todas las excepciones lanzadas explícitamente por las solicitudes heredan de las solicitudes.

Los caracteres son el término general para varios caracteres y símbolos, incluidos los caracteres nacionales, signos de puntuación, símbolos gráficos, números, etc. Un juego de caracteres es una colección de varios caracteres. El
juego de caracteres incluye: juego de caracteres ASCII, juego de caracteres GB2313, juego de caracteres GB18030, juego de caracteres Unicode, etc. El
código ASCII es de 1 byte y el código Unicode es generalmente de 2 bytes

Inserte la descripción de la imagen aquí

Agente de usuario:
Mozilla / 5.0 (Windows NT 10.0; WOW64) AppleWebKit / 537.36 (KHTML, como Gecko) Chrome / 70.0.3538.25 Safari / 537.36 Core / 1.70.3866.400 QQBrowser / 10.8.4379.400
Inserte la descripción de la imagen aquí

XP corresponde a Windows NT 5.1
Windows 7 corresponde a Windows NT 6.1
Windows 8 corresponde a Windows NT 6.3

La solicitud GET se refiere a la solicitud de datos del servidor.
Inserte la descripción de la imagen aquí

Agente de usuario:
Mozilla / 5.0 (Windows NT 10.0; WOW64) AppleWebKit / 537.36 (KHTML, como Gecko) Chrome / 70.0.3538.25 Safari / 537.36 Core / 1.70.3866.400 QQBrowser / 10.8.4379.400

Modificar encabezados

Modificado por el parámetro de encabezados de Solicitud

import requests
url='https://www.baidu.com/'
heads={
    
    
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3866.400 QQBrowser/10.8.4379.400'
    }
e=requests.get(url,headers=heads)
print(e.status_code)

Inserte la descripción de la imagen aquí

import json
import urllib.request
import urllib.parse
url='https://www.baidu.com/'
heads={
    
    
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3866.400 QQBrowser/10.8.4379.400'
    }
e=urllib.request.Request(url,heads)

print(e)

Inserte la descripción de la imagen aquí

Modificado por el método request.add_header ()

import json
import urllib.request
import urllib.parse
url='https://www.baidu.com/'
heads={
    
    
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3866.400 QQBrowser/10.8.4379.400'
    }
e=urllib.request.Request(url)
e.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3866.400 QQBrowser/10.8.4379.400')
print(e)

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/CSNN2019/article/details/114537245
Recomendado
Clasificación