java - 在java中使用HtmlUnit解析动态网页不起作用

标签 java html xml parsing htmlunit

Image explaining the data to be extracted

我正在尝试从 web page 中提取数据(图中红色标记)使用HtmlUnit java 的库。但我无法获得该特定值。

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,让它为您解析页面,并从那里检索数据。

关于java - 在java中使用HtmlUnit解析动态网页不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49761133/

相关文章:

java - 客户端发送大文件到服务器

jquery - Bootstrap - 模态不工作?

javascript - 如何选择所有输入并按 id 或 class 选择单个或多个 div 内的元素

java - 无法提取响应 : no suitable HttpMessageConverter with jaxb2marshaller

java - 用 Java 替换 XML 元素

java - 如何限制方法调用以允许线程完成

java - 优先级队列实现中比较对象的属性

php - 如何获取 Div 或表格的像素宽度?

xml - 规范用于 JUnit XML 输出

java - 如何将ArrayList拆分为另一个List