метод Python для извлечения контента (за исключением навигации) со страницы HTML

StackOverflow https://stackoverflow.com/questions/796490

Вопрос

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

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

Это было полезно?

Решение

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

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

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

Вы можете попробовать извлечь любой контент с помощью маркеров «div» и «p» и сравнить относительные размеры всей информации на странице.Проблема в том, что люди, вероятно, группируют информацию в коллекции «div» и «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'

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

[РЕДАКТИРОВАТЬ2] Судя по читаемости, кажется, что он делает именно то, что я только что предложил!Может быть, его можно улучшить, чтобы лучше понять таблицы?

Другие советы

Взгляните на шаблонизатор: http://www.holovaty.com/writing/templatemaker/

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

Вот пример из кодовая страница гугла:


# 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>'

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

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

Ваше здоровье,

христианин

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

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

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

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

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

  • Основной текст статьи
  • Основное изображение статьи
  • Любые фильмы Youtube/Vimeo, встроенные в статью.
  • Мета-описание
  • Мета-теги
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top