Сценарий:
Я занимаюсь извлечением HTML-информации с помощью сканера.В настоящее время большинство правил извлечения являются жестко закодированными (не теги или тому подобное, а циклы, вложенные элементы и т. Д.)
Например, одна общая задача выглядит следующим образом:
- Получить таблицу с идентификатором X. Если она не существует, могут быть дополнительные механизмы, поэтому найдите информацию, которая срабатывает
- Найдите строку, содержащую некоторую информацию.Обычно это регулярное выражение для определенного столбца.
- Извлечение данных в другом столбце (обычно отмечается в тд или ранее обнаружен в заголовке)
Способ IВ настоящее время я делаю так:
- Запрос для получения тела первой таблицы с идентификатором X (X находится в файле конфигурации).Некоторые веб-сайты из моего списка содержат ошибки и дублируют этот идентификатор для элементов, отличных от таблицы -.-
- Перебираем интересные ячейки, выполняя regexp для cell.text () (regexp находится в конфигурационном файле)
- Получить родительскую строку совпадающих ячеек и получить нужную мне ячейку из строки (идентификатор строки находится в файле конфигурации)
Имея все это жестко закодировано по большей части (кроме имен столбцов, идентификаторы таблиц и т. д.) дает мне преимущество или простоту реализации и большую эффективность, чем универсальный синтаксический анализатор, однако он менее настраиваемый, и некоторые изменения на целевых веб-сайтах вынуждают меня работать с кодом, что затрудняет делегированиезадача.
Вопрос
Существует ли какой-либо язык (желательно с доступной реализацией Java), который позволяет последовательно определять правила для извлечений, подобных тем?Я использую селекторы в стиле css для некоторых задач, но другие не так просты, поэтому я думаю, что должно быть что-то расширяющее, что не сопровождающий программиста может добавлять / изменять правила по требованию.
Я бы принял ответ на основе Nutch, если он есть, поскольку мы изучаем переход наших сканеров к нулю, хотя я бы предпочел общее решение Java.
Я думал о написании генератора Parserи создать свой собственный набор правил, позволяющих пользователям / сопровождающим генерировать парсеры, но это действительно похоже на переизобретение колеса без всякой причины.