Извлечение текста между двумя <hr>тегами в HTML без CSS - PullRequest
2 голосов
/ 03 сентября 2011

Используя Jsoup, какой будет оптимальный подход для извлечения текста, о котором известен его шаблон ([number]%%[number]), но он находится на HTML-странице, которая не использует ни CSS, ни div, ни span, ни классов, ни какой-либо другой идентификации любого типа (да, старая HTML-страница, над которой я не имею никакого контроля)?

Единственное, что последовательно идентифицирует этот текстовый сегмент (и гарантированно останется таким), это то, что HTML всегда выглядиткак это (в большем объеме HTML):

<hr>
2%%17
<hr>

(числа 2 и 17 являются только примерами. Они могут быть любыми числами, и, по сути, это две переменные, которые мне нужны для надежногоизвлечь из этой HTML-страницы).

Если бы этот текст находился внутри вмещающего и однозначно идентифицировавшего <span> или <div>, у меня не было бы проблем с его извлечением с помощью Jsoup.Проблема в том, что это не тот случай, и единственный способ, о котором я могу думать прямо сейчас (который является не элегантным вообще), состоит в том, чтобы обработать raw HTML через регулярное выражение.

Обработка необработанного HTML с помощью регулярного выражения кажется неэффективной, однако, поскольку я уже проанализировал его с помощью Jsoup в DOM.

Предложения?

1 Ответ

2 голосов
/ 03 сентября 2011

Как насчет этого?

Document document = Jsoup.connect(url).get();
Elements hrs = document.select("hr");
Pattern pattern = Pattern.compile("(\\d+%%\\d+)");

for (Element hr : hrs) {
    String textAfterHr = hr.nextSibling().toString();
    Matcher matcher = pattern.matcher(textAfterHr);

    while (matcher.find()) {
        System.out.println(matcher.group(1)); // <-- There, your data.
    }
}
...