2016-04-05 3 views
1

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

Рекомендуемый подход? Я открыт для предложений и идей, так как до того, как я сделал какое-либо исследование, у меня не было ни малейшего понятия о том, как начать, и что такое jsoup.

+0

Вы, кажется, запутываете получение HTML с разбором HTML. Вы не разбираете HTML, так почему вы считаете, что вам нужен парсер HTML? – Laurel

+0

Я хотел разобрать HTML, потому что планировал отобразить изменения, которые были сделаны для быстрого и удобного просмотра. – bitscuit

ответ

0

Одна из возможных проблем с вашим методом хэширования: если на странице содержится любой динамически созданный контент, который изменяется при каждом обновлении, как и многие современные веб-сайты, ваша программа сообщит, что страница постоянно меняется. Хеширование всей страницы будет работать только в том случае, если на сайте не используется какой-либо из этого динамического контента (объявления, счетчик посещений, социальные сети и т. Д.).

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

Первое, разобрана страницы на объект документа:.

Document doc = Jsoup.parse(htmlString) 

Теперь можно выполнить ряд методов на объекте Document до пересекайте узлы HTML. (See Jsoup docs on DOM navigation methods)

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

Element assignTbl = doc.getElementById("assignmentTable"); 
Elements tblRows = assignTbl.getElementsByTag("tr"); 
for (Element tblRow: tblRows) { 
    tblRow.html(); 
} 

Вам нужно будет как-то просмотреть исходный код веб-страницы (например, осмотр элемента в Google Chrome), чтобы выяснить структуру страницы и создать свой код соответственно. Таким образом, не только алгоритм будет более надежным, но вы можете использовать его гораздо дальше, например, извлечение сведений о присваивании, которое изменилось. (Если вы хотите получить помощь, отредактируйте свой вопрос с HTML-страницы целевой страницы.)

+0

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

+0

Правда; вы можете полностью избавиться от хэширования, если сохраните кешированную копию - например, массив строк HTML заданий. Хешинг технически более эффективен, но не нужен для небольших объемов данных. – BradzTech

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