2015-01-28 4 views
4

У меня есть искатель, который сканирует сотни тысяч страниц и индексирует/анализирует содержимое страницы, и одна вещь, с которой я борюсь, - это проверить, был ли контент страницы обновлен эффективным способом без необходимо выполнить сканирование и проверить содержимое страницы.Лучший способ проверить, было ли изменено содержимое страницы?

Очевидно, что я мог бы просто загрузить всю страницу и повторно проанализировать все и сравнить все с тем, что я хранил в своей базе данных. Однако это очень неэффективно и использует множество вычислений, что приводит к высоким хостинговым счетам.

Я думаю о сравнении хэшей, проблема в том, что если страница изменила один байт или символ, хеш будет другим. Так, например, если страница отображает текущую дату на странице, каждый раз хеш будет отличаться и скажите мне, что контент обновлен.

Итак ... Как вы это сделаете? Посмотрите на размер kb для HTML? Посмотрите на длину строки и проверьте, изменилась ли, например, длина более 5%, контент был «изменен»? Или есть какой-то алгоритм хэширования, где хэши остаются такими же, если изменены только небольшие части строки/содержимого?

+0

ли 'заголовок последнего modified' (или, возможно,' ETag') надежной на сайте вы выскабливание Если это так, просто использовать, что – roippi

+0

... и использовать HTTP-запрос 'HEAD'. Не простой« GET ». –

+0

Im сканирует много разных доменов и сайтов, и мы также расширяем до новых доменов. Таким образом, надежный метод для всех доменов будет предпочтительнее. –

ответ

2

Вы можете попробовать и использовать значение, содержащееся в заголовке «last-mofidied» в ответе от сервера. Размышление об этом в хороший объект позволит проводить простые сравнения дат, позволяя вам проверить, следует ли перерисовывать. Например (в Python с использованием блестящей requests библиотеки:?.

import requests 
r = requests.get('http://en.wikipedia.org/wiki/Monty_Python') 
site_last_modified_date = r.headers["Last-Modified"] 

# from here, just parse the date and compare it with the last recorded date 
+1

К сожалению, не все серверы вернули эту дату правильно. Я думаю, что это не надежное решение. – stepozer

+0

Благодарим вас за ответ, но, как я уже говорил в комментариях ранее, поскольку мы сканируем множество разных серверов и доменов, мы хотим найти более надежное решение, которое работает повсеместно. –

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