Primer contacto con la biblioteca urllib del rastreador de python

biblioteca urllib

La biblioteca urllib es una de las bibliotecas de solicitud de red más básicas en Python, que puede simular el comportamiento del navegador, enviar una solicitud al servidor especificado y guardar los datos devueltos por el servidor

función urlopen

En la biblioteca urllib de Python3, todos los métodos relacionados con las solicitudes de red se recopilan en el módulo urllib.request. Primero veamos el uso básico de la función urlopen:

from urllib import request
resp = request.urlopen("http://baidu.com")
print(resp.read())

De hecho, use el navegador para acceder a Baidu y haga clic derecho para ver el código fuente. Encontrará que los datos que imprimimos ahora son exactamente los mismos. En otras palabras, las tres líneas de código anteriores nos han ayudado a rastrear todo el código en la página de inicio de Baidu. -El código python correspondiente a una solicitud básica de ur es realmente simple.
A continuación se explica la función urlopen en detalle:

  1. url: la url solicitada. .
  2. datos: la fecha solicitada, si se establece este valor, se convertirá en una solicitud posterior.
  3. Valor de retorno cercano: el valor de retorno es un objeto htptctient HTRsponste. Este objeto es un objeto de identificador de archivo. Hay lectura (tamaño). línea roja readlines y métodos getcode.

función urlretrieve

Esta función puede guardar convenientemente un archivo en la página web en el local. El siguiente código puede descargar fácilmente la página de inicio de Baidu al local:

from urllib import request
request.urlretrieve("http://baidu.com", 'index.html')

función urlencode

Al enviar una solicitud con un navegador, si la URL contiene caracteres chinos u otros caracteres especiales. Entonces el navegador comenzará a codificar automáticamente. Si usa el código para enviar la solicitud, debe codificarla manualmente. En este momento, debe usar la función urlencode para implementarla. urlencode puede convertir datos del diccionario en datos codificados con URL.
El código de muestra es el siguiente:

from urllib import parse
data = {'name':'张三','age': 10}
q = parse.urlencode(data)		#q.encode('utf-8')将会把unicode字符编程二进制的unicode,前面加上了b
print(q)	#name=%E5%BC%A0%E4%B8%89&age=10

parse.quote solo se puede usar para codificar cadenas

función parse_qs

Puede decodificar los parámetros de URL codificados,

from urllib import parse
qs = 'name=%E5%BC%A0%E4%B8%89&age=10'
print(parse.parse_qs(qs)) #{'name': ['张三'], 'age': ['10']}

urlparse y urlsplit

A veces obtengo una url y quiero dividir los diversos componentes en esta url, luego en este momento puedes usar urlparse o urlsplit para dividir. Código de muestra agregado:

from urllib import request,parse
url = 'https://www.baidu.com/s?wd=github'
result = parse.urlsplit(url) 
#parse.urlparse(url)
print('schema',result.scheme)	#schema https
print('netloc',result.netloc)	#netloc www.baidu.com
print('path',result.path)	#path /s
print('query',result.query)	#query wd=github

request.Request 类

Si desea agregar algunos encabezados de solicitud al solicitar, debe usar la clase request, Request para lograr. Por ejemplo, para agregar un User-Agent, el código de muestra es el siguiente:

from urlib import request
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'
}
req = request.Request('http://baidu.com', headers=headers)
resp = request.urlopen(req)
print(resp.read())

Procesador ProxyHandler (configuración de proxy)

Muchos sitios web detectarán la cantidad de visitas de una IP por un cierto período de tiempo (a través de estadísticas de tráfico, registros del sistema, etc.) Si la cantidad de visitas no es como la de una persona normal, prohibirá el acceso a esta IP.
Por lo tanto, podemos configurar algunos servidores proxy y cambiar un proxy cada uno por un período de tiempo. Incluso si la IP está prohibida, aún podemos cambiar otra IP para continuar rastreando.
El servidor proxy se configura en urllib a través de ProxyHandler. El siguiente código muestra cómo usar un abridor personalizado para usar un proxy:

