我如何从finance.yahoo.com获得股票价格和交易量?

时间:2017-07-30 22:43:13

标签: java jsoup

我是Java的新手,我正在尝试使用finance.yahoo.com上的JSOUP获取股票价格。 https://finance.yahoo.com/quote/aapl

数字在div,table标签中。例如AAPL: Div是一类" D(ib)W(1/2)......"然后是表格,W类(100%),然后是tbody,tr,td,最后是span标记。

如何从span标记中获取值

1 个答案:

答案 0 :(得分:0)

您必须从HTML结构中的唯一点导航到数据,并尝试仅依赖“稳定”信息,即字段的标签而不是行数。

例如,让我们获取音量信息。分析HTML以获得唯一可识别的元素,即包含所有信息的表。在这种情况下,它将是div id="quote-summary"

从那里你可以获得表格和行(tr)。现在迭代到表行,其中包含带有文本“ Volume ”的span

找到该行后,获取“Volume” - td的第二个td或下一个span兄弟。此td包含带有音量值的范围。

String fieldToFiend = "Volume";

Document doc = Jsoup.connect("https://finance.yahoo.com/quote/aapl").get();

//get the root element
Element quoteSummary = doc.getElementById("quote-summary");
String value = quoteSummary.getElementsByTag("tr")
                           //iterate over the table rows inside
                           .stream()
                           //find the row with the first td/span containing the label
                           .filter(tr -> fieldToFiend.equals(tr.getElementsByTag("span").first().text()))
                           //get the 2nd td and it's span element
                           .map(tr -> tr.getElementsByTag("td")
                                        .first()
                                        .nextElementSibling()
                                        .getElementsByTag("span")
                                        .first()
                                        .text())
                           //get the first match
                           .findFirst()
                           .orElseThrow(NoSuchElementException::new);

System.out.println(value);