2015-06-14 103 views
1

我試圖從使用JSoup的表中提取財務信息。我查看了類似的問題,並能得到他們的例子來工作(這裏有兩個:使用JSoup提取表數據

Using Jsoup to extract data

Using JSoup To Extract HTML Table Contents)。

我不確定爲什麼代碼在my URL上不起作用。

下面是3個不同的嘗試。任何幫助,將不勝感激。

String s = "http://financials.morningstar.com/valuation/price-ratio.html?t=AXP&region=usa&culture=en-US"; 

//Attempt 1 
try { 
    Document doc = Jsoup.connect("http://financials.morningstar.com/valuation/price-ratio.html?t=AXP&region=USA&culture=en_US").get(); 

    for (Element table : doc.select("table#currentValuationTable.r_table1.text2")) { 
     for (Element row : table.select("tr")) { 
      Elements tds = row.select("td"); 
      if (tds.size() > 6) { 
       System.out.println(tds.get(0).text() + ":" + tds.get(1).text()); 
      } 
     } 
    } 
} 
catch (IOException ex) { 
    ex.printStackTrace(); 
} 
// Attempt 2 
try { 
    Document doc = Jsoup.connect(s).get(); 
    for (Element table : doc.select("table#currentValuationTable.r_table1.text2")) { 
     for (Element row : table.select("tr")) { 
      Elements tds = row.select("td"); 
      for (int i = 0; i < tds.size(); i++) { 
       System.out.println(tds.get(i).text()); 
      } 
     } 
    }   
} 
catch (IOException ex) { 
    ex.printStackTrace(); 
} 
//Attempt 3 
try { 
    Document doc = Jsoup.connect(s).get(); 
    Elements tableElements = doc.select("table#currentValuationTable.r_table1.text2"); 

    Elements tableRowElements = tableElements.select(":not(thead) tr"); 

    for (int i = 0; i < tableRowElements.size(); i++) { 
     Element row = tableRowElements.get(i); 
     System.out.println("row"); 
     Elements rowItems = row.select("td"); 
     for (int j = 0; j < rowItems.size(); j++) { 
      System.out.println(rowItems.get(j).text()); 
     } 
    }   
} 
catch (IOException ex) { 
    ex.printStackTrace(); 
} 
+0

你的嘗試達到/未能達到什麼目標? – lfurini

+1

打印'Document'能夠從頁面讀取的內容(使用'System.out.println(doc);')。有些東西告訴我,您的問題可能與您正在查找的HTML內容是由JavaScript通過瀏覽器動態添加的事實相關,Jsoup無法執行此操作,因爲它沒有JavaScript支持。在這種情況下,您應該使用更強大的工具,如網絡驅動程序(如Selenium)。 – Pshemo

+1

嘗試禁用JavaScript並查看您是否可以在瀏覽器中看到表格... – Pshemo

回答

0

回答Psherno提供:

打印內容文件能夠從頁面讀取(使用System.out.println(doc);)。有些東西告訴我,您的問題可能與您正在查找的HTML內容是由JavaScript通過瀏覽器動態添加的事實相關,Jsoup無法執行此操作,因爲它沒有JavaScript支持。在這種情況下,您應該使用更強大的工具,如網絡驅動程序(如Selenium)。