Одним из решений является определение статических частей динамической страницы, которые вы считаете «измененными», если они обновляются. Использование инструмента diff
(пример ниже) для сравнения исходного источника страницы с обновленным источником страницы. Однако определение этих частей вручную для каждого экземпляра страницы не обязательно будет хорошо масштабироваться, если у вас более нескольких десятков страниц.
Две идеи:
1) Используйте HTMLAgilityPack (.NET Library) для анализа DOM страницы и выполнения подсчета отдельных элементов страницы как для сохраненной, ранее отсканированной страницы, так и для недавно отсканированной ее версии. Используйте формулу, которую вы считаете удовлетворительной, чтобы отметить «изменение». Очень простой пример: старая копия имеет 8 якорей <a>
, а новая - только 5.
2) Используйте разностную библиотеку DiffPlex http://diffplex.codeplex.com/ для определения изменений слов и строк. Через анализ вам нужно будет придумать базовую строку изменений для добавления слов и строк, которая вызовет действительное «изменение».
var d = new Differ();
var inlineBuilder = new InlineDiffBuilder(d);
var result = inlineBuilder.BuildDiffModel(OldText, NewText);
int inserted, deleted, modified = 0;
foreach (var line in result.Lines)
{
if(line.Type == ChangeType.Inserted)
inserted++;
else if(line.Type == ChangeType.Deleted)
deleted++;
else if (line.Type == ChangeType.Modified)
modified++;
}
// some base line formula/threshold you come up with through analysis
if (deleted + inserted + modifed > 10)
changed = true;
}