Поиск содержания документа в разделе HTML - PullRequest
2 голосов
/ 04 августа 2009

Это на самом деле не вопрос программирования, скорее вопрос алгоритмический.

Проблема: поиск раздела «контент» HTML-страницы.

Под «контентом» я подразумеваю дом, содержащий контент страницы, видимый людьми, без шума, просто «фактический контент страницы». Я знаю, что проблема не очень хорошо определена, но давайте продолжим ... Например, на сайтах блогов это обычно легко: при просмотре определенного поста у вас обычно есть несколько панелей инструментов в верхней части страницы, возможно, некоторые элементы навигации на LHS, а затем у вас есть div, содержащий контент. Попытка понять это из HTML может быть хитрой. К счастью, в большинстве блогов есть RSS-каналы, и в ленте для этого конкретного поста вы найдете раздел (или ), и это именно то, что вам нужно. Итак, чтобы уточнить определение контента, это актуальная вещь на странице, которая содержит интересную часть, удаляя все объявления, элементы навигации и т. Д. Таким образом, поиск контента в блогах относительно прост, если у них есть RSS. То же самое касается других поддерживающих RSS сайтов.

А как насчет новостных сайтов? Во многих случаях новостные сайты имеют RSS, но не всегда. Как найти контент на новостных сайтах? А как насчет более общих сайтов? Многие веб-страницы (конечно, не все) имеют раздел контента и другие разделы. Можете ли вы придумать хороший алгоритм, чтобы найти «интересные» разделы, менее интересные? Возможно, разделы, которые меняются от тех, которые не меняются?

Надеюсь, я ясно дал понять ... Спасибо!

Ответы [ 2 ]

2 голосов
/ 11 августа 2009

Я этого не делал, но это был бы мой общий подход.

Как вы указали, отсутствие структуры в видимых частях контента (т. Е. У него нет тегов, таких как header, navigation, ads) HTML, означает, что его труднее найти в ключе. часть страницы. Мой подход заключается в том, чтобы сначала удалить отдельные элементы, которые вы определенно решили, что они не интересны. Возможный список исключений может быть:

  • метаэлементы, такие как !doctype, head (взять title в качестве отдельного фрагмента данных)
  • динамические элементы, такие как object, embed, applet, script
  • изображений (в зависимости от того, хотите ли вы их сохранить или нет), img
  • элементы формы, т.е. form, input, textarea, label, legend, select, option

Затем можно начать второй проход, исключив обычно встречающиеся div или ul имена идентификаторов / классов и все теги внутри них, такие как:

  • header, footer, meta
  • nav, navigation, topnav, sidebar
  • ad, ads, adu (и другие названия, обычно используемые для рекламы)

Это, мы надеемся, удалит значительное количество украшений со страницы. Следующая задача состоит в том, чтобы попытаться определить основной контент из того, что осталось, и я бы предложил изначально предположить, что автор сайта правильно использует семантический HTML, и поэтому, в основном, использует теги h1, h2 head и p тег абзаца.

Для идентификации содержимого я бы искал любой тег заголовка, за которым следуют тег (ы) абзаца. (Это может быть h2 для вашего основного контента; тег h1 часто (и, возможно, неправильно) используется для отображения названия сайта или логотипа, но, будем надеяться, это будет устранено путем исключения частей заголовка страницы.) Каждый последующий абзац следует добавлять к текущему содержимому до тех пор, пока не будет достигнут разрыв, который может быть либо концом элемента div или td, либо элементом заголовка того же уровня, с которого вы начали.

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

По мере того, как вы будете собирать больше примеров контента, вы можете добавить поддерживающие меры в свой алгоритм; возможно, вы заметили, что многие страницы используют div id="content" или id="maincontent". Также может быть полезно сохранить вторичные элементы контента, которые вы обнаружили, так что, если на некоторых сайтах есть любопытный способ структурирования контента, то, как только вы добавите ловушку в свой алгоритм, он может быть повторно запущен только для этого содержимое сайта.

0 голосов
/ 19 августа 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...