Вопрос-ответ

How can I efficiently parse HTML with Java?

Как я могу эффективно анализировать HTML с помощью Java?

Я часто занимаюсь синтаксическим анализом HTML в своей работе. До сих пор я использовал безголовый браузер HtmlUnit для синтаксического анализа и автоматизации браузера.

Теперь я хочу разделить обе задачи.

Я хочу использовать легкий анализатор HTML, потому что в HtmlUnit требуется много времени, чтобы сначала загрузить страницу, затем получить исходный код и затем проанализировать его.

Я хочу знать, какой анализатор HTML может эффективно анализировать HTML. Мне нужно


  1. Скорость

  2. Легко найти любой HtmlЭлемент по его "идентификатору", или "имени", или "типу тега".

Для меня было бы нормально, если бы это не очищало грязный HTML-код. Мне не нужно очищать какой-либо исходный HTML-код. Мне просто нужен самый простой способ перемещаться по htmlэлементам и извлекать из них данные.

Переведено автоматически
Ответ 1

jsoup

Self plug: я только что выпустил новый Java-анализатор HTML: jsoup. Я упоминаю об этом здесь, потому что думаю, что он сделает то, что вам нужно.

Его основной трюк - синтаксис CSS-селектора для поиска элементов, например:

String html = "<html><head><title>First parse</title></head>"
+ "<body><p>Parsed HTML into a doc.</p></body></html>";
Document doc = Jsoup.parse(html);
Elements links = doc.select("a");
Element head = doc.select("head").first();

Смотрите Селектор javadoc для получения дополнительной информации.

Это новый проект, поэтому любые идеи по улучшению приветствуются!

Ответ 2

Лучшее, что я видел до сих пор, - это HTMLCleaner:


HTMLCleaner - это анализатор HTML с открытым исходным кодом, написанный на Java. HTML, найденный в Интернете, обычно грязный, неправильно сформированный и непригодный для дальнейшей обработки. Для любого серьезного использования таких документов необходимо сначала навести порядок в тегах, атрибутах и обычном тексте. Для данного HTML-документа HTMLCleaner упорядочивает отдельные элементы и создает правильно сформированный XML. По умолчанию он следует аналогичным правилам, которые большинство веб-браузеров используют для создания объектной модели документа. Однако пользователь может предоставить пользовательский тег и набор правил для фильтрации и балансировки тегов.


С помощью HTMLCleaner вы можете найти любой элемент, используя XPath.

Для других парсеров html смотрите Этот вопрос SO.

Ответ 3

Я предлагаю Validator.nu Синтаксический анализатор, основанный на алгоритме синтаксического анализа HTML5. Это анализатор, используемый в Mozilla с 2010-05-03

java