Я этого не делал, но это был бы мой общий подход.
Как вы указали, отсутствие структуры в видимых частях контента (т. Е. У него нет тегов, таких как 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"
. Также может быть полезно сохранить вторичные элементы контента, которые вы обнаружили, так что, если на некоторых сайтах есть любопытный способ структурирования контента, то, как только вы добавите ловушку в свой алгоритм, он может быть повторно запущен только для этого содержимое сайта.