Вопрос

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

В чем проблема:Нахождение раздела "содержимое" HTML-страницы.

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

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

Надеюсь, я достаточно ясно выразился...Спасибо!

Это было полезно?

Решение

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

Как вы указываете, отсутствие структуры в видимых частях контента (т.е.в нем нет таких тегов, как 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 заголовочные метки и p тег абзаца.

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

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top