0

我已经处理了从 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();

现在整个文本包含以下文本

<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&P Midcap 400 Index”来获取值 1254.56。

有什么方法可以匹配文本吗?帮助表示赞赏.... :)

4

2 回答 2

0

恐怕你在这里用 Jsoup 可以做的不多,因为你需要提取的文本在一个脚本节点内,所以 Jsoup 处理的不是 HTML,而是 JavaScript。

可以做的是

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

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

于 2013-09-20T21:05:42.577 回答
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
}

谢谢

于 2017-07-19T06:12:55.967 回答