Я хочу выполнить простую задачу, но я изо всех сил пытаюсь найти простое решение для этого: у меня есть HTML-код веб-страницы в строке (или файле), и я хотел бы создать XPath для данногоэлемент.(Например, я хотел бы получить XPath для элемента <a>
)
Я пробовал разные решения, но постоянно сталкиваюсь с проблемами при правильном разборе html.Есть ли работающий очиститель HTML для Java, как этот?https://www.htmlwasher.com/ Это ЕДИНСТВЕННЫЙ функционирующий очиститель, который я обнаружил на данный момент, но это онлайн-инструмент.Благодаря этому я могу легко разобрать HTML-код и перейти к XPath.
В настоящее время я использую jOOX (https://github.com/jOOQ/jOOX) для генерации XPath:
Document document = $(html).document();
System.out.println($(document).find("a").xpath());
ЕслиHTML очищается с помощью предоставленного мною онлайн-инструмента, я могу сгенерировать правильный XPath. Мне нравится, как я мог бы взаимодействовать с jOOX, если бы только я мог правильно и программно проанализировать HTML. Знаете ли вы хороший способ разбора HTML? Iуже попробовал:
- JSoup
- Tagsoup
- HtmlCleaner
Страница веб-сайта тестирования http://www.ansa.it.
РЕДАКТИРОВАТЬ : Сбой синтаксического анализа при некоторых распространенных проблемах синтаксического анализа HTML, таких как незакрытые теги (например, </img>
), экранирование и т. Д.
Мне удалось "правильно" проанализировать HTML таким образом:
Document doc = Jsoup.parse(Jsoup.clean(html, Whitelist.relaxed()));
doc.outputSettings().escapeMode(EscapeMode.xhtml)
.syntax(Syntax.xml)
.charset(StandardCharsets.UTF_8);
Дело в том, что теги типа <a href="cinema.shtml">Cinema</a>
стали <a>Cinema</a>
, поэтому я не могу выбрать их, используя их атрибуты, например, href. Как я могу решить эту новуюпроблема?
Я заметил, что некоторые ссылки все еще имеют свой href, и оните, которые указывают на другие сайты, такие как Facebook или Twitter.Может ли это быть связано?