Как определить, являются ли две веб-страницы одинаковыми? - PullRequest
13 голосов
/ 19 января 2009

Какие методы хороши для обнаружения, если веб-страница совпадает с другой?

К тому же, я не имею в виду эквивалент char-to-char (это легко), но достаточно надежен, чтобы игнорировать что-то вроде текущей даты / времени на странице и т. Д.

Например, иди в Yahoo! В новостной статье загрузите страницу, через 10 минут откройте эту же страницу в другом браузере. Несмотря на переписывание, эти страницы будут иметь некоторые различия (временные метки, возможно, такие вещи, как реклама, возможно, похожие истории), но человек может взглянуть на них и сказать, что они одинаковы.

Примечание. Я не пытаюсь исправить (или полагаться) на нормализацию URL. Т.е. выяснить, что foo.html & foo.html? Bar = bang одинаковы.

Ответы [ 13 ]

0 голосов
/ 19 января 2009

Способ сделать это - не сравнивать всю страницу, потому что, как вы говорите, Человек тоже не будет обманут. Скажем, вы заинтересованы в новостных статьях Yahoo! страницу, так что тогда вам стоит заглянуть только в раздел новостей. Затем вы можете делать что угодно, хеш или буквальное сравнение между новой и старой версией.

0 голосов
/ 19 января 2009

Вы можете сгенерировать хеш MD5 для каждого из них, а затем сравнить его. Как ты и сказал, достаточно просто.

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

  1. Определите области на странице, которые могут измениться, и вам все равно. Осторожный! Они всегда будут двигаться.
  2. Хешируйте или делайте некоторую контрольную сумму DOM только тех частей страницы, которые вам НЕ интересны. Осторожный! Они также всегда будут меняться.

Вы столкнулись с первым правилом очистки экрана: страница по своей природе является изменчивой. Так что это сложная проблема. Ваше решение НИКОГДА не будет достаточно надежным, чтобы учесть бесконечное разнообразие тонких изменений, которым будут подвергаться ваши исходные данные, если только вы не имеете прямого контроля над исходными страницами и не можете спроектировать свое решение против этого.

Удачи! У меня был опыт работы с системами, которые пытались решить эту проблему, и это действительно крепкий орешек.

0 голосов
/ 19 января 2009

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

Если вы знаете структуру страницы, то я бы вручную выбрал части страницы (используя идентификаторы, селекторы CSS, XPath и т. Д.) Для сравнения. Например, сравнивайте только дивизии #content между обновлениями страниц. Оттуда вам, возможно, понадобится добавить уровень допуска к сравнению за символом.

Есть сервис, который делает подобное на самом деле. Он называется Rsspect (написанный Райаном Нортом из Qwantz Fame), который будет обнаруживать изменения на любом веб-сайте и создавать из него RSS-канал, даже если вы не контролируете страницу.

...