有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JSoup抓取不断变化的值

我试图从以下不断变化的HTML中获取值

<span class="rts-counter" rel="current_population"> <span class="rts-nr-sign"></span> <span class="rts-nr-int rts-nr-10e9">7</span> <span class="rts-nr-thsep">,</span> <span class="rts-nr-int rts-nr-10e6">786</span> <span class="rts-nr-thsep">,</span> <span class="rts-nr-int rts-nr-10e3">396</span> <span class="rts-nr-thsep">,</span> <span class="rts-nr-int rts-nr-10e0">227</span> </span>

到目前为止,我的代码没有产生任何结果

  Document doc = Jsoup.connect("https://www.worldometers.info/world-population/").get();
        Elements div = doc.select("div.maincounter-number");
        Elements span = div.select("span");
        System.out.println(span);

输出。我想要的东西在

<span class="rts-counter" rel="current_population">retrieving data... </span>

共 (1) 个答案

  1. # 1 楼答案

    对于具有动态内容的站点,使用占位符作为

    <span class="rts-counter" rel="current_population">retrieving data... </span>
    

    所以这个跨度可以在以后用数据填充。通常在对服务器执行另一个异步请求后,只加载正在更改的数据
    Jsoup不能执行JavaScript,但通常可以直接调用通常作为JSON返回的其他数据资源。但在这里它不起作用,我有个坏消息
    数据是假的我正在用Chrome的调试器监视这个站点,并检查网络选项卡。我看到没有与服务器通信,也没有动态获取的数据。这意味着只在第一次加载时检索数据,然后使用JavaScript和一些数学公式在经过一定时间后将计数器增加一定的值,使其具有一定的随机性,使其看起来令人信服
    使用以下URL下载初始数据值: https://www.realtimestatistics.net/rts/init.php?callback=jsoncallback&host=worldometers&time=1590244162325&_=1590244161401(链接是动态的,现在可能已过期) 但结果是以某种方式编码的。它似乎是在这个脚本https://www.realtimestatistics.net/rts/RTSp.js中解码的,但是它被最小化了,而且很难阅读

    因此,要获得原始值,您必须对其RTSp进行反向工程和分析。js获取初始值和用于递增计数器的公式

    相关信息https://www.worldometers.info/licensing/what/