Создать отличный парсер - извлекать соответствующий текст из HTML / блогов - PullRequest
22 голосов
/ 18 июля 2009

Я пытаюсь создать обобщенный HTML-парсер, который хорошо работает в блогах. Я хочу указать моему парсеру на URL конкретной записи и получить чистый текст самого сообщения. Мой основной подход (из python) состоял в том, чтобы использовать комбинацию BeautifulSoup / Urllib2, что нормально, но предполагает, что вы знаете правильные теги для записи в блоге. У кого-нибудь есть идеи получше?

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

  1. Программа unix 'lynx', кажется, особенно хорошо разбирает сообщения в блогах - какой анализатор они используют или как это можно использовать?

  2. Существуют ли какие-либо службы / парсеры, которые автоматически удаляют нежелательную рекламу и т. Д.?

  3. В этом случае у меня было смутное представление о том, что это может быть правильным предположением, что сообщения в блоге обычно содержатся в определенном теге с определением class = "entry" или чем-то подобным. Таким образом, может быть возможно создать алгоритм, который найдет теги с наиболее чистым текстом между ними - есть идеи на этот счет?

Спасибо!

Ответы [ 2 ]

24 голосов
/ 18 июля 2009

Мальчик, у меня есть идеальное решение для вас.

Алгоритм читабельности Arc90 делает именно это. Учитывая HTML-контент, он выбирает содержимое основного сообщения блога, игнорируя верхние и нижние колонтитулы, навигацию и т. Д.

Вот реализации в:

Я через пару дней выпустлю порт Perl для CPAN. Готово.

Надеюсь, это поможет!

3 голосов
/ 18 июля 2009

Существуют проекты, специально предназначенные для фильтрации «шума» на данной странице. Как правило, это делается путем предоставления алгоритму нескольких примеров страниц данного типа, и он может посмотреть, какие части между ними не меняются. При этом вам придется дать алгоритму несколько примеров страниц / постов каждого блога , которые вы хотите проанализировать. Обычно это хорошо работает, когда у вас есть небольшой определенный набор сайтов, которые вы будете сканировать (например, новостные сайты). Алгоритм в основном определяет шаблон, который они используют в HTML, и выделяет интересную часть. Здесь нет магии, она жесткая и несовершенная.

Отличный пример этого алогрита можно найти в исходном коде EveryBlock.com, который был только с открытым исходным кодом. Перейдите на everyblock.com / code , загрузите пакет "ebdata" и посмотрите на модуль "templatemaker".

И я не хочу утверждать очевидное, но не задумывались ли вы только об использовании RSS из обсуждаемых блогов? Обычно поля содержат всю запись блога, заголовок и другую мета-информацию вместе с ними. Использование RSS будет намного проще, чем предыдущее решение, о котором я говорил.

...