2010-07-12 12 views
6

Para quienes conocen wget, tiene una opción --spider, que permite verificar si un enlace está roto o no, sin descargar realmente la página web. Me gustaría hacer lo mismo en Python. Mi problema es que tengo una lista de 100 000 enlaces que quiero verificar, como máximo una vez al día, y al menos una vez a la semana. En cualquier caso, esto generará mucho tráfico innecesario.Verificando si un enlace está muerto o no utilizando Python sin descargar la página web

Por lo que entiendo del urllib2.urlopen() documentation, no descarga la página sino solo la metainformación. ¿Es esto correcto? ¿O hay alguna otra forma de hacer esto de una manera agradable?

mejor,
Troels

Respuesta

9

se debe utilizar la HEAD Request para ello, se pide al servidor web para las cabeceras sin el cuerpo . Consulte How do you send a HEAD HTTP request in Python 2?

+0

Derecha, HEAD obtendrá los encabezados (incluido el estado de HTTP) sin descargar el cuerpo del mensaje. Sin embargo, algunos sitios están (mal) configurados para enviar páginas 'no encontradas'/404 con un estado de 200, por lo que sería difícil detectar esas situaciones. – JAL

+0

Por lo que puedo decir, esto es lo que hace wget --spider. –

+0

Muchas gracias por la solución, así como por los pensamientos sobre sitios mal configurados (¡eso vale la pena tener en cuenta!) - eso es justo lo que necesito :) – Troels

-1

No está seguro de cómo hacer esto en Python, pero en general se puede comprobar 'encabezado de respuesta' y comprobar 'Estado-Code' para el código 200. En ese momento se podía dejar de leer la página y continuar con su próximo enlace de esa manera usted no tiene que descargar toda la página sólo el 'encabezado de respuesta' Lista de Status Codes

+0

¿Por qué se ha votado negativamente, explique su razonamiento? Sé que esto no usa la solicitud de Head, pero logró lo mismo. – Greg

+0

301 es una redirección y es una buena respuesta también. En realidad, cualquier 2 ** es correcto, 3 ** necesita procesamiento adicional (redirección), etc. La comprobación de solo 200 es insuficiente. – kgadek

Cuestiones relacionadas