Какой HTML Parser является лучшим?

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

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

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

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


EDIT:

В лучшем случае я хочу, по крайней мере, следующие функции:

  • Скорость
  • Простота поиска любого HtmlElement по его "id" или "name" или "tag type".

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

Ответ 1

Self plug: я только что выпустил новый Java-парсер Java: 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();

Подробнее см. Selector javadoc.

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

Ответ 2

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

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

С помощью HtmlCleaner вы можете найти любой элемент с помощью XPath.

Для других синтаксических анализаторов html см. этот вопрос SO.