from urllib import request
#设置代理,传入字典
handler = request.ProxyHandler({'http':'proxyip})
opener = request.build_opener(handler)  
#这个网址可以测试ip来源                                
req = request.Request("http://httpbin.org/ip")
resp = opener.open(req)
print(resp.read())                                

Los agentes de uso común son:

  • IP gratis de Westthorn: http://www.xicidaili.com/
  • Agente expreso: http://ww.kuaidaili.com/
  • Nube de agentes: http://www.daliyun.com/

¿Qué es una cookie?

En un sitio web, las solicitudes http no tienen estado. En otras palabras, incluso después de conectarse al servidor por primera vez e iniciar sesión correctamente, la segunda solicitud al servidor aún no puede saber qué usuario es la solicitud actual. La aparición de cookies es resolver este problema. Después del primer inicio de sesión, el servidor devuelve algunos datos (cookies) al navegador, y luego el navegador se guarda localmente. Cuando el usuario envía la segunda solicitud, la última Los datos de la cookie que se solicita que se almacenen se transportan automáticamente al servidor, y el servidor
puede determinar qué usuario está utilizando actualmente los datos transportados por el navegador . La cantidad de datos almacenados por las cookies es limitada. Diferentes navegadores tienen diferentes tamaños de almacenamiento, pero generalmente no más de 4KB. Por lo tanto, el uso de cookies solo puede almacenar algunas pequeñas cantidades de datos.

Formato de cookies

Set-Cookie: NAME=VALUE: Expires/Max-age=DATE: Path=PATH: Domain=DOMAIN NAME: SECURE

Significado del parámetro:

  • NOMBRE: El nombre de la cookie.
  • VALOR: El valor de la cookie.
  • Caduca: el tiempo de caducidad de la cookie.
  • Ruta: la ruta de la cookie.
  • Dominio: el nombre de dominio de la cookie.
  • SEGURO: si solo funciona bajo el protocolo https.

Use la biblioteca cookielib y HTTPCookieProcessor para simular el inicio de sesión:

La cookie se refiere al archivo de texto almacenado en el navegador del usuario para identificar la identidad del usuario y el seguimiento de la sesión. La cookie puede mantener la información de inicio de sesión hasta la próxima sesión del usuario con el servidor.
Tomemos Renren.com como ejemplo. En Renren.com, para acceder a la página de inicio de una persona, debe iniciar sesión antes de poder acceder a ella. Iniciar sesión simplemente significa tener información de cookies. Luego, si queremos acceder por código, debemos tener la información correcta de cookies para acceder. Hay dos soluciones, la primera es usar un navegador para acceder, y luego copiar la información de la cookie y ponerla en los encabezados.

from urllib import request
login_url = 'http://www...'
headers = {
    'User-Agent':'.......'
}
req = request.Request(url = login_url, headers = headers)
resp = request.urlopen(req)
with open('index.html', 'w', encode='utf-8') as fp:
    fp.write(resp.read().decode('utf-8'))

Pero copiar cookies del navegador cada vez que visita una página que requiere cookies es problemático. El procesamiento de cookies en Python generalmente se realiza a través de la clase de procesador HTTPCookieProcessor del módulo http.cookiejar y el módulo urllib. La función principal del módulo http.cookiejar es proporcionar objetos para almacenar cookies. La función principal del procesador HTTPCookieProcessor es procesar estos objetos cookie y construir un objeto controlador.

http.cookiejar 模块

Las principales clases de este módulo son CookieJar, FileCookieJar, MoillaCookieJar. Las funciones de LWPCookidJaro son las siguientes:

  1. CookieJar: un objeto que gestiona los valores de las cookies HTTP, almacena las cookies generadas por las solicitudes HTTP y agrega cookies a las solicitudes HTTP salientes. Toda la cookie se almacena en la memoria, y la cookie se perderá después de la recolección de basura de la instancia de CookieJar.
  2. FileCookieJar (nombre de archivo, delayload = None, policy = None): derivado de CookieJar, utilizado para crear instancias de FileCookieJar, recuperar información de cookies y almacenar cookies en archivos. flename es el nombre del archivo donde se almacena la cookie. Cuando delayload es True, admite el acceso retrasado al archivo, es decir, solo lee el archivo o almacena datos en el archivo cuando sea necesario.
  3. MoillaCookieJar (nombre de archivo, delayload = None, policy = None): Derivado de FileCookieJar, cree una instancia de FileCookieJar compatible con las cookies del navegador Moilla.txt.
  4. LWPCookieJar (nombre de archivo, delayload = None, policy = None): Derivado de FileCookieJar para crear una instancia de FileCookieJa compatible con el formato de archivo libwww-per Set-Cookie3 estándar.
    Use http.cookiejar y solicite .HTTPCookieProcessor para iniciar sesión en Renren. El código de muestra relevante es el siguiente:

Inserte la descripción de la imagen aquí
Guardar cookies localmente

Puede usar el método de guardar cookiejar, necesita especificar el nombre del archivo

from urllib import request
from http.cookiejar import MozillaCookieJar
cookiejar = MozillaCookieJar('cookie.txt')
cookiejar.load(ignore_discard=True)				#过期的cookie也进行存储
handler = request.HTTPCookieProcessor(cookiejar)
opener = request.build_opener(handler)

resp = opener.open('http://httpbin.org/cookies')
for cookie in cookiejar:
    print(cookie)
Publicado 8 artículos originales · ganó 3 · vistas 186

Supongo que te gusta

Origin blog.csdn.net/qq_42641075/article/details/105456236
Recomendado
Clasificación