【问题标题】:Getting a string text from Jsoup Element object从 Jsoup Element 对象获取字符串文本
【发布时间】:2015-08-17 15:15:12
【问题描述】:

我正在尝试从 Yahoo Finance 获取股票报价。我提取页面,找到带有报价的 span 标签,但是当我尝试将其输出到控制台时没有任何反应。有人可以帮忙吗?

Document doc = Jsoup.connect("http://finance.yahoo.com/q?s=AAPL").get();
    Elements quote = doc.select("yfs_184_aapl");
    for(Element h: quote)
    {
        String price = h.text();
        System.out.println(price);
    }

我也知道Element对象不为空:

if(quote == null)
    {
        System.out.println("The element is empty");
    }

编辑:

我试过这个方法

Document doc = Jsoup.connect("http://finance.yahoo.com/q?s=AAPL").get();
    Element quote = doc.getElementById("yfs_184_aapl");
    String price = quote.text();
    System.out.println(price);

当我尝试打印价格变量时,它给了我空指针异常;

id yfs_184_aapl 也是股票价格的跨度标签 ID。如果您检查股票价格元素,您应该能够找到它。

【问题讨论】:

  • 请描述...
  • 我在该 HTML 中看不到任何 yfs_184_aapl 标记(也没有具有此类/id 的元素)。此外,select 将不会返回 null,如果它找不到任何东西,但会返回空列表,所以你应该用 quote.isEmpty() 测试它,而不是 quote == null
  • 那个页面也有很多JavaScript代码,但是Jsoup不支持JS。尝试在浏览器中关闭 JS 支持,看看是否会在尝试解析的页面上看到结果。

标签: java html css tags jsoup


【解决方案1】:

我简要查看了您提供的 URL。我认为您误用了 css 选择器语法,因为您要查找的元素似乎具有 id“yfs_184_aapl”。您正在搜索具有该名称的标签。所以正确的查询应该是

Element quote = doc.select("#yfs_184_aapl").first();

或者

Element quote = doc.getElementById("yfs_184_aapl")

我确实检查了该内容是直接加载还是通过 AJAX 加载的。你很幸运,它已经在原始内容中,所以应该能够通过给定的替代品获得你需要的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    相关资源
    最近更新 更多