gpt4 book ai didi

java - 在雅虎财经上使用 JSoup 提取表数据

转载 作者:行者123 更新时间:2023-12-01 22:16:15 24 4
gpt4 key购买 nike

尝试练习使用 JSoup 从表中提取数据。不明白为什么我无法从中提取“已发行股票”字段

https://finance.yahoo.com/q/ks?s=AAPL+Key+Statistics

这里有两次尝试,其中“s”是 AAPL:

public class YahooStatistics {
String sharesOutstanding = "Shares Outstanding:";

public YahooStatistics(String s) {
String keyStatisticsURL = ("https://finance.yahoo.com/q/ks?s="+s+"+Key+Statistics");

//Attempt 1
try {
Document doc = Jsoup.connect(keyStatisticsURL).get();

for (Element table : doc.select("table.yfnc_datamodoutline1")) {
for (Element row : table.select("tr")) {
Elements tds = row.select("td");
for (Element td : tds.select(sharesOutstanding)) {
System.out.println(td.ownText());
}
}
}
}
catch (IOException ex) {
ex.printStackTrace();
}

//Attempt 2

try {
Document doc = Jsoup.connect(keyStatisticsURL).get();

for (Element table : doc.select("table.yfnc_datamodoutline1")) {
for (Element row : table.select("tr")) {
Elements tds = row.select("td");
for (int j = 0; j < tds.size() - 1; j++) {
Element td = tds.get(j);
if ((td.ownText()).equals(sharesOutstanding)) {
System.out.println(tds.get(j+1).ownText());
}
}
}
}
}
catch(IOException ex) {
ex.printStackTrace();
}

尝试返回:BUILD SUCCESSFUL,仅此而已。

我已经在浏览器上禁用了 JavaScript,但表格仍然显示,因此我假设这不是用 JavaScript 编写的,而是用 HTML 编写的。

如有任何建议,我们将不胜感激。

最佳答案

编辑后有关源的注释:

  • 您应该比较ownText()而不是text()text()为您提供所有元素及其所有子元素的组合文本。在本例中,元素包含 Shares Outstanding<font size="-1"><sup>5</sup></font>: ,所以它的组合文本是 "Shares Outstanding5:" 。如果您使用ownText它将只是 "Shares Outstanding:" .
  • 请注意冒号 ( : )。更新 sharesOutstanding 中的值相应地。
  • 您向其传递了错误的 URL。应该有一个+AAPL .
  • 您当前的查询(至少是第二次尝试)返回元素两次,因为存在嵌套表,因此它会两次查找 TD。

您可以在找到匹配项后中断循环,返回到原始版本(如上进行更正) - 请参阅注释 - 或者您可以尝试使用更复杂的查询,该查询只会匹配一次:

Elements elems = doc.select("td.yfnc_tablehead1:containsOwn("+sharesOutstanding+") + td.yfnc_tabledata1");

if ( ! elems.isEmpty() ) {
System.out.println( elems.get(0).owntext() );
}

此选择器为您提供所有 td类为 yfnc_tabledata1 的元素,其前一个兄弟是 td类为 yfnc_tablehead1 的元素并且其自己的文本包含“已发行股票:”字符串。这基本上应该选择您需要的确切 TD。

注意:此答案的先前版本是关于 Elements.select() 之间差异的长篇大论。和Element.select() 。事实证明,我完全错了,如果您纠正了上述四点,您的原始版本应该可以工作。所以澄清一下:select()Elements上实际上确实会查看每个元素的内部,并且结果列表可能包含原始列表中与选择匹配的任何元素的后代。对此感到抱歉。

关于java - 在雅虎财经上使用 JSoup 提取表数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30956743/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com