gpt4 book ai didi

java - 单击按钮后解析 HTML 表格以使其可见

转载 作者:行者123 更新时间:2023-11-30 04:04:26 26 4
gpt4 key购买 nike

我正在开发一个 Java 程序,该程序需要在启动时从网站读取数据。

有问题的网站是这样的:http://bitcoincharts.com/charts/btceUSD#rg10zigHourlyztgSzm1g10zm2g25zv

要访问所需的表,页面底部附近有一个标题为“加载原始数据”的按钮。单击后,会出现包含我需要的信息的表格。

虽然我以前从未这样做过,但我相信我可以轻松学习如何解析表格并将其放入一些数组中。不过,我无法弄清楚的是如何让我的程序“单击”该按钮来显示表格。我怎样才能做到这一点?

编辑:这是我现在正在处理的内容。目前,这绝对不会打印任何内容,我怀疑这是因为 jsoup 没有看到该表,因为“加载原始数据”按钮尚未被“单击”。

for (Element table : doc.select("table[id=chart_table]")) {
for (Element row : table.select("tr:gt(2)")) {
Elements tds = row.select("td:not([rowspan])");
for (Element element : tds) {
System.out.println(element);
}
}
}

最佳答案

要单击链接并执行其他交互式客户端脚本,您可能需要为其删除 Jsoup 并使用 HtmlUnit反而。您还将获得单击链接和抓取 HTML 页面所需的功能。

出于您的目的,您将通过 ajax 访问动态数据填充的链接。要复制此场景,您必须捕获 HtmlElement 并通过单击它再次呈现页面。

类似这样的事情:

final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_17,
YOUR_PROXY_HOST, YOUR_PROXY_PORT);

WebRequest request = new WebRequest(
new URL(
"http://bitcoincharts.com/charts/btceUSD#rg60ztgSzm1g10zm2g25zv"));

webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.setJavaScriptTimeout(10000);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
webClient.getOptions().setTimeout(10000);

HtmlPage page = webClient.getPage(request);
webClient.waitForBackgroundJavaScript(30000);

List<HtmlAnchor> anchors1 = page.getAnchors();
HtmlAnchor link2 = null;
for (HtmlAnchor anchor : anchors1) {
//System.out.println(anchor.asText());
if (anchor.asText().indexOf("Load raw data") > -1) {
link2 = anchor;
break;
}
}
page = link2.click();

现在您可以处理渲染的数据。大概是这样的:

HtmlTable table = (HtmlTable) page.getElementById("chart_table");
System.out.println("Here : - > " + table.asText());

我看到的唯一复杂之处是,因为它是一个 ajax 调用,所以几秒钟后渲染页面可能会有点棘手。 HtmlUnit 上的常见问题解答页面提供了一些克服该问题的选项:

http://htmlunit.sourceforge.net/faq.html#AJAXDoesNotWork

编辑:好吧,我刚刚尝试了上面的代码(当然是出于好奇),它刮掉了您正在查找的整个数据,屏幕截图如下:

enter image description here

希望对你有帮助!

关于java - 单击按钮后解析 HTML 表格以使其可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21106431/

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