Який HTML-парсер найкращий? [зачинено]


194

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

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

Оскільки 80% моєї роботи передбачає просто розбір, я хочу використовувати легкий HTML-аналізатор, оскільки в HtmlUnit потрібно багато часу, щоб спочатку завантажити сторінку, потім отримати джерело, а потім проаналізувати його.

Я хочу знати, який HTML-аналізатор найкращий. Аналізатор буде кращим, якби він був близький до аналізатора HtmlUnit.


Редагувати:

У кращому випадку я хочу хоча б наступних функцій:

  1. Швидкість
  2. Легко знайти будь-який HtmlElement за його "id" або "name" або "type type".

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


2
Як ви маєте на увазі "найкращий"? Ви маєте на увазі швидкість, простоту переходу від поточної реалізації, дотримання стандартів W3C, ще щось, про що я не думав? Ваше запитання передбачає швидкість, але також передбачає перехідний час розвитку. Деякі роз’яснення можуть допомогти іншим рекомендувати гарні аналізатори, які краще відповідатимуть вашим потребам.
aperkins

2
Твоє твердження "Я кодую багато парсерів", схоже, не відповідає питанням. Ви маєте на увазі "Мені потрібно багато використовувати html-аналізатори?"
пусте

11
Я думаю, що це питання є достатньо конкретним, щоб бути звільненим від "неконструктивної" близької причини.
Білл Ящірка

9
Проголосуйте, щоб повторно відкрити це, будь ласка. Це досить конкретно і не повинно закриватися.
AZ_

3
Так, дехто з людей бореться зі святою війною проти святих воєн "найкращих" питань. Так дратує. Голосування у відповідях чітко вказує на корисність цього питання.
користувач1050755

Відповіді:


396

Самостійний штекер: Я щойно випустив новий HTML-аналізатор 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.

Це новий проект, тому будь-які ідеї для вдосконалення дуже вітаються!


15
Ця річ є фантастичною, і мені подобається підтримка селектора CSS. Я ледве знаю, що використовую бібліотеку Java. :-)
Вільям Пітрі

17
Будь ласка, не переставайте підтримувати це. Це саме те, що нам потрібно було розібрати HTML за допомогою сервера Java! Це круто! Я створив проксі-сервер лише за пару годин, який змінює всі src та href-посилання, щоб зробити їх повними шляхами до початкового сервера.
jmort253

7
Я щойно поглянув на це. Мені подобається його інтерфейс та документація. Це легко зрозуміти. :)
смарагдовий

5
Хороша робота! Отримав і працює менше ніж за 10 хвилин.
Індрек Кюе

10
Неймовірно, що це так хворий. Мені вдалося обробити HTML-сторінку за лічені хвилини. ДЯКУЄТЕ ТАКОЖ БУДЬ ЗА ЦЕ ВЕЛИКОЮ РОБОТУ.
Майкл-О

32

Найкраще, що я бачив досі - це HtmlCleaner :

HtmlCleaner - це HTML-аналізатор з відкритим кодом, написаний на Java. HTML, знайдений в Інтернеті, зазвичай брудний, неправильно сформований і непридатний для подальшої обробки. Для будь-якого серйозного споживання подібних документів необхідно спочатку очистити безлад і навести порядок до тегів, атрибутів та звичайного тексту. Для даного документа HTML HtmlCleaner впорядковує окремі елементи та створює добре сформований XML. За замовчуванням дотримується аналогічних правил, якими користується більшість веб-браузерів для створення Модель об'єкта документа. Однак користувач може надати спеціальний тег та набір правил для фільтрації та балансування тегів.

За допомогою HtmlCleaner ви можете знайти будь-який елемент за допомогою XPath.

Для інших HTML-аналізаторів див. Це питання .


1
Вам слід обробляти проксі самостійно, а потім використовувати HtmlCleaner для обробки потоку. => Це не зручно. T__T
kidnan1991

Хіба HTMLTidy не буде кращим варіантом тут? html-tidy.org
Troy Witthoeft

1
Similar rules that the most of web browsers use- Це не дуже переконливо
pguardiario

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.