2010-07-12 9 views
6

Per chi conosce wget, ha un'opzione --spider, che consente di verificare se un collegamento è rotto o meno, senza effettivamente scaricare la pagina Web. Mi piacerebbe fare la stessa cosa in Python. Il mio problema è che ho una lista di 100.000 link che voglio controllare, al massimo una volta al giorno, e almeno una volta alla settimana. In ogni caso questo genererà molto traffico non necessario.Verifica se un collegamento è morto o non si utilizza Python senza scaricare la pagina web

Per quanto ho capito dallo urllib2.urlopen() documentation, non scarica la pagina ma solo la meta-informazione. È corretto? O c'è un altro modo per farlo in un modo piacevole?

migliore,
Troels

risposta

9

si dovrebbe usare la HEAD Request per questo, si chiede il server web per le intestazioni senza il corpo . Vedi How do you send a HEAD HTTP request in Python 2?

+0

A destra, HEAD otterrà le intestazioni (incluso lo stato HTTP) senza scaricare il corpo del messaggio. Alcuni siti sono (mal) configurati per inviare "non trovato"/404 pagine con uno stato di 200, però, quindi sarebbe difficile individuare quelle situazioni. – JAL

+0

Per quanto posso dire questo è ciò che fa wget -spider. –

+0

Grazie mille per la soluzione così come i pensieri su siti mal configurati (vale la pena tenere a mente!) - questo è proprio quello di cui ho bisogno :) – Troels

-1

Non sei sicuro di come fare questo in Python, ma in generale si potrebbe verificare 'intestazione di risposta' e verificare 'Stato-Code' per il codice 200. A quel punto si potrebbe smettere di leggere la pagina e continuare con il vostro prossimo link che modo non è necessario scaricare l'intera pagina solo la 'intestazione di risposta' Elenco dei Status Codes

+0

Perché questo è stato rifiutato, spiega il tuo ragionamento? So che questo non usa la richiesta Head ma ha realizzato la stessa cosa. – Greg

+0

301 è un reindirizzamento ed è anche una buona risposta. In realtà, qualsiasi 2 ** è OK, 3 ** necessita di ulteriore elaborazione (reindirizzamento), ecc. Il controllo solo per 200 è insufficiente. – kgadek

Problemi correlati