Подтвердить что ты не робот

Веб-скребок - как определить основной контент на веб-странице

Учитывая веб-страницу новостей (из любого основного источника новостей, такого как times или bloomberg), я хочу определить основной контент статьи на этой странице и выбросить другие разные элементы, такие как объявления, меню, боковые панели, комментарии пользователей.

Какой общий способ сделать это, который будет работать на большинстве крупных новостных сайтах?

Какие хорошие инструменты или библиотеки для интеллектуального анализа данных? (предпочтительно на основе python)

4b9b3361

Ответ 1

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

Ответ 2

Существует несколько способов сделать это, но никто не будет работать. Вот два самых простых:

  • если это известный конечный набор веб-сайтов: в вашем скрепе конвертируйте каждый URL из обычного URL-адреса в URL-адрес печати для данного сайта (на самом деле его нельзя обобщить на разных сайтах).
  • Используйте алгоритм читаемости arc90 (эталонная реализация находится в javascript) http://code.google.com/p/arc90labs-readability/. Короткий вариант этого алгоритма - это поиск div с p-тегами внутри них. Это не сработает для некоторых веб-сайтов, но, как правило, неплохо.

Ответ 3

Некоторое время назад я написал простой Python script для этой задачи. Он использует эвристику для группировки текстовых блоков вместе на основе их глубины в DOM. Тогда группа с наибольшим текстом считается основным содержанием. Это не идеально, но хорошо работает для новостных сайтов, где статья, как правило, является самой большой группировкой текста, даже если она разбита на несколько тегов div/p.

Вы использовали бы script как: python webarticle2text.py <url>

Ответ 4

Diffbot предлагает бесплатный (10.000 URL) API для этого, не знаю, является ли этот подход тем, что вы ищете, но он может помочь кому-то http://www.diffbot.com/

Ответ 5

Для решения в Java обратите внимание на https://code.google.com/p/boilerpipe/:

Библиотека котлов предлагает алгоритмы для обнаружения и удаления избыточного "беспорядка" (шаблона, шаблонов) вокруг основного текстового содержимого веб-страницы.

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

Но здесь есть также оболочка python:

https://github.com/misja/python-boilerpipe

Ответ 6

Возможно, было бы более полезно извлечь RSS-ленты (<link type="application/rss+xml" href="..."/>) на этой странице и проанализировать данные в фиде, чтобы получить основной контент.

Ответ 7

Другая возможность ветки "реального" контента от шума - измерение плотности HTML частей страницы HTML.

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

Обновление: только что обнаруженный URL-адрес выше не работает прямо сейчас; вот альтернативная ссылка в кешированную версию archive.org.

Ответ 8

Я бы не пытался очистить его от веб-страницы - слишком много вещей может испортить его, но вместо этого посмотрите, какие веб-сайты публикуют RSS-каналы. Например, RSS-канал Guardian имеет большую часть текста из своих ведущих статей:

http://feeds.guardian.co.uk/theguardian/rss

Я не знаю, имеет ли The Times (The London Times, а не Нью-Йорк), потому что это за платной. Удачи вам в этом...