2016-08-21 28 views
-1

目標:從Yahoo Finance頁面獲取JavaScript元素的內部文本。請參考使用Java從Website獲取InnerHTMLof

enter image description here

我可以使用下面

document.getElementsByClassName('D(ib) Va(t)')[15].childNodes[2].innerHTML 

的代碼獲得的innerHTML但是,我無法找到一個方法,在Java中

此傳達給雅虎財經頁面

我簡要試過以下API:

  • JSoup
  • 的HtmlUnit
  • 犀牛

我覺得犀牛能得到我要找的內容,但我一直沒能做到這一點呢。

如果有人做了類似的事情,或者可以指出我朝着正確的方向,那將是非常感謝。

讓我知道是否需要更多細節。

+0

錯在與JSoup? Nashorn只是JVM的JS引擎,所以我不確定你想說什麼。 –

+0

Jsoup只返回頁面的html。這裏是我用於Jsoup的代碼:Jsoup.connect(「http://finance.yahoo.com/quote/AAPL/profile?p=AAPL」).get(); \t元素parsedInfo = doc.getElementsByClass(「'D(ib)Va(t)」); \t String myInfo = parsed.text(); \t System.out.println(doc); – TheNewGuy

+0

我想,你應該從技術角度修改你的問題。您應該瞭解JavaScript和HTML之間的區別。您正在談論的元素是HTML元素,JavaScript沒有元素。那麼如果你有HTML/XML,你可以使用SAX解析器在Java中解析它,並獲取你想要獲取的數據。注意: - SAX解析器不適用於巨大的XML/HTML。所以對此,你必須使用DOM解析器。 –

回答

0

HtmlUnit似乎與本網站有問題,因爲響應也不完整。你可以使用PhantomJS。只需download the binary爲您的操作系統並創建一個腳本文件(請參閱API)。

腳本yahoo.js):

var page = require('webpage').create(); 
var fs = require('fs'); 

page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36'; 
page.settings.resourceTimeout = '5000'; 



page.open('http://finance.yahoo.com/quote/AAPL/profile?p=AAPL', function(status) { 
    console.log("Status: " + status); 
    if(status === "success") { 

    var path = 'yahoo.html'; 
    fs.write(path, page.content, 'w'); 
    } 
    phantom.exit(); 
}); 

Java代碼

try { 
    //change path to phantomjs binary and your script file 
    String phantomJSPath = "bin" + File.separator + "phantomjs"; 
    String scriptFile = "yahoo.js"; 

    Process process = Runtime.getRuntime().exec(phantomJSPath + " " + scriptFile); 
    process.waitFor(); 

    //Jsoup 
    Elements elements = Jsoup.parse(new File("yahoo.html"),"UTF-8").select("div.asset-profile-container p strong"); //yahoo.html created by script file in same path 

    for (Element element : elements) { 
     if(element.attr("data-reactid").contains("asset-profile.1.1.1.2")){ 
      System.out.println(element.text()); 
     } 
    } 

} catch (Exception e) { 
    e.printStackTrace(); 
} 

輸出

Consumer Goods 

注: 下面的鏈接返回一個包含公司信息的JSONObject的,不知道但如果crumb參數的變化或對一個公司不斷: https://query2.finance.yahoo.com/v10/finance/quoteSummary/AAPL?formatted=true&crumb=hm4%2FV0JtzlL&lang=en-US&region=US&modules=assetProfile%2CsecFilings%2CcalendarEvents&corsDomain=finance.yahoo.com

+0

它的工作!非常感謝。我花了我的星期天的更好的一部分試圖找出如何得到這兩個字。這意味着很多,我準備放棄我的項目。 – TheNewGuy