Конфигурируемое извлечение HTML-информации - PullRequest
0 голосов
/ 23 июня 2019

Сценарий:

Я занимаюсь извлечением HTML-информации с помощью сканера.В настоящее время большинство правил извлечения являются жестко закодированными (не теги или тому подобное, а циклы, вложенные элементы и т. Д.)

Например, одна общая задача выглядит следующим образом:

  1. Получить таблицу с идентификатором X. Если она не существует, могут быть дополнительные механизмы, поэтому найдите информацию, которая срабатывает
  2. Найдите строку, содержащую некоторую информацию.Обычно это регулярное выражение для определенного столбца.
  3. Извлечение данных в другом столбце (обычно отмечается в тд или ранее обнаружен в заголовке)

Способ IВ настоящее время я делаю так:

  1. Запрос для получения тела первой таблицы с идентификатором X (X находится в файле конфигурации).Некоторые веб-сайты из моего списка содержат ошибки и дублируют этот идентификатор для элементов, отличных от таблицы -.-
  2. Перебираем интересные ячейки, выполняя regexp для cell.text () (regexp находится в конфигурационном файле)
  3. Получить родительскую строку совпадающих ячеек и получить нужную мне ячейку из строки (идентификатор строки находится в файле конфигурации)

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

Вопрос

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

Я бы принял ответ на основе Nutch, если он есть, поскольку мы изучаем переход наших сканеров к нулю, хотя я бы предпочел общее решение Java.

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

...