метод python для извлечения контента (исключая навигацию) из HTML-страницы - PullRequest
8 голосов
/ 28 апреля 2009

Конечно, HTML-страницу можно анализировать с использованием любого количества анализаторов Python, но я удивлен тем, что, похоже, нет открытых сценариев синтаксического анализа для извлечения значимого содержимого (исключая боковые панели, навигацию и т. Д.) Из данный HTML документ

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

Ответы [ 5 ]

5 голосов
/ 28 апреля 2009

Попробуйте библиотеку Beautiful Soup для Python. Он имеет очень простые методы для извлечения информации из файла HTML.

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

Был ли какой-то конкретный тип информации, которую вы пытались извлечь, или какая-то другая конечная цель?

Вы можете попробовать извлечь любой контент с помощью маркеров 'div' и 'p' и сравнить относительные размеры всей информации на странице. Тогда проблема состоит в том, что люди, вероятно, группируют информацию в коллекции 'div's' и 'p' (или, по крайней мере, они делают это, если пишут хорошо сформированный html!).

Может быть, если вы сформировали дерево взаимосвязи информации (узлами было бы «p» или «div или что-то еще, и каждый узел содержал бы связанный текст), вы могли бы провести какой-то анализ, чтобы определить наименьшее» p 'или' div ', охватывающий то, что представляется большей частью информации ..?

[РЕДАКТИРОВАТЬ] Может быть, если вы сможете включить его в древовидную структуру, которую я предложил, вы могли бы затем использовать аналогичную систему баллов для спама убийцы. Определите некоторые правила, которые пытаются классифицировать информацию. Некоторые примеры:

+1 points for every 100 words
+1 points for every child element that has > 100 words
-1 points if the section name contains the word 'nav'
-2 points if the section name contains the word 'advert'

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

[EDIT2] Глядя на читабельность, кажется, что он делает почти то же, что я только что предложил! Может быть, это можно улучшить, чтобы лучше понимать таблицы?

4 голосов
/ 28 апреля 2009

Посмотрите на создателя шаблона: http://www.holovaty.com/writing/templatemaker/

Это написано одним из основателей Django. В основном вы подаете ему несколько примеров html-файлов, и он сгенерирует «шаблон», который вы затем сможете использовать, чтобы извлечь только разные биты (обычно это содержательный контент).

Вот пример из кодовой страницы Google :


# Import the Template class.
>>> from templatemaker import Template

# Create a Template instance.
>>> t = Template()

# Learn a Sample String.
>>> t.learn('<b>this and that</b>')

# Output the template so far, using the "!" character to mark holes.
# We've only learned a single string, so the template has no holes.
>>> t.as_text('!')
'<b>this and that</b>'

# Learn another string. The True return value means the template gained
# at least one hole.
>>> t.learn('<b>alex and sue</b>')
True

# Sure enough, the template now has some holes.
>>> t.as_text('!')
'<b>! and !</b>'

3 голосов
/ 21 ноября 2010

Вы можете использовать веб-приложение для котлов для извлечения и извлечения контента на лету.

(Это не относится к Python, поскольку вам нужно всего лишь отправить HTTP-запрос GET на страницу в Google AppEngine).

Приветствия

Christian

1 голос
/ 28 апреля 2009

Что имеет смысл, а что нет, зависит от семантики страницы. Если семантика дрянная, ваш код не будет «угадывать», что имеет смысл. Я использую читабельность, которую вы связали в комментарии, и вижу, что на многих страницах, которые я пытаюсь прочитать, это не дает никакого результата, не говоря уже о приличном.

Если кто-то поместит контент в таблицу, вы обречены. Попробуйте удобочитаемость на форуме phpbb, и вы поймете, о чем я.

Если вы хотите это сделать, используйте регулярное выражение на <p></p> или проанализируйте DOM.

0 голосов
/ 23 июля 2014

Гусь - это библиотека для этой задачи. Процитирую их README:

Гусь попытается извлечь следующую информацию:

  • Основной текст статьи
  • Основное изображение статьи
  • Любые фильмы Youtube / Vimeo, встроенные в статью
  • Мета-описание
  • метатеги
...