Java HTML 解析具有无限滚动的页面

Posted

技术标签:

【中文标题】Java HTML 解析具有无限滚动的页面【英文标题】:Java HTML Parsing a Page with Infinite Scroll 【发布时间】:2015-11-13 01:35:08 【问题描述】:

如果页面具有无限滚动,我如何在 java 中获取页面的 html?我目前正在以这种方式抓取页面:

URL url = new URL(stringUrl);
URLConnection con = url.openConnection();
InputStream in = con.getInputStream();
String encoding = con.getContentEncoding();
encoding = encoding == null ? "UTF-8" : encoding;
String html = IOUtils.toString(in, encoding);
Document document = Jsoup.parse(html);

但它不会返回与页面的无限滚动部分相关的任何内容。如何在 HTML 页面上触发此滚动,以便我的 Jsoup 文档包含此部分?

【问题讨论】:

可以给个网址吗 【参考方案1】:

@dsh 是对的,内容很可能是通过 AJAX 动态加载的。作为使用真实浏览器(即 selenium webdriver)的替代方案,您可以查看网络流量并确定页面触发的 API 调用。您也许可以直接使用 Jsoup 调用该 Api。然而,内容通常不是 HTML,而是 JSON、XML 或其他格式。这样做可能仍然非常值得,因为使用 webdriver 通常非常缓慢且资源繁重。

【讨论】:

【参考方案2】:

无限滚动描述了一种页面不包含内容的技术。一些 javascript 代码在浏览器中运行,向服务器发送请求以获取其他内容并将其添加到页面中。当您滚动到可用内容的末尾时,JavaScript 代码会重复该过程:它会发送另一个请求并添加其他内容。

因此,您需要一个带有 JavaScript 引擎的 Web 浏览器,该引擎可以运行 JavaScript 代码并产生导致代码加载内容的事件。

【讨论】:

有什么方法可以从 Java 应用程序中触发这个 javascript? 您可以查看 Selenium Webdriver。有一个 Java API 可以以编程方式控制浏览器。否则,您将需要实际实现将正确解释/执行 Javascript 代码的整个运行时。

以上是关于Java HTML 解析具有无限滚动的页面的主要内容,如果未能解决你的问题,请参考以下文章

在无限滚动页面中加载不同维度的表格,同时最小化表格之间的空白空间

无限滚动抓取动态电子商务页面

ios中具有自动滚动功能的无限Textview

页面加载时调用的离子无限滚动功能

连续循环页面(非无限滚动)

无限滚动脚本无法识别 Jquery 事件