簡體   English   中英

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

[英]How to read the particular string value using 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&P Midcap 400 Index”獲取值1254.56。

有什么方法可以匹配文本? 感謝您的幫助。...:)

恐怕在這里用Jsoup無法做很多事情,因為您需要提取的文本在腳本節點內部,因此Jsoup處理的不是HTML,而是JavaScript。

可以做的是

  • 您可以嘗試手動提取所需的文本
  • 或在Selenium中呈現頁面,然后獲取頁面源並使用Jsoup對其進行解析
  • 或在Web瀏覽器中打開一個頁面,將其保存到磁盤,然后進行解析

關於您的Jsoup示例,不需要從html創建TextNode。 您可以在doc.body()中獲取樹,然后使用Jsoup API進行導航:CSS選擇器或樹API方法(子類,第一個等)。

可以在這種情況下使用正則表達式

這是您問題的解決方案

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
}

謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM