在java中使用HtmlUnit解析动态网页是行不通的



解释要提取的数据的图像

我正在尝试使用 java 的 HtmlUnit 库从网页(图像中标记为红色(中提取数据。但我无法获得那个特定的价值。

WebClient webClient = new WebClient(BrowserVersion.CHROME);
Thread.sleep(5000);
HtmlPage page = webClient.getPage("https://earth.nullschool.net/#current/wind/isobaric/500hPa/orthographic=-283.71,14.19,2183/loc=76.850,11.440");
Thread.sleep(5000);
System.out.println(page.asXml());

我检查了我在控制台窗口上得到的 html。它不包含该值。

<p>
  <span id="location-wind" class="location">
          </span>
  <span id="location-wind-units" class="location text-button">
          </span>
</p>

这是因为这些是通过JavaScript填写的。加载页面时,这些字段最初为空。您可以通过查看源代码并搜索id="location来检查这一点。

该页面发出两个额外的 HTTP 请求来获取动态数据:

  1. https://earth.nullschool.net/data/earth-topo.json?v3
  2. https://gaia.nullschool.net/data/gfs/current/current-wind-isobaric-500hPa-gfs-0.5.epak

此数据中的某个位置(它们加起来约为 1.2 MB(是您正在寻找的数据。最好的办法是使用工具(可能是在线工具(将 JSON 转换为 Java 对象,或者研究 JSON 并编写代码以获取所需的特定数据。

也就是说,如果该数据在 JSON 中,我不相信。EPAK文件似乎是某种带有嵌入式JSON的二进制数据,但我无法弄清楚数据是否可能在那里。

另一种方法是使用Selenium,让它为您解析页面,并从那里检索数据。

最新更新