Red de conocimiento informático - Problemas con los teléfonos móviles - Cómo el rastreador de Python maneja solicitudes anormales en páginas de Douban

Cómo el rastreador de Python maneja solicitudes anormales en páginas de Douban

1.URLError

Primero, explique las posibles causas de URLError:

No se puede conectar a la red, es decir, la máquina no puede acceder a Internet

No se puede conectar al servidor específico

El servidor no existe

En el código, necesitamos usar declaraciones try-except para rodear y capturar el correspondiente excepción. El siguiente es un ejemplo, siéntalo primero

Python

1

2

3

4

5

6

7

importar urllib2

requset = urllib2.Request('')< / p>

pruebe:

urllib2.urlopen(requset)

excepto urllib2.URLError, e:

imprima

<. p >Utilizamos el método urlopen para acceder a una URL inexistente y los resultados son los siguientes:

Python

1

[Errno 11004] getaddrinfo falló

Explica que el código de error es 11004 y el motivo es que getaddrinfo falló

2 HTTPError

HTTPError es una subclase de URLError. Cuando realiza una solicitud utilizando el método urlopen, el servidor responde con un objeto de respuesta que contiene un "código de estado" numérico. Por ejemplo, si la respuesta es "redirigir" el documento a una ubicación diferente, urllib2 se encargará de esto.

De lo contrario, urlopen generará un HTTPError, que corresponde al estado de respuesta devuelto por el protocolo HTTP. Los siguientes códigos de estado se resumen a continuación:

100: Continuar El cliente debe continuar enviando la solicitud. El cliente debe continuar enviando el resto de la solicitud o ignorar esta respuesta si la solicitud está completa.

101: Cambiar protocolo Después de enviar la última línea en blanco de esta respuesta, el servidor cambiará al protocolo definido en el encabezado del mensaje de actualización. Sólo se deberían tomar medidas similares si cambiar a un nuevo protocolo resulta más ventajoso.

102: El procesamiento continúa Un código de estado extendido por WebDAV (RFC 2518) que indica que el procesamiento continuará.

200: La solicitud es exitosa. Procesamiento: Obtenga el contenido de la respuesta y procéselo.

201: La solicitud se completa y se crea un nuevo recurso. El URI del recurso recién creado está disponible en la entidad de la respuesta Manejo: No encontrado en el rastreador

202: Solicitud aceptada, pero el procesamiento aún no se ha completado Manejo: Bloqueo y espera

204: Solicitud completada en el servidor: la solicitud se completó en el lado del servidor, pero no se devolvió información nueva. Si el cliente es un agente de usuario, no es necesario actualizar su vista de documento para ello. Manejo: Descartar

300: las aplicaciones HTTP/1.0 no usarán este código de estado directamente, sino que solo lo usarán como interpretación predeterminada de las respuestas de tipo 3XX. Se solicitó más de un recurso disponible. Procesamiento: si el programa puede manejarlo, procéselo más; si el programa no puede manejarlo, deséchelo

301: al recurso solicitado se le asigna una URL permanente para que se pueda acceder a él a través de esa URL en el Procesamiento futuro: Redirigir a la URL de distribución

302: El recurso solicitado se almacena temporalmente en una URL diferente.

Método de procesamiento: Redirigir a URL temporal

304: El recurso solicitado no se ha actualizado Método de procesamiento: Descartar

400: Método de procesamiento de solicitud ilegal: Descartar

401: Método de procesamiento no autorizado: descartar

403: Método de procesamiento prohibido: descartar

404: Método de procesamiento no encontrado: descartar

500: El servidor no encontró el recurso. p>

500: Error interno del servidor El servidor encontró una condición inesperada y no pudo completar el procesamiento de la solicitud. Normalmente, este problema ocurre cuando hay un error en el código fuente del lado del servidor.

501: Servidor no reconocido El servidor no admite la funcionalidad específica requerida por la solicitud actual. Cuando el servidor no reconoce el método solicitado y no puede soportar su solicitud de ningún recurso.

502: Puerta de enlace incorrecta El servidor que actúa como puerta de enlace o proxy recibió una respuesta no válida de un servidor ascendente al intentar realizar una solicitud.

503: Error de servicio Debido a un mantenimiento temporal del servidor o a una sobrecarga, el servidor actualmente no puede procesar la solicitud. Esta condición es temporal y se recuperará después de un tiempo.

Las instancias HTTPError se generan con un atributo de código, que es el número de error relevante enviado por el servidor.

Dado que urllib2 maneja las redirecciones por usted, esto significa que los códigos que comienzan con 3 pueden procesarse y los números en el rango 100-299 indican éxito, por lo que solo verá aquellos en el rango de código de error 400-599. .

Escribamos un ejemplo para tener una idea, la excepción detectada es HTTPError, tendrá un atributo de código, que es el código de error, además también imprimiremos el atributo de motivo, que es su clase principal URLError una propiedad.

Python

1

2

3

4

5

5

p>

6

7

8

importar urllib2

req = urllib2.Request('httt/ cqcre')

intenta:

urllib2.urlopen(req)

excepto urllib2.HTTPError, e:

imprimir e.code

imprimir e.reason

Los resultados de ejecución son los siguientes<

Python

1

2

403

Prohibido

El código de error es 403 y el motivo del error es Prohibido, lo que significa acceso al servidor. está prohibido.

Sabemos que la clase principal de HTTPError es URLError. Según la experiencia en programación, la excepción de la clase principal debe escribirse después de la excepción de la subclase. Si la subclase no puede detectarla, entonces la excepción de. la clase principal se puede capturar, por lo que el código anterior se puede reescribir así

Python

1

2

3

4

5

6

7

8

9

10

11

importar urllib2

req = urllib2.Request('hcqcre')

prueba:

urllib2.urlopen(req)

excepto urllib2.HTTPError, e:

imprimir e.code

excepto urllib2.URLError, e:

imprimir e.

else:

imprimir "OK"

Si se detecta HTTPError, se genera el código y no hay excepciones de URLError. manejado por más tiempo. Si se produce una excepción distinta de HTTPError, la excepción URLError ya no se detecta y se genera el motivo del error.

Además, puede agregar el atributo hasattr para predeterminar los atributos y reescribir el código de la siguiente manera

Python

1

2

3

4

5

6

7

8

9

10

11

12

importar urllib2

req = urllib2.Request ('httcqcre')

pruebe:

urllib2.urlopen(req)

excepto urllib2.URLError, e:

if hasattr (e, "código"):

imprimir e.código

if hasattr(e, "razón"):

imprimir e.razón

else:

imprimir "OK"

Primero determine el atributo de la excepción para evitar informar errores en la salida del atributo.

¡Lo anterior es la introducción relevante a URLError y HTTPError, así como los métodos de manejo de errores correspondientes!