Я сделал кое-что из этого недавно, и вот мой опыт.
Существует три основных подхода:
- Регулярные выражения.
- Самый гибкий, самый простой в использовании, со слабо структурированной информацией и изменяющимися форматами.
- Труднее проводить структурный анализ / анализ тегов, но легче выполнять сопоставление текста .
- Встроенная проверка форматирования данных.
- Сложнее поддерживать, чем другие, потому что вам нужно писать регулярное выражение для каждого шаблона, который вы хотите использовать для извлечения / преобразования документа
- Обычно медленнее, чем 2 и 3 .
- Хорошо работает для списков элементов аналогичного формата
- Хороший инструмент разработки / тестирования регулярных выражений и несколько примеров страниц помогут. У меня есть хорошие отзывы о RegexBuddy. Попробуйте их демо.
- Я добился наибольшего успеха в этом. Гибкость позволяет работать с неприятными, грубыми, живой HTML-код.
- Конвертируйте HTML в XHTML и используйте инструменты извлечения XML. Очистите HTML, преобразуйте его в разрешенный XHTML и используйте XPath / XQuery / X-something, чтобы запросить его как данные XML.
- Инструменты: TagSoup, HTMLTidy и т. Д.
- Качество преобразования HTML в XHML ОЧЕНЬ важно и сильно варьируется.
- Лучшее решение, если данные, которые вам нужны, структурированы макетом HTML и тегами (данные в HTML таблицы, списки, группы DIV / SPAN и т. д.)
- Наиболее подходит для получения структур ссылок, вложенных таблиц, изображений, списков и т. д.
- Должен быть быстрее, чем вариант 1, но медленнее, чем вариант 3.
- Хорошо работает, если форматирование содержимого изменяется / является переменным, а структура / макет документа - нет.
- Если данные не структурированы тегами HTML, у вас проблемы.
- Может использоваться с вариантом 1.
- ] Генератор парсеров (ANTLR и др.) - создает грамматику для синтаксического анализа и анализа страницы.
- Я не пробовал это, потому что это не подходило для моих (беспорядочных) страниц
- Наиболее подходит, если структура HTML сильно структурирована, очень постоянна, регулярна и никогда не меняется.
- Используйте это, если в документе есть легко описываемые шаблоны, но они не включают HTML-теги и включают рекурсию или сложное поведение
- Не требует ввода XHTML
- БЫСТРАЯ пропускная способность, как правило
- Большая кривая обучения, но проще в обслуживании
Я возился с веб-сборщиком для варианта 2, но я нахожу их синтаксис немного странным. Смесь XML и некоторого языка сценариев псевдо-Java. Если вам нравится Java и нравится извлечение данных в стиле XML (XPath, XQuery), это может быть билетом для вас.
Изменить: если вы используете регулярные выражения, убедитесь, что вы используете библиотеку с ленивыми квантификаторами и группами захвата! PHP '
ответ дан 30 November 2019 в 00:55
поделиться