2010-07-12 1 views
6

Для тех, кто знает wget, у него есть опция --spider, что позволяет проверить, не сломалась ли ссылка или нет, без фактической загрузки веб-страницы. Я хотел бы сделать то же самое в Python. Моя проблема в том, что у меня есть список из 100'000 ссылок, которые я хочу проверить, максимум один раз в день и, по крайней мере, один раз в неделю. В любом случае это создаст много ненужного трафика.Проверка наличия или отсутствия ссылки на Python без скачивания веб-страницы

Насколько я понимаю из urllib2.urlopen() documentation, он не загружает страницу, а только метаинформацию. Это верно? Или есть какой-то другой способ сделать это красиво?

Бест,
Troels

ответ

9

вы должны использовать HEAD Request для этого, он запрашивает веб-сервер для заголовков без тела , См. How do you send a HEAD HTTP request in Python 2?

+0

Правильно, HEAD доставит вам заголовки (включая статус HTTP), не загружая тело сообщения. Некоторые сайты (неверно) настроены на отправку «не найденных»/404 страниц со статусом 200, хотя было бы трудно обнаружить эти ситуации. – JAL

+0

Насколько я могу судить, это то, что делает wget -spider. –

+0

Большое спасибо за решение, а также за мысли о неверно настроенных сайтах (это стоит помнить!) - вот что мне нужно :) – Troels

-1

Не знаете, как это сделать в Python, но как правило, вы можете проверить «заголовка ответа» и отметьте «Status-Code» для кода 200. в этот момент вы можете прекратить чтение страницы и продолжить с вашей следующей ссылкой таким образом, вы не должны загрузить всю страницу только «заголовок ответа» списка Status Codes

+0

Почему это было отклонено, пожалуйста, объясните свои рассуждения? Я знаю, что это не использует запрос главы, но он совершил то же самое. – Greg

+0

301 является перенаправлением и является хорошим ответом. На самом деле, все 2 ** в порядке, 3 ** требуется дальнейшая обработка (перенаправление) и т. Д. Проверка только на 200 недостаточно. – kgadek

Смежные вопросы