2016-08-21 5 views
-1

目的:Yahoo FinanceページからJavaScript要素の内部テキストを取得します。私はJavaを使用したウェブサイトからJSのInnerHTMLofを取得

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

以下のコードを使用してinnerHTMLプロパティを取得することができます

enter image description here

を参照してください。しかし、私は、Java

にヤフー・ファイナンスのページにこれを通信する方法を見つけることができませんしてください私は簡単に次のAPIを試してみた

  • JSoup
  • HTMLUnit
  • Nashorn

私はNashornは、私が探しているテキストを取得することができると思うが、私はまだそれを行うことができませんでした。

誰かが似たようなことをしている、または正しい方向に私を指すことができる場合、それは非常に高く評価されます。

詳細が必要な場合はお知らせください。

+0

? NashornはJVM用のJSエンジンに過ぎないので、あなたが何を言っているのかは分かりません。 –

+0

Jsoupは、ページのhtmlのみを返します。 Jsoup.connect( "http://finance.yahoo.com/quote/AAPL/profile?p=AAPL").get();ここではJsoupで使用したコードを示します。 \t要素parsedInfo = doc.getElementsByClass( "'D(ib)Va(t)"); \t文字列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を使用できます。ご使用のOSに合わせて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パラメータが変化した場合にも、会社の情報を含んでいない返すか、会社のための定数です:JSoupとうまくいかない何 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

それは働いた!どうもありがとうございます。私は日曜日のより良いところをこれら2つの言葉をどうやって得るかを考えようと過ごしました。それはたくさんのことを意味し、私はプロジェクトのその部分をあげようとしていました。 – TheNewGuy

関連する問題