Какой 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.
Ответ 3
Я предлагаю Validator.nu parser на основе алгоритма синтаксического анализа HTML5. Это синтаксический анализатор, используемый в Mozilla от 2010-05-03