Какие существуют методы для извлечения навигационного меню из веб-страницы? - PullRequest
2 голосов
/ 01 мая 2011

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

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

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

  • http://p2.cs.berkeley.edu/
  • http://www.cs.cornell.edu/bigreddata/maybms/ (примечание: здесь мне нужно меню, которое указывает на публикации / загрузки, а не навигацию по боковой панели, но избавиться от навигации по боковой панели проще с помощью чего-то вроде Readability).

Ответы [ 2 ]

1 голос
/ 01 мая 2011

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

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

0 голосов
/ 02 мая 2011

Как упоминал Drag0nR3b0rn, вы должны использовать соотношение текста ссылка / не ссылка + общие слова меню в качестве функций и вручную / обученное дерево решений. Для сканирования я бы рекомендовал HtmlUnit

...