【问题标题】:Extracting Table Data using JSoup使用 JSoup 提取表数据
【发布时间】:2015-08-30 02:56:30
【问题描述】:

我正在尝试使用 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();
}

【问题讨论】:

  • 你的尝试达到/未能达到什么目标?
  • 打印Document 能够从页面读取的内容(使用System.out.println(doc);)。有些事情告诉我,您的问题可能与您正在寻找的 HTML 内容是由浏览器的 JavaScript 动态添加的事实有关,而 Jsoup 无法做到这一点,因为它不支持 JavaScript。在这种情况下,您应该使用更强大的工具,例如 Web 驱动程序(例如 Selenium)。
  • 尝试禁用 JavaScript 看看是否可以在浏览器中看到表格...
  • @Ifurnini 我的尝试一无所获。输出显示“运行:构建成功(总时间:1 秒)”
  • @Pshemo 不确定如何禁用 JavaScript。需要一些时间来谷歌搜索。另外,我打印了文件在每次尝试中所说的内容。它有很多,在我看来,HTML。我应该寻找什么具体的东西吗?

标签: java html-parsing jsoup extract


【解决方案1】:

Psherno 提供的答案:

打印 Document 能够从页面读取的内容(使用 System.out.println(doc);)。有些事情告诉我,您的问题可能与您正在寻找的 HTML 内容是由浏览器的 JavaScript 动态添加的事实有关,而 Jsoup 无法做到这一点,因为它不支持 JavaScript。在这种情况下,您应该使用更强大的工具,例如 Web 驱动程序(例如 Selenium)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 2012-03-15
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多