2017-05-30 15 views
0

私はいくつかのHTMLテーブルを持つ特定のサイトからテーブルを抽出するプロジェクトに取り組んでいます。ここでは赤いボックスに私が抽出したい特定のテーブルを強調した画像です:jsoupを使ってウェブサイトからテーブルを抽出する際の問題

Image

そして、私のコード:

String html = "https://finance.yahoo.com/quote/GOOG/analysts?p=GOOG"; 
try { 
    Document doc = Jsoup.connect(html).get(); 
    Element tableElements = doc.select("table").get(7); 

    for (Element row : tableElements.select("tr")) { 
     Elements tds = row.select("td"); 
     for (int j = 0; j < tds.size(); j++) { 
      System.out.println(tds.get(j).text()); 
     } 
    } 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

テーブルを選択するときに、このコードは、境界エラーのうちのインデックスを返します。しかし、 。インデックスを下げると、他のテーブルの1つがページに表示されます。私が望む特定のテーブルを選択する方法が不明です。

+0

私はjsoupサポートcssセレクタを覚えています。あなたは、ページ上のテーブルにテーブルセレクタを修正する必要があります。コードでは、汎用セレクタ・テーブルを選択しています。 –

答えて

0

問題のテーブルは、AJAX経由で非同期にロードされます。このため、範囲外のインデックス例外が発生します。このテーブルは、最初のURLを読み込む際にはDOM内に存在しません。ブラウザの開発者ツールを使用してページの読み込みを分析し、必要なデータを読み込むAJAX呼び出しを見つける必要があります。あなたが探している情報に到達する別の方法は、セレンのwebdriverのような別のテクノロジーを使用してコンテンツをロードすることです。 Selenium webdiverはJavaScriptを実行するので、すべてのAJAX読み込みコンテンツを含むフルページを読み込んでレンダリングします。がんばろう。

関連する問題