Какой надежный способ обрезать * содержимое * веб-страницы? - PullRequest
3 голосов
/ 12 сентября 2011

Интересно, как можно (более или менее) надежно обрезать контент со случайного веб-сайта (используя Ruby или JavaScript, на самом деле не имеет значения).

Во многом как в Evernote и Flipboard.

Как лучше всего определить , где фактическое содержимое находится на странице?

Цель: получить URL - получить фактическое содержимое этой страницы и игнорируйте весь макет и другую несвязанную информацию .

Например:

Просто используйте Evernote's "клип полной страницы ", чтобы понять, что именно я имею в виду.

Спасибо.

1 Ответ

2 голосов
/ 12 сентября 2011

Вначале я думал о том, чтобы DOM проанализировал страницу, затем проследил дерево DOM до содержимого определенного div и показал это (через XPath и т. Д.). Для страниц без четко определенных разделов будет сложно, независимо от того, какой метод вы используете. Плагин AutoPager для Firefox и Chrome реализует поведение парсинга XPath. Получить последнюю версию и открыть .xpi, чтобы посмотреть, как он это делает. Это реализация JavaScript.

Выберите элемент div, разрешив кому-либо ввести по схеме URL / сайта, что такое id или class содержимого div. Для вашего примера ninemsn div, содержащий заголовок статьи, кнопки «Поделиться», изображение автора и содержимое публикации, равен

<div class="post">

, а фактическое тело текста

<div class="postBody txtWrap" section="txt">

Таким образом, кто-то введет, что вам нужно проанализировать первый h1 из <div class="post"> и это заголовок статьи, а затем получить весь текст из <div class="postBody"> и сделать содержимое статьи (вам может понадобиться разобрать Класс таким образом, что он может соответствовать как postBody и txtWrap).

Другой пример (для забавы): Переполнение стека. Название вопроса содержится в

<div id="question-header">

Текст вопроса сложнее, потому что он находится в div с тем же class, что и текст ответа, а не id. Вам нужно сопоставить <div id="question">, а затем перейти к

<div class="post-text">

Аналогично для ответов, каждый <div id="answer-[UINTEGER]"> содержит <div class="post-text"> с соответствующим текстом.

В обеих ситуациях вы можете пройти через эти дивизии верхнего уровня question и answer- для <div class="user-details">, чтобы получить имена пользователей, репутацию и количество значков и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...