java - Jsoup 嵌套表解析不适用于搜索页面结果表

标签 java html css jsoup

我想从 Google keyword search 的结果页面中的表中解析一些数据( https://www.google.com/finance?q=apple&ei=GEiNV9CILMPksAHJmYXQDg )

搜索是:1 : https://www.google.com/finance?q=apple&ei=GEiNV9CILMPksAHJmYXQDg (关键字:苹果)。结果显示了苹果公司和同类公司的股价信息。我想解析包含股价的表格。

html结构是:

enter image description here

我的代码是:

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#related 部分的信息,但之后的表格不显示。我尝试使用 Chrome css 选择器和 Xpath 选项来确保我获得正确的 css 路径。如果我缺少 css 路径或 jsoup 未从该表解析的任何其他原因,我将不胜感激。提前致谢!

最佳答案

您面临的问题是页面 DOM 在使用 JavaScript 加载到浏览器后发生了变化。 Jsoup 通过解析原始源代码来工作。它无法解析呈现的 DOM。为了解析该表,您需要使用类似 HTML Unit 的内容呈现页面。然后就可以使用Jsoup了。

    // load page and capture DOM
    WebClient webClient = new WebClient();
    HtmlPage myPage = webClient.getPage("https://www.google.com/finance?q=apple");

    // convert to jsoup document
    Document doc = Jsoup.parse(myPage.asXml());

    // clean up resources
    webClient.close();

    // select desired data
    Elements rows = doc.select("table#cc-table > tbody > tr");

    for (Element row : rows) {
        String symbol = row.select("td.ctsymbol").text();
        String name = row.select("td.ctname").text();
        String price = row.select("td.rgt").first().text();
        System.out.println(symbol + " " + name + " " + price);
    }

输出

AAPL Apple Inc. 104.14
SNDK SanDisk Corporation 76.18
MSFT Microsoft Corpora... 56.53
SSNNF SAMSUNG ELECTRONI... 0.00000
VZ Verizon Communica... 55.09
HPQ HP Inc 14.15
IBM Intl. Business Ma... 161.72
HTCKF HTC CORPORATION S... 11.82
SNE Sony Corp (ADR) 30.59
GOOGL Alphabet Inc 762.63
WDC Western Digital Corp 53.97

关于java - Jsoup 嵌套表解析不适用于搜索页面结果表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38600434/

相关文章:

java - Spring MVC Controller 映射不起作用

java - 当我进入 JFrame 时如何对 JTable 的列进行排序?

php - 如何使用php在html页面中的选项卡之间传递值

JavaScript 颜色解析器

jquery - 如何将链接带到 tr/row 顶部的层?

java - 读取文件 skin.json libgdx 时出错

java - 来自 Angular 应用程序的请求被 Spring 应用程序中的 CORS 策略阻止

html - 100% 高度包装器中的可滚动 Div

javascript - Firebase JavaScript : Get id of the first child

css - 如何使一个div子元素适合宽度较小的父div