在无CSS的HTML中提取两个<hr />标记之间的文本

时间:2011-09-02 23:10:33

标签: java html-parsing jsoup

使用Jsoup,提取文本的最佳方法是什么,其模式已知([number]%%[number])但位于既不使用CSS也不使用div,跨越,类或其他任何标识的HTML页面type(是的,我无法控制的旧HTML页面)?

唯一能够始终识别该文本片段(并保证保持这种状态)的唯一方法就是HTML 始终看起来像这样(在更大的HTML体内):

<hr>
2%%17
<hr>

(数字2和17仅为示例。它们可以是任何数字,实际上,这些是我需要从该HTML页面可靠地提取的两个变量。)

如果该文本位于封闭且唯一标识<span><div>的范围内,那么使用Jsoup提取它是没有问题的。问题是情况并非如此,我现在能想到的唯一方法(根本不是 优雅)是通过一个处理原始 HTML正则表达式。

通过正则表达式处理原始HTML似乎效率低下,但因为我已经通过Jsoup将其解析为DOM。

建议?

1 个答案:

答案 0 :(得分:2)

这个怎么样?

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.
    }
}