Анонс: Преобразование новостных лент из HTML в RSS в закрытом тестировании

Введение

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

Про сервис Page2RSS я упоминал в своём блоге уже неоднократно — это такой удобный сервис отслеживания изменений на веб страницах, но не без недостатков так как с его помощью можно отследить только страницу в целом и не более. Поэтому у меня и зародилась идея отслеживать не просто изменения, но превращать записи из новостной страницы в RSS напрямую.

Анонс

Пока в закрытом тестировании — сервис извлечения новостной ленты из любой веб страницы.

Вы передаёте в качестве параметра URL страницы, алгоритм, если находит там новости, то формирует RSS ленту и возвращает на неё ссылку, если не находит, то упоминает что лента не найдена.

Чтобы принять участие в тестировании необходимо мне отправить письмо на ibegtin (собачка) gmail.com, я пришлю ссылку на сервис. Настоятельная просьба никому эту ссылку не передавать — поскольку проживёт она относительно недолго, ориентировочно месяц и ресурсы оборудования не безграничны.

При использовании помним о том что у разных сайтов свои требования к допустимости использования информации и Вы на себя за это использование берёте полную ответственность, а сервис лишь предоставляет интерфейс.

Особенности и ограничения

Как и у каждого алгоритма есть ряд специфичных особенностей:

1. Алгоритм заточен под Рунет и русский язык. Возможно что он сможет распознать новости на других языках, но тут никаких гарантий нет поскольку это не проверялось.

2. Если на странице есть несколько новостных потоков, то каждый из них рассматривается как независимый RSS канал, но в целях упрощения сейчас эти потоки собираются в один и уже так отдаются пользователям. В будущем это можно будет изменить до выдачи пользователю несколько RSS каналов.

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

4. Поскольку формирование RSS ленты довольно ресурсоёмко, то сейчас все каналы кешируются на период в 2 часа.

5. Поскольку бета, то ошибки были и должны быть. Прошу если такие выявятся — как то неправильное распознавание или нераспознавание новостей, то направлять их мне по e-mail выше.

6. Какая-либо автоматическая выгрузка и индексирование поисковиками сейчас ограничены и в случае обнаружения будут банится.

Технология

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

Фактически этот алгоритм это «хвост от белки», но ещё не сама белка. Иначе говоря это лишь практический пример применимости глубокого анализа HTML на практике, есть и другие примеры, но они не столь наглядны.

Примеры

About This Author

  • suvit

    первая ошибка: все ссылки дают HTTP 500, смотрите логи сервера

  • http://ivan.begtin.name ivbeg

    Попробуйте ещё раз, теперь должно работать.

  • Санитар

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

  • http://ivan.begtin.name ivbeg

    Пользователь берёт на себя полную ответственность за свои действия.
    Смотрите на пример пользовательского соглашения в Page2RSS — http://page2rss.ru/terms.html
    Аналогично соглашения по использованию OpenKapow, yahoo Pipes, Dapper — в которых можно делать подобное вручную.

    Единственное отличие того что делаю я — в автоматике процедур.
    В любом случае если сервис будет запускаться в промышленную эксплуатацию, то эти и иные юридические требования будут учитываться.

  • Санитар

    Я просто сталкивался с такой историей, и в этом случае «пользователем» выступает робот, извлекающий страницу. Если есть пункт о несанкционированном запрете автоматизированного извлечения, это сразу играет против. Где-то так.

  • ACID Js

    Т.е. ваш алгоритм основывается на ряде эвристик и глубоком анализе dom-дерева страницы?
    Скажем разбирается html-страница на ряд блоков, содержащих информацию и делается вывод о принадлежности их к новостной информации или нет? Или для каждого такого блока создаётся некоторый шаблон скажем и потом ищется информация на этой странице по данному шаблону? Или просто анализируются повторяющиеся блоки на странице одинаковой структуры? 😉

    В общем если можно, то чуть подробней про текущую реализацию алгоритма — хотя бы в общих чертах — просто сам в своё время интересовался несколько, и возможно в перспективе также это будет мне актуально. Можно по мылу или аське если что — был бы очень признателен 😎

  • http://ivan.begtin.name ivbeg

    > Т.е. ваш алгоритм основывается на ряде эвристик и глубоком анализе dom-дерева страницы?
    У алгоритма есть несколько реализаций простая и сложная
    В случае сложной вначале идёт полная декомпозиция HTML, далее для каждого тэга происходит расчёт специального набора метрик в результате которого dom-дерево преобразуется в N-ное число деревьев и плоских структур, и далее на основе ряда эвристических методов выявляются смысловые и повторяющиеся блоки с новостной информацией. Шаблоны, «типовые блоки» и ещё ряд накопленной и собранной в процессе анализа страницы мета-информации здесь используется.
    Этот способ довольно медленен, но универсален и для других алгоритмов глубокого анализа — выявления платных ссылок и гео-классификации, которыми я также занимаюсь.

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

    Ключевое в моих алгоритмах — это сбор мета-информации. Прежде чем начинать сортировать блоки и тэги, они всегда подвергаются многопроходному анализу и назначением метрик.

    Подробностей реализации, увы, привести не могу — внутренняя реализация подобных алгоритмов и используемые метрики — это коммерческая информация.

  • ACID Js

    Ну на подробности я собственно ест-но и не надеялся, но за общий подход — спасибо — полезно. Если возникнет всё же подобная задача у меня и займусь вплотную её решением думаю ещё будет смысл нам как-нибудь пообщаться, да обменяться опытом при случае.

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

    Ну а в простой реализации у вас видимо эвристики, в стиле «новость должна содержать дату в таких-то форматах, заголовок в таких-то тегах не более стольки-то символов и текст с полными предложениями не менее стольки-то скажем». Затем уже поиск подобных блоков на странице — если не найдено — как вариант можно смягчить ещё условия и поискать заново какой-либо блок, похожий на новостной уже с другими критериями… Хотя это лишь моё грубое предположение, возможно далёкое от реальности, но всё равно спасибо за пищу для размышлений по этому вопросу 😎

Яндекс.Метрика