我是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标记中获取值
答案 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);