gpt4 book ai didi

java - Jsoup 问题抓取非硬编码数据

转载 作者:行者123 更新时间:2023-11-30 08:35:09 27 4
gpt4 key购买 nike

我正在尝试使用 Jsoup 从 Surfline.com 收集波高信息.我在屏幕截图中有我想要的元素,它显示在开发工具中。当我使用 Jsoup 抓取网站时,返回的字符串包括在开发工具中看到的所有内容,但我需要的是“1-2ft”。该网站是大量的 Javascript,我假设 jsoup 在 javascript 实际运行之前正在获取 html(我真的不知道)。我是否需要专门告诉 jsoup 等待页面加载,或者我是否缺少其他一些关键组件?

surfline.com

这是我正在使用的代码。

    Document doc = Jsoup.connect("http://www.surfline.com/surf-report/folly-beach-pier-southside-southeast_5294/").get();
Elements content = doc.select("div[id=current-surf-range]");
System.out.println(content);

这是我在 IDE 中看到的输出

<div id="current-surf-range" style="font-size:21px;font-weight:bold;padding-top:7px; padding-bottom: 7px;"></div>

div 的内容不会随它一起返回,这似乎真的很奇怪。这是我第一次使用 Jsoup,我尽我所能阅读文档,但似乎没有涉及这个特定问题。任何见解都会很棒并且非常感谢。

最佳答案

您在浏览器中看到的内容不一定是您通过 URL 使用您选择的 HTTP 库下载页面时获得的内容。事实上,您永远不应该期望它们是相同的。在现代网络中,网页是非常动态的并且是异步加载的,涉及对不同资源提供者的多个 API 调用和在浏览器(具有 javascript 引擎)中执行的 javascript。

在这种情况下,您使用 JSoup 得到的是浏览器开始形成页面的初始 HTML。然后,有一组对 surfline API 的 XHR 调用,将数据带入浏览器,然后动态填充页面的不同部分,包括当前的冲浪范围。


解决该问题的最简单方法是切换到名为 selenium 的浏览器自动化工具。这将启动一个真正的浏览器。然后您可以等待当前的 surf range 元素有一个值,如果您希望继续使用 JSoup,获取页面源并将其提供给 JSoup 以进行进一步解析.

另一种方法是查看页面在浏览器开发人员工具中发出的请求,然后尝试在您的代码中模拟这些请求,解析 JSON 响应并提取冲浪预报数据。

关于java - Jsoup 问题抓取非硬编码数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38417180/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com