に取り組んでいないパース私はJsoupネストされたテーブルには、検索ページの結果テーブル
検索があるGoogle keyword search(https://www.google.com/finance?q=apple&ei=GEiNV9CILMPksAHJmYXQDg)から結果ページのテーブルからいくつかのデータを解析します。その結果、アップル社などの株価情報が表示されます。私は株価を含むテーブルを解析したい。
HTML構造は次のとおりです。
私のコードは次のとおりです。
public static void testGoogle() throws IOException {
Document doc = Jsoup.connect("https://www.google.com/finance?q=apple&ei=GEiNV9CILMPksAHJmYXQDg").userAgent("Mozzila").get();
Elements mainbody = doc.select("div.elastic>"
+ "div#app.g-section.g-tpl-left-11p4em>div#gf-viewc.g-unit>div.fjfe-content>div.g-wrap>"
+ "div.g-section.g-tpl-right-1.sfe-break-top-5>div.g-unit>div.g-c.sfe-break-right>"
+ "div#related > div.id-related-table.gf-table > table)");
(Also tried)
//+ "div#related > div.id-related-table.gf-table > table#cc-table.gf-table)");
System.out.println("Html " + mainbody);
}
私はのdiv#関連する部分までの情報を得ることができますが、その後の表にはありませんショー。私は正しいCSSパスを取得していることを確認するためにクロムのCSSのセレクタとXpathのオプションを使用してみました。 jsoupがこのテーブルから解析していないというCSSパスやその他の理由がない場合に備えて、アドバイスをいただければ幸いです。前もって感謝します!
ザック。今までの情報に最も感謝しています。それは動作するようです。受諾する前に、あなたが何が起こっているのか(私の考えを確認できるかどうかは疑問です)。 Jsoupは同じDOMを解析して解析します。 htmlUnitは、DOMの変更を含むブラウザアクションをシミュレートします。それが正しいとすれば、元のGoogleページではなくRESULTというURLをURLで呼び出すと、最初にDOMの変更が発生する理由はわかりません。 –
JSoupは、サーバーから配信されたソースコードを解析します。ただし、ブラウザが同じソースコードを受け取ると、JavaScriptが呼び出されます。 JavascriptはDOMを操作して追加/削除することができます。株価が絶えず変化していることに注目してください。最新の価格を問い合わせるために、AJAXを使用してDOMを更新するJavaScriptがあります。 –
ソースコード(右クリック>ソースコードの表示)とレンダリングされたコード(右クリック>検査)を比較すると、それらが異なっていることがわかります。 HTMLユニットを使用すると、ソースコードをレンダリングしてJavaScriptを起動することができるため、最終結果はブラウザでページを検査した場合の結果と同じになります。 –