Есть ли в Java проверяющий HTML-парсер? - PullRequest
4 голосов
/ 24 мая 2009

Мне нужно разобрать HTML 4 в Java. В идеале я хотел бы, чтобы реализация была SAX-совместимой.

Я знаю, что для Java существует множество HTML-парсеров, однако все они, похоже, выполняют "уборку". Другими словами, они исправят плохо сформированный HTML. Я не хочу этого .

Мои требования:

  1. Нет уборки.
  2. Если входной документ недействителен, HTML-анализ не удастся.
  3. Документ должен проверяться на соответствие DTD HTML.
  4. Парсер может генерировать события SAX2.

Существует ли библиотека, отвечающая этим требованиям?

Ответы [ 4 ]

2 голосов
/ 18 февраля 2011

Я думаю, что Jericho HTML Parser может выполнить по крайней мере одно из ваших основных требований («Если входной документ недействителен, HTML-анализ не может быть выполнен») в том смысле, что он по крайней мере скажет вы, если есть несоответствующие теги или другие ядовитые недостатки HTML, и вы можете отказаться на основании этой информации.

Попробуйте ввести недопустимый html в эту демонстрацию форматирования в Иерихоне и обратите внимание на «Log Parser Log» внизу страницы:

http://jerichohtmlparser.appspot.com/samples/FormatSource.jsp

Так что да, этот выполняет приведение в порядок тегов, но, по крайней мере, говорит вам об этом - вы можете получить эту информацию, установив net.htmlparser.jericho.Logger ( например, WriterLogger или что-то более конкретное из вашего собственного творения) в вашем источнике, а затем продолжайте в зависимости от того, какие ошибки вышли из системы. Это небольшой пример:

    Source source=new Source("<a>I forgot to close my link!");
    source.setLogger(myListeningLogger);

    source.getSourceFormatter().writeTo(new NullWriter());
    // myListeningLogger has now had all the HTML flaws written to it

В приведенном выше примере метод info () вашего регистратора вызывается со строкой: 'StartTag at (r1,c1,p0) missing required end tag', которая относительно разбирается, и вы всегда можете решить просто отклонить любой HTML-код, который регистрирует любое сообщение хуже, чем отладка Фактически, Иерихон регистрирует почти все ошибки как уровень «информация» с парой на уровне «предупреждение» (у вас может возникнуть соблазн создать небольшой форк с серьезностями, отрегулированными в соответствии с тем, что вас волнует).

Иерихон доступен на Maven Central, что всегда является хорошим знаком:

http://mvnrepository.com/artifact/net.htmlparser.jericho/jericho-html

Удачи!

2 голосов
/ 24 мая 2009

Вы можете найти коллекцию HTML-парсеров здесь HTML-парсеры . Я точно не помню, но я думаю, что TagSoup анализирует файл без применения исправлений ...

1 голос
/ 25 мая 2009

Вы можете проверить http://lobobrowser.org/cobra.jsp. В них реализован чистый веб-браузер на Java (Lobo). У них есть компонент парсера (Cobra), извлеченный отдельно для использования. Я, честно говоря, не уверен, что он будет выполнять то, что вам нужно, с требованием «не убирать», но это стоит посмотреть. Я столкнулся с этим при изучении дикой природы для чистого веб-браузера на Java.

0 голосов
/ 25 мая 2009

Вы можете попытаться создать подкласс javax.swing.text.html.parser.Parser и реализовать методы handleXXX (). Кажется, он не пытается исправить XML. Подробнее на API

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...