如何使用JSoup读取特定的字符串值

时间:2013-09-20 11:04:57

标签: java html jsoup

我已经处理了代码以从html中读取整个内容。

URL url = new URL("https://idms.sunamerica.com/v2/market/home.idms");
             Document doc = Jsoup.parse(url, 5*1000);
             TextNode tn = new TextNode(doc.body().html(), "");
                String entireText = tn.getWholeText();

现在,wholeText包含以下文字

<tr class="evenrow" onmouseover="loadMiniChart(\'S&amp;P Midcap 400\',8318990,\'market_mini_chart\')">
       '); document.write('
       <td>
        <div align="left">
         S&amp;P Midcap 400 Index
        </div></td>'); document.write('
       <td>1254.56</td>'); document.write('
       <td><span class="negative">-2.83</span></td>'); document.write('
      </tr>');

现在我需要使用字符串“S&amp; P Midcap 400 Index”获得值1254.56。

有没有任何方法可以匹配文本?感谢帮助.... :)

2 个答案:

答案 0 :(得分:0)

我担心你在这里用Jsoup做的不多,因为你需要提取的文本在脚本节点内,所以它不是Jsoup处理的HTML,而是JavaScript。

可以做的是

  • 您可以尝试手动提取所需的文字
  • 或在Selenium中呈现页面,然后获取页面源并使用Jsoup
  • 解析它
  • 或在您的网络浏览器中打开一个页面,将其保存到磁盘然后解析

关于你的Jsoup示例,不需要从html创建TextNode。你在doc.body()中获得了树,然后使用Jsoup API导航:CSS选择器或树API方法(子项,第一个等)。

答案 1 :(得分:0)

可以在这些场景中使用正则表达式

以下是您的问题的解决方案

String ResultString = null;
try {
    Pattern regex = Pattern.compile("<td>\\d+.\\d+</td>", Pattern.DOTALL | Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE | Pattern.MULTILINE);
    Matcher regexMatcher = regex.matcher(subjectString);
    if (regexMatcher.find()) {
        ResultString = regexMatcher.group();
    } 
} catch (PatternSyntaxException ex) {
    // Syntax error in the regular expression
}

感谢