Какой HTML парсер самый лучший? [закрыто]

194

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

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

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

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


РЕДАКТИРОВАТЬ:

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

  1. скорость
  2. Легко найти любой HtmlElement по его «id» или «name» или «type tag».

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

Ятендра Гоэль
источник
2
Как вы имеете в виду «лучший»? Вы имеете в виду скорость, простоту перехода от текущей реализации, приверженность стандартам W3C, что-то еще, о чем я не думал? Ваш вопрос подразумевает скорость, но также подразумевает время перехода разработки. Некоторые разъяснения могут помочь другим рекомендовать хорошие парсеры, которые лучше соответствуют вашим потребностям.
Аперкинс
2
Ваше утверждение «я много кодирую парсеров», похоже, не соответствует этому вопросу. Вы имеете в виду «Мне нужно много использовать html-парсеры?»
пусто
11
Я думаю, что этот вопрос достаточно специфичен, чтобы освободить его от «неконструктивной» причины.
Билл Ящерица
9
Проголосуйте, чтобы снова открыть это, пожалуйста. Это достаточно конкретно и не должно быть закрыто.
AZ_
3
Да, некоторые люди на ТАК ведут священную войну против священных войн "лучших из" вопросов. Так раздражает. Ответ голосования четко указывает на полезность этого вопроса.
user1050755

Ответы:

396

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 для получения дополнительной информации.

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

Джонатан Хедли
источник
15
Это фантастика, и мне нравится поддержка селектора CSS. Я едва знаю, что использую библиотеку Java. :-)
Уильям Пьетри
17
Пожалуйста, не прекращайте поддерживать это. Это именно то, что нам нужно для анализа HTML с помощью серверной Java! Это круто! Я создал прокси всего за пару часов, который изменяет все ссылки src и href, чтобы сделать их полными путями к исходному серверу.
jmort253
7
Я только что взглянул на это. Мне нравится его интерфейс и документация. Это легко понять. :)
emeraldhieu
5
Хорошая работа! Получил Jupou и работает менее чем за 10 минут.
Индрек Кюэ
10
Невероятно, это ооочень больной. Я смог обработать HTML-страницу за считанные минуты. СПАСИБО ЗА БОЛЬШУЮ РАБОТУ.
Майкл-О,
32

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

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

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

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

Тангенс
источник
1
Вы должны обработать прокси самостоятельно, а затем использовать HtmlCleaner для обработки вашего потока. => Это не удобно. T__T
kidnan1991
Разве HTMLTidy не будет лучшим вариантом здесь? html-tidy.org
Трой Виттофт
1
Similar rules that the most of web browsers use- Это не очень убедительно
pguardiario