2015-06-14 3 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

Распечатайте, что «Документ» смог прочитать со страницы (используйте 'System.out.println (doc);'). Что-то говорит мне, что ваша проблема может быть связана с тем, что HTML-контент, который вы ищете, динамически добавляется JavaScript браузером, который Jsoup не может сделать, поскольку он не поддерживает JavaScript. В этом случае вы должны использовать более мощный инструмент, например, веб-драйвер (например, Selenium). – Pshemo

+1

Попробуйте отключить JavaScript и посмотреть, можете ли вы видеть таблицы в браузере ... – Pshemo

ответ

0

Ответ предоставляется Psherno:

печати, что документ был в состоянии читать страницы (используйте System.out.println(doc);). Что-то говорит мне, что ваша проблема может быть связана с тем, что HTML-контент, который вы ищете, динамически добавляется JavaScript браузером, который Jsoup не может сделать, поскольку он не поддерживает JavaScript. В этом случае вы должны использовать более мощный инструмент, например, веб-драйвер (например, Selenium).

Смежные вопросы