You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JSoup爬取网页数据失败,求助提取目标价格的问题

帮你搞定Jsoup提取网页价格失败的问题

嘿,先看你的代码片段——doc.select(".inst-rate")后面明显没写完,这肯定会先触发编译错误。不过就算补全代码,也可能因为几个常见原因拿不到目标价格,我帮你一步步排查:

1. 先把代码补全再说

首先,你现在的代码只做了选择元素的第一步,缺少提取文本的逻辑。正确的提取单个元素文本的写法应该是这样:

import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

public class JavaTest {
    public static void main(String[] args) throws IOException {
        Document doc = Jsoup.connect("https://www.plus500.de/Instruments/BTCUSD")
                // 加个User-Agent模拟浏览器,避免被网站拦截
                .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36")
                .get();
        
        // 用selectFirst拿第一个匹配的元素,避免多个元素干扰
        Element rateElement = doc.selectFirst(".inst-rate");
        if (rateElement != null) {
            String price = rateElement.text();
            System.out.println("当前BTCUSD价格:" + price);
        } else {
            System.out.println("找不到目标价格元素!");
        }
    }
}

2. 最可能的原因:网页内容是动态加载的

Plus500的实时价格是通过JavaScript动态渲染的,Jsoup只能抓取初始的静态HTML源码,根本等不到JS加载完数据。你可以自己打开浏览器的「查看页面源码」,搜一下.inst-rate,大概率会发现这个标签里是空的,或者根本不存在——因为数据是后来通过AJAX/WebSocket塞进去的。

这种情况的解决办法有两个:

  • 用Selenium替代Jsoup:它能模拟真实浏览器打开页面,等JS执行完再提取元素,完全能拿到动态生成的内容。
  • 直接抓数据接口:打开浏览器开发者工具的「网络」面板,刷新页面找加载价格的API接口,直接请求这个接口拿JSON数据,比解析HTML靠谱多了。

3. 其他可能的小问题

  • 类选择器不够精确:如果页面里有多个带.inst-rate类的元素,你需要给选择器加限定,比如结合父元素的类名,比如doc.selectFirst(".instrument-price .inst-rate")(具体要看页面实际结构)。
  • 网站拦截了请求:有些网站会识别非浏览器的请求,所以一定要加User-Agent请求头,就像我上面代码里加的那样,模拟成Chrome浏览器的请求。

先试试补全代码加User-Agent,如果还是拿不到,那基本就是动态加载的问题,就得换Selenium或者抓接口啦。

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:27:58